<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBA (Visual Basic for Applications)]]></title>
		<link>https://forum.script-coding.com/index.php</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;fid=17&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние темы раздела «Серый форум».]]></description>
		<lastBuildDate>Sat, 18 Apr 2026 15:25:36 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[VBA: Непонятки с выделением смежного символа слева от вставки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18582&amp;action=new</link>
			<description><![CDATA[<p>Привет, народ! Столкнулся с лютыми непонятками, прошу разъяснить! Допустим, есть такой код:</p><div class="codebox"><pre><code>Dim Range1 As Word.Range
Set Range1 = Selection.Range    
Selection.Next(Unit:=wdCharacter, Count:=2).Select
Range1.Text = &quot;-&quot;
Set Range1 = Nothing</code></pre></div><p>Допустим, есть тестовый текст: &quot;SomeText&quot;. Теперь делаем так: выделяем в нём букву &quot;o&quot; и запускаем наш код выше -- выделение я тут условно для наглядности обрамлю квадратными скобками (ясно, что в реальности скобок нет). Ниже показано состояние: было/стало (т.е. до выполнения кода и после):</p><div class="codebox"><pre><code>S[o]meText  --  S-m[e]Text</code></pre></div><p>Вместо &quot;o&quot; вставилось тире &quot;-&quot; (точнее, минус, но это не суть), а выделение перешло на [e] -- так и должно по-идее быть, тут всё норм. Но вот если переместить выделение на ОДИН символ, (т.е. написать в коде выше Count:=1, а не Count:=2), то будет вот такая фигня:</p><div class="codebox"><pre><code>S[o]meText  --  S[-m]eText</code></pre></div><p>То есть выделение почему-то расширяется с [m] на вставленное тире [-m], хотя по идее должно быть вроде [m]</p><p>При этом если делать аналогично, но вставлять слева -- вот так:<br /></p><div class="codebox"><pre><code>
Dim Range1 As Word.Range
Set Range1 = Selection.Range    
Selection.Previous(Unit:=wdCharacter, Count:=1).Select
Range1.Text = &quot;-&quot;
Set Range1 = Nothing</code></pre></div><p>То всё норм, расширения выделения не происходит:</p><div class="codebox"><pre><code>S[o]meText  --  [S]-meText</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (EgorS)]]></author>
			<pubDate>Sat, 18 Apr 2026 15:25:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18582&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[VBA: Непонятки с перехватом событий Word (WithEvents)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18547&amp;action=new</link>
			<description><![CDATA[<p>Здравствуйте! Не могу разобраться с такими непонятками. Допустим, мне надо перехватывать клики в Word. Пусть есть форма &quot;myForm1&quot; с двумя кнопками:</p><p>&quot;Включить перехват&quot; -- запускает процедуру &quot;Word_Events_Register&quot; (её код см. ниже)<br />&quot;Выключить перехват&quot; -- запускает процедуру &quot;Word_Events_UnRegister&quot; (её код см. ниже)</p><p>Есть модуль класса &quot;clsWordEvents&quot; с таким кодом</p><div class="codebox"><pre><code>&#039; Этот объект (класс) нужен для перехвата событий Word.
&#039; В данном случаю он использ-ся для перехвата события
&#039; WindowSelectionChange (это когда кликаешь курсором в
&#039; разных местах)
&#039;
Option Explicit

Public WithEvents AppWord As Word.Application

Private Sub AppWord_WindowSelectionChange(ByVal Sel As Selection)

    Dim FontName As String
    Dim SymbCode As Integer
    Dim SymbCodeS As String

    FontName = Sel.Range.Font.Name

    If FontName &lt;&gt; &quot;Verdana&quot; Then
       &#039; шрифт не Verdana -- выходим
       Exit Sub
    End If
    &#039; Шрифт Verdana -- продолжаем

    &#039; выделяем смивол, по которому (перед которым) кликнули курсором
    &#039;
    If Sel.Type = wdSelectionIP Then
       Sel.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    End If

End Sub</code></pre></div><p>есть модуль &quot;Module1&quot; с кодом:</p><div class="codebox"><pre><code>Option Explicit

Private obWordEvents As clsWordEvents
&#039;
&#039; Объект класса clsWordEvents, после своего создания он будет
&#039; реагир на события Word (тут на событ WindowSelectionChange)
&#039;
&#039; NOTES:
&#039;
&#039; 1. чтобы это работало, в VBA-проекте должен быть класс
&#039;    clsWordEvents -- проверь!
&#039;
&#039; 2. создание obj obWordEvents -- в sub Word_Events_Register,
&#039;    уничтожен -- в sub Word_Events_UnRegister (после уничтож
&#039;    Word не будет реагир на событие WindowSelectionChange --
&#039;    это сделано для удобства, чтобы отключ. перехват событий
&#039;    когда это не нужно и мешает. Запуск этих SUB -- вручную
&#039;    из окна макросов Word.
&#039;

Sub Word_Events_Register()

    &#039; Создает объект (обработчик событий), перехватывающий события
    &#039; Word (в данном случае это будет событ WindowSelectionChange)

    If Not obWordEvents Is Nothing Then
       &#039; ветка, когда объект-обработчик событий Word уже
       &#039; существует, so его создавать не надо -- выходим.
       &#039;
       &#039; MsgBox &quot;Обработчик событий уже был создан&quot; &amp; Chr(13) &amp; _
       &#039; &quot;и не требует повторной регистрации&quot; &amp; Chr(13) &amp; _
       &#039; &quot;(просто выходим).&quot;
       Exit Sub
    End If

    Set obWordEvents = New clsWordEvents
    Set obWordEvents.AppWord = Word.Application

End Sub

Sub Word_Events_UnRegister()

    &#039; Уничтожает объект (если он ранее был создан запуском
    &#039; Word_Events_Register), перехватывающий события Word.
    &#039; Я сделал это просто для удобства, чтобы при необходимости
    &#039; отключать перехват событий.

    If obWordEvents Is Nothing Then
       &#039; ветка, когда объект-обработчик событий Word не
       &#039; существует, so его уничтожать не надо -- выход.
       &#039;
       &#039; MsgBox &quot;Обработчик событий не существует,&quot; &amp; Chr(13) &amp; _
       &#039; &quot;поэтому его уничтожение не нужно.&quot; &amp; Chr(13) &amp; _
       &#039; &quot;(просто выходим).&quot;
       Exit Sub
    End If
    Set obWordEvents = Nothing

End Sub</code></pre></div><p>Есть модуль &quot;FormsView&quot; с кодом:</p><div class="codebox"><pre><code>Option Explicit

&#039; В этом модуле Е макросы для отображения или скрытия
&#039; разного рода диалоговых окон (форм, сообщений итп.)

Sub myForm1_Show()
    myForm1.Show &#039; отображ. форму myForm1
End Sub</code></pre></div><p>Теперь делаем следующее. Выводим форму &quot;myForm1&quot; (запуском в окне макросов процедуры&nbsp; &quot;myForm1_Show&quot;). Жмём кнопку &quot;Включить перехват&quot; (сработает процедура &quot;Word_Events_Register&quot;). Кликаем по тексту в Word и после клика курсор превращается в выделение — примерно так: &quot;сл|ово&quot; --&gt; &quot;сл[о]во&quot; (&quot;|&quot; означает курсор, а &quot;[]&quot; выделение).</p><p>Жмем кнопку &quot;Выключить перехват&quot; (сработает процедура &quot;Word_Events_UnRegister&quot;) и теперь при кликах выделения не будет: &quot;сл|ово&quot;. — Всё так как мне и надо, это понятно и нормально.</p><p>Допустим теперь, что на форме есть третья кнопка &quot;Action&quot; (название условное), которая запускает такой код:</p><div class="codebox"><pre><code>Private Sub btnAction_Click()

    Word_Events_UnRegister &#039; выключили перехват событий
    Selection.Move Unit:=wdCharacter, Count:=1 &#039; сдвинули курсор на 1 символ вправо
    Word_Events_Register &#039; включили перехват обратно

End Sub</code></pre></div><p>То есть тут по идее происходит то же самое, что было описано выше с нажатием кнопок, только отключение/включение перехвата событий делается не вручную (кнопками), а программно прямым запуском соотв-х процедур. Но вот тут и возникают лютые непонятки: при этом после клика получается так:</p><p>&quot;сл|ово&quot; --&gt; &quot;сл[о]во&quot;<br />-- а должно быть (по идее) так: --<br />&quot;сл|ово&quot;</p><p>То есть такое впечатление, что движение курсора (Selection.Move) почему-то перехватывается, хотя перехват вроде бы выключен. Может кто-нибудь объяснить, почему так происходит?</p>]]></description>
			<author><![CDATA[null@example.com (EgorS)]]></author>
			<pubDate>Fri, 30 Jan 2026 11:26:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18547&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[VBA: Тулбар в файлах Word 2000/2003, открытых в Word 2007 и выше]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18534&amp;action=new</link>
			<description><![CDATA[<p>Здравствуйте. Извините, если немного не в тему, но просто неохота думать, где еще спросить (форум OSZone сдох, а на Ру-Борде чё-то молчат). Так что если кто знает, ответьте, пожалуйста.</p><p>Если в Word 2000/2002/2003 создать свой тулбар и сохранить его в данном документе, а потом открыть этот файл в Word 2007/2010 итд, то (как я понимаю) кнопки этого тулбара будут видны на &quot;ленте&quot; (риббоне) на вкладке &quot;Надстройки&quot; в группе &quot;Настраиваемые панели инструментов&quot;.</p><p>Но я заметил такую странную фигню: если на этом тулбаре (имеется в виду Word 2000-2003) находятся _только_ кнопки, запускающие какие-то мои макросы (т.е. процедуры SUB), то при открытии этого файла в Word 2007+ в группе &quot;Настраиваемые панели инструментов&quot; никаких кнопок не будет. Однако если добавить на этот тулбар (в Word 2000-2003) хотя бы одну стандартную кнопку (ну, например, &quot;Копировать&quot; -- выглядит как такие 2 листочка бумаги, в общем, ясно, о чём я говорю), то в Word 2007+ все кнопки тулбара волшебным образом появляются.</p><p>Что это за дурацкая багофича или я чего-то не понимаю? В общем вопрос: можно ли как-то &quot;проявить&quot; такой кастомный тулбар из Word 2000-2003 в Word 2007+, если на нём только кнопки запуска макросов (без добавления кнопок стандартных команд)?</p>]]></description>
			<author><![CDATA[null@example.com (EgorS)]]></author>
			<pubDate>Mon, 15 Dec 2025 14:48:27 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18534&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[VBA: как в Word в VBA узнать коды символов 224-231 и 232-239]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18531&amp;action=new</link>
			<description><![CDATA[<p>Есть шахматный шрифт &quot;Chess Merida&quot;. Там есть символы рамки вокруг доски. Тут речь о нижней и левой рамках. Рамки могут быть с подписями и без. &quot;Подписи&quot; -- т.е. когда внизу под доской по горизонтали идут буквы, обозначающие вертикали (A,B,…,H), а слева от доски -- идут цифры, обозначающие горизонтали (1,2,…,8).</p><p>Коды символов (если посмотреть в Insert &gt; Symbol)</p><p>нижняя рамка без подписи : 40<br />левая рамка без подписи : 36</p><p>нижняя рамка (т.е. с буквами) A-H : 232-239<br />левая рамка (т.е. с цифрами) 1-8 : 224-231</p><p>Теперь, собственно, непонятки. Допустим, я хочу через VBA вставить символ с неким кодом:</p><p>нижняя рамка с буквой A:<br />&nbsp; &nbsp; Selection.InsertSymbol _<br />&nbsp; &nbsp; &nbsp; Font:=&quot;Chess Merida&quot;, _<br />&nbsp; &nbsp; &nbsp; CharacterNumber:=232, _<br />&nbsp; &nbsp; &nbsp; Unicode:=False</p><p>левая рамка с цифрой 1 (единица):<br />&nbsp; &nbsp; Selection.InsertSymbol _<br />&nbsp; &nbsp; &nbsp; Font:=&quot;Chess Merida&quot;, _<br />&nbsp; &nbsp; &nbsp; CharacterNumber:=224, _<br />&nbsp; &nbsp; &nbsp; Unicode:=False</p><p>Тут всё работает нормально. Аналогично будет и для остальных рамок с буквами/цифрами, только, соответственно, надо использовать их коды.</p><p>А вот если я пытаюсь через VBA <strong>узнать</strong> код сивола такой буквенно-цифровой рамки (т.е. символы с кодами 224-231 и 232-239), то получается облом:</p><p>Выделим символ и выполним в окне Immediate:<br />?AscB(Selection.Characters(1))<br />для всех этих символов будет почему-то выдано 40<br />AscW (если использовать его вместо AscB) тоже выдает 40</p><p>При этом для остальных символов -- например, белая пешка на чёрной клетке (80), черный король на черной клетке (76), в том числе и упомянутые выше рамки без подписи (40, 36) -- AscB выдаёт правильные коды. В чём тут дело? Как мне в VBA узнать коды для символов 224-231 и 232-239?</p><br /><p><strong>* * *</strong></p><br /><p><span style="color: brown"><strong>[дополнение]</strong></span> неожиданно вопрос решился. <a href="http://forum.script-coding.com/viewtopic.php?pid=163036#p163036">Решение</a> я изложил несколькими постами ниже, поэтому всё дальнейшее обсуждение с &quot;ценными&quot; советами предлагаю считать утратившим актуальность, благо решение оказалось удивительно простым.</p>]]></description>
			<author><![CDATA[null@example.com (EgorS)]]></author>
			<pubDate>Sun, 30 Nov 2025 19:35:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18531&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[VBA: Операции реляционной алгебры]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18304&amp;action=new</link>
			<description><![CDATA[<p>Здравствуйте, помогите пожалуйста, необходимо написать код, для VBA на основании таблиц A и B, должны быть сделаны операции, а именно пересечение, объединение, разность и произведение, как видите реализация только пересечение, и объединение(код представлен ниже), но слегка с ошибками, разность и произведение, просто нет возможности сделать?</p><div class="codebox"><pre><code>
Sub Start()
Dim A() As String
Dim B() As String
Dim ASB() As String
Dim AUB() As String
i% = 3

Do
If Cells(i%, 2).Value = &quot;&quot; Then
n% = i% - 3
Exit Do
End If
i% = i% + 1
Loop

If n% = 0 Then
MsgBox &quot;?????? A ????&quot;
Exit Sub
End If

i% = 3
Do
If Cells(i%, 4).Value = &quot;&quot; Then
m% = i% - 3
Exit Do
End If
i% = i% + 1
Loop

If m% = 0 Then
MsgBox &quot;?????? B ????&quot;
Exit Sub
End If

&#039; ??????????????? ??????????? ????????
ReDim A(1 To n%, 1 To 2) As String
ReDim B(1 To m%, 1 To 2) As String
ReDim ASB(1 To n% + m%, 1 To 2) As String
ReDim AUB(1 To n% + m%, 1 To 2) As String

&#039; ?????? ?????? ?? ????? ? ???????
For i% = 1 To n%
A(i%, 1) = Cells(i% + 2, 2)
A(i%, 2) = Cells(i% + 2, 3)
Next i%

For i% = 1 To m%
B(i%, 1) = Cells(i% + 2, 4)
B(i%, 2) = Cells(i% + 2, 5)
Next i%

&#039;???????? ?????? ??????

Range(&quot;F3:I40&quot;).Select
Selection.ClearContents
Range(&quot;A1&quot;).Select

&#039; ????? ???????????

Intersect A(), B(), ASB(), k1%


&#039; ????? ??????????? ?????????
For i% = 1 To k1%
Cells(i% + 2, 6) = ASB(i%, 1)
Cells(i% + 2, 7) = ASB(i%, 2)
Next i%

&#039;For i% = 1 To k2%
&#039;Cells(i% + 2, 8) = AUB(i%, 1)
&#039;Cells(i% + 2, 9) = AUB(i%, 2)
&#039;Next i%


End Sub

&#039;::: ??????????? A ? B -&gt; AB

Sub Intersect(A() As String, B() As String, AB() As String, k As Integer)
k% = 0
For i% = 1 To UBound(A, 1)
aa = A(i%, 1)
a1 = A(i%, 2)
q% = 0
For j% = 1 To UBound(B, 1)
If B(j%, 1) = aa Then
q% = -1
Exit For
End If
Next j%
If (q% &lt;&gt; 0) Then
q% = 0
For j% = 1 To k%
If AB(j%, 1) = aa Then
q% = -1
Exit For
End If
Next j%
If (q% = 0) Then
k% = k% + 1
AB(k%, 1) = aa
AB(k%, 2) = a1
End If
End If
Next i%

Range(&quot;H3&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=RC[-6]&quot;
Range(&quot;H4&quot;).Select
Range(&quot;H3&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=RC[-6]&quot;
Range(&quot;I3&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=RC[-6]&quot;
Range(&quot;H4&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=RC[-6]&quot;
Range(&quot;I4&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=RC[-6]&quot;
Range(&quot;H5&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=RC[-6]&quot;
Range(&quot;I5&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=RC[-6]&quot;
Range(&quot;H6&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=RC[-6]&quot;
Range(&quot;I6&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=RC[-6]&quot;
Range(&quot;H7&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=RC[-6]&quot;
Range(&quot;I7&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=RC[-6]&quot;
Range(&quot;H8&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=R[-5]C[-4]&quot;
Range(&quot;I8&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=R[-5]C[-4]&quot;
Range(&quot;H9&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=R[-5]C[-4]&quot;
Range(&quot;I9&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=R[-5]C[-4]&quot;
Range(&quot;H10&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=R[-5]C[-4]&quot;
Range(&quot;I10&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=R[-5]C[-4]&quot;
Range(&quot;H11&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=&quot;
Range(&quot;H10&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=R[-4]C[-4]&quot;
Range(&quot;I10&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=R[-4]C[-4]&quot;
Range(&quot;H11&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=R[-4]C[-4]&quot;
Range(&quot;I11&quot;).Select
ActiveCell.FormulaR1C1 = &quot;=R[-4]C[-4]&quot;
Range(&quot;I12&quot;).Select

End Sub


</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (gamesszedlak)]]></author>
			<pubDate>Tue, 24 Sep 2024 13:13:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18304&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[VBA: Внесение данных в ListBox формы]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18249&amp;action=new</link>
			<description><![CDATA[<p>Доброго дня суток!<br />Подскажите, пожалуйста!<br />В форме два ListBox и CommandButton.<br />Один называется &quot;Принадлежность к предприятию&quot;, он содержит список из нескольких позиций - &quot;работник Предприятия&quot;, &quot;самозанятый&quot;, &quot;ИП&quot;, &quot;безработный&quot; и т.д. <br />Второй ListBox называется &quot;Ф.И.О&quot;.<br />CommandButton - &quot;Выбрать&quot;.<br />Как написать макрос, чтобы при нажатии на &quot;Выбрать&quot; именно &quot;работник Предприятия&quot; в поле ListBox &quot;Ф.И.О&quot; появлялся список фамилий, находящихся в таблице на отдельном Листе этой Книги, а при выборе других позиций в поле ListBox &quot;Ф.И.О&quot; оператору необходимо было бы вручную внести фамилию, имя, отчество, но только в необходимом формате, например: &quot;Иванов Иван Иванович&quot;</p>]]></description>
			<author><![CDATA[null@example.com (rplugarev)]]></author>
			<pubDate>Mon, 15 Jul 2024 12:29:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18249&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[VBA: Две книги с данными, перенести нужные из 2-ух в 3-ю]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=17989&amp;action=new</link>
			<description><![CDATA[<p>Добрый день.<br />Использую MS Excel 2010.<br />Сразу говорю: программист я начинающий.<br />Есть книга, из которой запускается макрос VBA, она открывает файл &quot;old_sp.xls&quot; (таблица со старыми данными граждан: Фамилия, Имя и тд., заголовков таблицы нет, идут сразу строки с данными) и файл &quot;new_sp.xls&quot; (с новыми данными граждан: Номер гражданина в выборке, Фамилия, Имя и тд., заголовки таблицы есть), также макрос создает новую книгу. В файле &quot;new_sp.xls&quot; строки с данными идут не подряд, а имеются пустые строки. Нужно найти в файле &quot;new_sp.xls&quot; непустую строку, проверить, что в ее первой ячейке слева стоит именно чиcло (это номер гражданина в выборке, колонка называется &quot;№, п/п&quot;), запомнить этот номер в переменной, и в старом списке, &quot;old_sp.xls&quot;, отсчитать сверху количество строк, равное числу в сохранённой переменной, если эта строка не пуста, то скопировать всю строку с данными по текущему гражданину в созданный xls-файл.&nbsp; И так нужно перебрать все строки в файле &quot;new_sp.xls&quot;. Затем когда вновь созданная книга (список исключённых граждан) будет заполнена, строками из &quot;old_sp.xls&quot;, сохранить ее на жёсткий диск.</p><p>Я пошёл через циклы While Do...Loop. Пока у меня обрабатывается только первая непустая строка, с номером, из нового списка. Как сделать, чтобы обрабатывались все строки из нового списка и соответствующие им строки из старого списка копировались в список исключенных?</p><p>Код:</p><div class="codebox"><pre><code>Sub cbMakeIskluchSpsok_Click()
 
    &#039;Переменные для хранения имен файлов старого и нового списков
    Dim old_sp_book As String
    Dim new_sp_book As String
    &#039;Переменная для хранения имени файла списка исключенных
    Dim old_spisok As Workbook
    Dim new_spisok As Workbook
    Dim iskl_spisok As Workbook
    
    &#039;Устанавливаем активным каталог книги, из которой запущен макрос
    ChDir (ThisWorkbook.Path)
    &#039;Устанавливаем режим копирования-вставки
    Application.CutCopyMode = True
    
    &#039;Открываем файл старого списка
    If Dir(ActiveWorkbook.Path + &quot;\&quot; + &quot;old_sp.xls&quot;) = &quot;&quot; Then
    
        Workbooks.Open ActiveWorkbook.Path + &quot;\&quot; + &quot;old_sp.xlsx&quot;
        Set old_spisok = Workbooks.Open(ThisWorkbook.Path + &quot;\&quot; + &quot;old_sp.xlsx&quot;)
    
    Else
    
        Workbooks.Open ActiveWorkbook.Path + &quot;\&quot; + &quot;old_sp.xls&quot;
        Set old_spisok = Workbooks.Open(ThisWorkbook.Path + &quot;\&quot; + &quot;old_sp.xls&quot;)
 
    End If
 
    &#039;Открываем файл нового списка
    If Dir(ThisWorkbook.Path + &quot;\&quot; + &quot;new_sp.xls&quot;) = &quot;&quot; Then
    
        Workbooks.Open ActiveWorkbook.Path + &quot;\&quot; + &quot;new_sp.xlsx&quot;
        Set new_spisok = Workbooks.Open(ThisWorkbook.Path + &quot;\&quot; + &quot;new_sp.xlsx&quot;)
    
    Else
    
        Workbooks.Open ActiveWorkbook.Path + &quot;\&quot; + &quot;new_sp.xls&quot;
        Set new_spisok = Workbooks.Open(ThisWorkbook.Path + &quot;\&quot; + &quot;new_sp.xls&quot;)
    
    End If
 
    &#039;Создаем ексель-книгу для списка исключенных
    Set iskl_spisok = Workbooks.Add
    
    &#039;Сохраняем и закрываем созданную эксель-книгу со списка исключенных
    iskl_spisok.SaveAs Filename:=ThisWorkbook.Path &amp; &quot;\&quot; &amp; &quot;Iskl_spisok_Added &quot; &amp; CStr(Date) &amp; &quot;.xls&quot;, 

FileFormat:=xlExcel8, _
        Password:=&quot;&quot;, WriteResPassword:=&quot;&quot;, ReadOnlyRecommended:=False, _
        CreateBackup:=False
    
   
    &#039;Переменные-счестчики для перебра строк нового старого списка, старого списка и списка сиключенных
    &#039;Переменная-счетчик для перебора строк нового списка
    Dim i As Long
    &#039;Переменная-счетчик для перебора строк старого списка
    &#039;Dim j As Long
    &#039;Переменная-счетчик для перебора строк списка исключенных
    Dim k As Long
    &#039;Переменная для хранения номера непстой строки в новом списке
    Dim CurrNumericRow As Long
    &#039;Метка для продолжения цикла с перебором строк в новом списке
    Dim Metka As Label
    
    &#039;&#039;&#039;Действия по формированию списка исключенных граждан
    &#039;Активация файла нового списка
    i = 1
    k = 1
    
Metka:
    
    new_spisok.Activate
    
    ActiveWorkbook.Sheets(1).Activate
    
    Do While i &lt;&gt; 65535
    
    
        If ActiveSheet.Range(Cells(i, 1).Address).Text &lt;&gt; &quot;&quot; And IsNumeric(ActiveSheet.Range(Cells(i, 

1).Address).Text) = True Then
        
                        CurrNumericRow = CLng(ActiveSheet.Range(Cells(i, 1).Address).Text)
                        
                        old_spisok.Activate
                        
                        ActiveWorkbook.Sheets(1).Activate
            
                        ActiveSheet.Range(Cells(CurrNumericRow, 1).Address &amp; &quot;:&quot; &amp; Cells(CurrNumericRow, 

11).Address).Select
                                
                        Selection.Copy
                        
                       &#039;Вставка ранее скопированного дисапозона ячеек в список исключенных граждан
                        iskl_spisok.Activate
                            
                        ActiveWorkbook.Sheets(1).Activate
                        
                       
                        Do While k &lt;&gt; 65535
                        
                            If ActiveSheet.Range(Cells(k, 1).Address).Text = &quot;&quot; Then
                                
                                ActiveSheet.Range(Cells(k, 1).Address).Select
                                
                                ActiveSheet.Paste
                                
                                Exit Do
                            
                            Else
                                    
                                k = k + 1
                            
                            End If
        
        
                        Loop

            Else
                        
                    &#039;ничего не делать :)))
                    
            End If
            
           i = i + 1
            
     Loop
        
    &#039;Сохранение сформированного файла-списка исключенных
    &#039;iskl_sp_book.SaveAs &quot;????_?_?????\??????_???????????.xls&quot;
 
End Sub</code></pre></div><p>Прикрепляю архив примера (данные левые, нужен чисто принцип), плиз хелп <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (GFeniks)]]></author>
			<pubDate>Tue, 07 Nov 2023 05:18:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=17989&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[VBA: замена запятой на точку в Ексель]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=17816&amp;action=new</link>
			<description><![CDATA[<p>Всем привет! Создаю макрос по замене в файле Ексель чисел с разделителем запятая, при формате ячеек Общий, на числа с разделителем точка, и изменении формата ячейки на Текстовый!<br />Хотел создать такой макрос на основе этого, но что-то не выходит, буду благодарен за помощь!<br /></p><div class="codebox"><pre><code>Sub Fix_Numbers_From_Dates()
    Dim num As Double, cell As Range
 
    For Each cell In Selection
        If Not IsEmpty(cell) Then
            If cell.NumberFormat = &quot;General&quot; Then
                num = CDbl(Replace(cell, &quot;.&quot;, &quot;,&quot;))
            Else
                num = CDbl(Format(cell, &quot;m,yyyy&quot;))
            End If
            cell.Clear
            cell.Value = num
        End If
    Next cell
End Sub </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Andropov)]]></author>
			<pubDate>Mon, 05 Jun 2023 06:10:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=17816&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[VBA: Поиск и перемещение данных с одного листа файла на другой]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=17792&amp;action=new</link>
			<description><![CDATA[<p>Всем привет! Хочу создать макрос! Задача: есть таблица с заголовками названием контрагентов и данными под этими контрагентами в столбце, нужно найти в заголовке определенного контрагента и скопировать данные под ним в другую таблицу на другом листе, только в горизонтальном положении!!! Буду признателен в оказании помощи!</p>]]></description>
			<author><![CDATA[null@example.com (Andropov)]]></author>
			<pubDate>Thu, 11 May 2023 08:53:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=17792&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[VBA: обработка массивов данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=17773&amp;action=new</link>
			<description><![CDATA[<p>Коллеги, есть макрос для возврата столбца из массива данных, по типу ВПР, но никак не соображу, как возвратить остальные столбцы массива. может, кто подскажет, что не так сделал? Макрос massiv1, на 2 листе.</p>]]></description>
			<author><![CDATA[null@example.com (igorpohlebaev644)]]></author>
			<pubDate>Mon, 01 May 2023 15:41:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=17773&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[VBA: Макрос на кнопку, проход по папкам, сравнение с наименованием, со]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=17739&amp;action=new</link>
			<description><![CDATA[<p>Добрый день. Возникла необходимость в написании макроса, сам к сожалению только начал изучать данный вопрос.</p><p>Есть лист excel (рис.1).&nbsp; в нем указаны комплекты документов. В столбцах L-O сейчас руками созданы гиперссылки на необходимые папки.<br />Есть папка на диске с входящими и исходящими письмами (рис.2). Папок и входящих и исходящих писем очень много, и в ручную каждый раз добавлять гиперссылки очень трудозатратно.<br />Задача состоит в следующем, по нажатию кнопки делать проход по папкам и подпапкам, сравнивать наименование в столбце &quot;B&quot; листа excel и папках (рис3), и создавать столбцы с гиперссылками на папки.<br />рисунки и сам файл excel приложен.</p>]]></description>
			<author><![CDATA[null@example.com (ivandor421)]]></author>
			<pubDate>Mon, 17 Apr 2023 09:46:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=17739&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[VBA: Нужно уменьшить точку до 6.5 размера  нолика в макросе Word]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=17718&amp;action=new</link>
			<description><![CDATA[<p>Добрый день ребята. Есть 2 файлика. <br />в 1 точка очень маленького размера 6.5, в 2ом еле видный нолик желтого цвета.<br />1 файл )Через Chat Gpt создал макрос,все гуд но точка получается стандартного размера как бы я в макросе не указывал размер.<br /> Напишите мне в телеграм mahone789 Для связи или я сюда файлик скину чтобы вам понятнее было,просто приблизьте сильнее файл</p>]]></description>
			<author><![CDATA[null@example.com (mahounj)]]></author>
			<pubDate>Thu, 30 Mar 2023 11:03:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=17718&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[VBA: Доступ к элементу div страницы на html посредством VBA]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=17703&amp;action=new</link>
			<description><![CDATA[<p>Добрый день!</p><p>В html коде есть элемент div, к которому необходимо получить доступ посредством VBA<br /></p><div class="codebox"><pre><code>
   &lt;div id=&quot;tender-card-content&quot;&gt;
                    &lt;div id=&quot;report-script&quot; class=&quot;tender-card-title&quot;&gt;
                        &lt;h1 class=&quot;tct-tender-number&quot;&gt;
                            Закупка &lt;span class=&quot;copy-script tender-number-copy&quot;&gt;32312204305&lt;/span&gt;
                        &lt;/h1&gt;
                        &lt;div class=&quot;tct-tender-text&quot;&gt;[b]Содержимое, которое необходимо скопировать с html страницы через VBA[/b]&lt;/div&gt;
...</code></pre></div><p>Получается только через getElementsByTagName(&quot;div&quot;)(номер элемента).innerText, но номер элемента div может меняться динамически и такой вариант не подходит.<br />Привожу код, в котором попробовал разные варианты доступа с указанием сообщения о ошибке в комментариях.</p><div class="codebox"><pre><code>
Sub test()

sURL = &quot;https://synapsenet.ru/zakupki/fz223/32312204305%231--sanktpeterburg-vipolnenie-rabot-po-obsledovaniyu-stroitelnih&quot;

    Set oXMLHTTP = CreateObject(&quot;MSXML2.XMLHTTP&quot;)
    With oXMLHTTP
        .Open &quot;GET&quot;, sURL, False
        .send
        txt = .responseText
        
        Set pDoc = CreateObject(&quot;HTMLFile&quot;)
        pDoc.body.innerHTML = txt
   
       .Open &quot;GET&quot;, sURL, False: .send
        getHTTP = StrConv(.responseBody, vbUnicode)
        
        MsgBox pDoc.getElementsByTagName(&quot;div&quot;)(номер элемента).innerText
        &#039;Работает.&#039;

        MsgBox getHTTP.getElementsByTagName(&quot;div&quot;)(номер элемента).innerText
        &#039;Сообщение об ошибке Object required.&#039;
        
        pDoc.getElementsByClassName (&quot;tct-tender-text&quot;)
        &#039;Сообщение об ошибке Object doesn&#039;t support this property or method.&#039;
        
       getHTTP.getElementsByClassName (&quot;tct-tender-text&quot;)
        &#039;Сообщение об ошибке Object required.&#039;
   
       pDoc.querySelectorAll (&quot;tct-tender-text&quot;)
      &#039;Сообщение об ошибке Object doesn&#039;t support this property or method.&#039;
      
        getHTTP.querySelectorAll (&quot;tct-tender-text&quot;)
        &#039;Сообщение об ошибке Object required.&#039;

    End With
    
    Set oXMLHTTP = Nothing

End Sub</code></pre></div><p>Как нужно исправить код, чтобы получить доступ к нужному элементу?</p>]]></description>
			<author><![CDATA[null@example.com (AleksP)]]></author>
			<pubDate>Sun, 19 Mar 2023 11:15:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=17703&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[VBA: Калькулятор стоимости]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=17404&amp;action=new</link>
			<description><![CDATA[<p>Всем привет. Подскажите, пожалуйста, как реализовать данную задачу.</p><p>1)Необходимо сделать калькулятор стоимости. Стоимость зависит примерно от 8 переменных, часть из них будет реализовано выпадающим списком, а часть нужно будет указать числом(например, кол-во дней или кол-во человек). Цены будут указаны в таблице, поэтому нужно будет обратиться к нужной ячейке при определенной комбинации переменных, а затем это число умножается на кол-во дней и кол-во человек. Вид диалогового окна закинул во вложение.</p><p>2) Еще момент, так как структура достаточно большая, желательно сделать чтобы данные брались из разных книг(но это не второстепенно)</p><p>Подскажите, в какую сторону копать и как лучше реализовать. Есть пока только мысль реализовать это через &quot;Иф&quot; и прописать каждый возможный вариант, но достаточно много переменных.</p>]]></description>
			<author><![CDATA[null@example.com (margin-up)]]></author>
			<pubDate>Fri, 07 Oct 2022 06:56:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=17404&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[VBA: Excel - Автоматическое обновление запросов]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=17095&amp;action=new</link>
			<description><![CDATA[<p>Добрый день. <br />Возможно ли реализовать в VBA автоматическое обновление всех данных(из txt файла) каждые 5 секунд? В настройках excel&#039;а минимум это 1 минута, но это слишком много. Пытался реализовать разными способами, но либо компилятор ругался с ошибками или на ссылку на несуществующий макрос(хотя они лежат в одном коде), либо excel вис на все 5 секунд, обновлял данные и снова вис. <br />Можно как-то осуществить это через таймер или с помощью AHK? <br />Только не простой эмуляцией нажатий, должна остаться возможность использовать компьютер и другие вкладки.<br />В AHK есть замечательная функция: </p><div class="quotebox"><blockquote><p>SetTimer</p></blockquote></div><p> Если AHK способен заставлять excel обновлять данные по этому таймеру было бы супер, зависание excel&#039;a на пол секунды вполне допустимо.<br />Не знаю где было бы правильнее создавать тему, здесь или в AutoHotKey. Если создал неправильно- сообщите, я пересоздам.</p>]]></description>
			<author><![CDATA[null@example.com (ThisIsStart)]]></author>
			<pubDate>Tue, 03 May 2022 16:02:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=17095&amp;action=new</guid>
		</item>
	</channel>
</rss>
