<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: Поиск и автозамена данных в .xls]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=5791</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5791&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: Поиск и автозамена данных в .xls».]]></description>
		<lastBuildDate>Wed, 18 May 2011 05:48:13 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48466#p48466</link>
			<description><![CDATA[<div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>Нагуглил такую инструкцию...</p></blockquote></div><p>Формулировку &quot;Запустите одно из приложений MS Office&quot; я бы заменил на такую: &quot;Откройте предназначенный для обработки макросом документ в соответствующем приложении MS Office&quot;.<br />Все ссылки на компоненты и библиотеки относятся не к самому офисному приложению, а к VBA-проекту, который является частью документа (в данном случае - рабочей книги).</p><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... за номер листа отвечает .Worksheets(1)...</p></blockquote></div><p>Да.</p><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... для обработки всех листов нужно зациклить кусок...</p></blockquote></div><p>В кодах обоих вариантов сценария замените фрагмент с оператора <span style="color: blue">On Error Resume Next</span> по оператор <span style="color: blue">objExcel.Quit</span> (включительно) на такой фрагмент:<br /></p><div class="codebox"><pre><code>On Error Resume Next
For Each objWSh In objWB.Worksheets
    Set objNonEmptyCells = objWSh.Cells.SpecialCells(2)
    If Err.Number = 0 Then
        For Each objItem In objNonEmptyCells
            strTemp = objItem.Value
            For i = 0 To UBound(arrIDs)
                If InStr(strTemp, arrIDs(i)) &gt; 0 Then
                    objItem.Value = Replace(strTemp, arrIDs(i), arrNames(i))
                    Exit For
                End If
            Next
        Next
        Set objNonEmptyCells = Nothing
    Else
        Err.Clear
    End If
Next
On Error GoTo 0
Erase arrIDs: Erase arrNames
objWB.Save
objWB.Close
Set objWB = Nothing
objExcel.Quit
WScript.Echo &quot;Готово.&quot;</code></pre></div><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... за что отвечает .Cells.SpecialCells(2)?</p></blockquote></div><p>За выборку из всего множества ячеек рабочего листа тех ячеек, значением которых является константа.</p>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Wed, 18 May 2011 05:48:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48466#p48466</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48465#p48465</link>
			<description><![CDATA[<div class="quotebox"><cite>Dmitrii пишет:</cite><blockquote><p>Один раз настроенная в проекте ссылка должна оставаться до того момента, пока Вы её не отключите.<br />Как именно выполняли подключение?</p></blockquote></div><p>Нагуглил такую инструкцию:<br /></p><div class="quotebox"><blockquote><p>1. Запустите одно из приложений MS Office.. <br />2. В меню &quot;Сервис&quot; выберите пункт &quot;Макрос&quot; и запустите команду &quot;Редактор Visual Basic&quot;. <br />3. В окне &quot;Microsoft Visual Basic&quot; откройте меню &quot;Сервис&quot; (&quot;Tools&quot;) и запустите команду &quot;Ссылки&quot; (&quot;References&quot;). <br />4. В списке &quot;Доступные ссылки&quot; (&quot;Available References&quot;) установите флажок напротив библиотеки &quot;Microsoft Scripting Runtime&quot; и нажмите кнопку &quot;OK&quot;. <br /><span style="color: grey">5. В меню &quot;Вид&quot; (&quot;View&quot;) запустите команду &quot;Просмотр объектов&quot; (&quot;Object Browser&quot;). <br />6. В выпадающем списке &quot;Проект/библиотека&quot; (&quot;Project/Library&quot;) выберите библиотеку &quot;Scripting&quot;.</span></p></blockquote></div><p>Как я понял за номер листа отвечает <em>.Worksheets(1)</em>, и для обработки всех листов нужно зациклить кусок, начиная с этой строки до <em>Set objNonEmptyCells = Nothing</em>, но а за что отвечает <em>.Cells.SpecialCells(<strong>2</strong>)</em>?</p><p>А vbs-скрипт прекрасно справляется с поставленной задачей, спасибо, <strong>Dmitrii</strong>! <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Lucky)]]></author>
			<pubDate>Wed, 18 May 2011 04:40:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48465#p48465</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48462#p48462</link>
			<description><![CDATA[<div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... разобрался с подключением к проекту библиотеки <em>Microsoft Scripting Runtime</em> (кстати, его приходится подключать каждый раз)...</p></blockquote></div><p>Так не должно быть. Один раз настроенная в проекте ссылка должна оставаться до того момента, пока Вы её не отключите.<br />Как именно выполняли подключение?</p><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... он обрабатывает только первый лист...</p></blockquote></div><p>Да. Если надо обрабатывать другие листы (все или часть из них), потребуется организовать соответствующий цикл.</p><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... жду (и пробую вникать) переделки макроса в сценарий...</p></blockquote></div><p><strong>Вариант 1 (без диалога выбора файла и книги).</strong><br /></p><div class="codebox"><pre><code>Dim objFS, objFile, strFile
Dim objExcel, objWB, strBook
Dim objNonEmptyCells, objItem
Dim arrTemp, arrIDs(), arrNames()
Dim strTemp, lngTemp, i, j

strFile = &quot;C:\Temp\id.txt&quot;
strBook = &quot;C:\Temp\book.xls&quot;
Set objFS = CreateObject(&quot;Scripting.FileSystemObject&quot;)
If objFS.FileExists(strFile) Then
    If objFS.GetFile(strFile).Size &gt; 0 Then
        Set objFile = objFS.OpenTextFile(strFile, 1)
        strTemp = objFile.ReadAll
        objFile.Close
        Set objFile = Nothing
        arrTemp = Split(strTemp, vbNewLine)
        lngTemp = UBound(arrTemp)
        j = -1
        For i = 0 To lngTemp
            If Len(arrTemp(i)) &gt; 0 Then
                j = j + 1
                ReDim Preserve arrIDs(j): ReDim Preserve arrNames(j)
                strTemp = Split(arrTemp(i), vbTab)
                arrIDs(j) = strTemp(1)
                arrNames(j) = strTemp(0)
            End If
        Next
        Erase arrTemp
        If objFS.FileExists(strBook) Then
            Set objExcel = CreateObject(&quot;Excel.Application&quot;)
            Set objWB = objExcel.Workbooks.Open(strBook)
            On Error Resume Next
            Set objNonEmptyCells = objWB.Worksheets(1).Cells.SpecialCells(2)
            If Err.Number = 0 Then
                On Error GoTo 0
                For Each objItem In objNonEmptyCells
                    strTemp = objItem.Value
                    For i = 0 To UBound(arrIDs)
                        If InStr(strTemp, arrIDs(i)) &gt; 0 Then
                            objItem.Value = Replace(strTemp, arrIDs(i), arrNames(i))
                            Exit For
                        End If
                    Next
                Next
                Set objNonEmptyCells = Nothing
                Erase arrIDs: Erase arrNames
                objWB.Save
                WScript.Echo &quot;Готово.&quot;
            Else
                Err.Clear
                objWB.Saved = True
                WScript.Echo &quot;Рабочий лист не содержит строковых констант.&quot;
            End If
            objWB.Close
            Set objWB = Nothing
            objExcel.Quit
            Set objExcel = Nothing
        Else
            WScript.Echo &quot;Путь &quot; &amp; UCase(strBook) &amp; &quot; не найден.&quot;
        End If
    Else
        WScript.Echo &quot;Файл &quot; &amp; UCase(strFile) &amp; &quot; пуст.&quot;
    End If
Else
    WScript.Echo &quot;Путь &quot; &amp; UCase(strFile) &amp; &quot; не найден.&quot;
End If
Set objFS = Nothing
WScript.Quit 0</code></pre></div><p><strong>Вариант 2 (с диалогом выбора файла и книги).</strong><br /></p><div class="codebox"><pre><code>Dim objFS, objFile, strFile
Dim objExcel, objWB, strBook
Dim objNonEmptyCells, objItem
Dim arrTemp, arrIDs(), arrNames()
Dim strTemp, lngTemp, i, j

Set objExcel = CreateObject(&quot;Excel.Application&quot;)
With objExcel.FileDialog(1)
    .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add &quot;Простой текст&quot;, &quot;*.txt&quot;
    .Show
    If .SelectedItems.Count = 1 Then
        strFile = .SelectedItems(1)
    End If
End With
If Len(strFile) &gt; 0 Then
    Set objFS = CreateObject(&quot;Scripting.FileSystemObject&quot;)
    If objFS.GetFile(strFile).Size &gt; 0 Then
        Set objFile = objFS.OpenTextFile(strFile, 1)
        strTemp = objFile.ReadAll
        objFile.Close
        Set objFile = Nothing
        arrTemp = Split(strTemp, vbNewLine)
        lngTemp = UBound(arrTemp)
        j = -1
        For i = 0 To lngTemp
            If Len(arrTemp(i)) &gt; 0 Then
                j = j + 1
                ReDim Preserve arrIDs(j): ReDim Preserve arrNames(j)
                strTemp = Split(arrTemp(i), vbTab)
                arrIDs(j) = strTemp(1)
                arrNames(j) = strTemp(0)
            End If
        Next
        Erase arrTemp
        With objExcel.FileDialog(1)
            .AllowMultiSelect = False
            .Filters.Clear
            .Filters.Add &quot;Рабочая книга Excel&quot;, &quot;*.xls&quot;
            .Show
            If .SelectedItems.Count = 1 Then
                strBook = .SelectedItems(1)
            End If
        End With
        objExcel.Visible = False
        If Len(strBook) &gt; 0 Then
            Set objWB = objExcel.Workbooks.Open(strBook)
            On Error Resume Next
            Set objNonEmptyCells = objWB.Worksheets(1).Cells.SpecialCells(2)
            If Err.Number = 0 Then
                On Error GoTo 0
                For Each objItem In objNonEmptyCells
                    strTemp = objItem.Value
                    For i = 0 To UBound(arrIDs)
                        If InStr(strTemp, arrIDs(i)) &gt; 0 Then
                            objItem.Value = Replace(strTemp, arrIDs(i), arrNames(i))
                            Exit For
                        End If
                    Next
                Next
                Set objNonEmptyCells = Nothing
                Erase arrIDs: Erase arrNames
                objWB.Save
                WScript.Echo &quot;Готово.&quot;
            Else
                Err.Clear
                objWB.Saved = True
                WScript.Echo &quot;Рабочий лист не содержит строковых констант.&quot;
            End If
            objWB.Close
            Set objWB = Nothing
            objExcel.Quit
        Else
            WScript.Echo &quot;Файл с рабочей книгой не выбран.&quot;
        End If
    Else
        WScript.Echo &quot;Файл &quot; &amp; UCase(strFile) &amp; &quot; пуст.&quot;
    End If
    Set objFS = Nothing
Else
    WScript.Echo &quot;Файл с таблицей сопоставления не выбран.&quot;
End If
Set objExcel = Nothing
WScript.Quit 0</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Tue, 17 May 2011 18:32:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48462#p48462</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48460#p48460</link>
			<description><![CDATA[<div class="quotebox"><cite>Dmitrii пишет:</cite><blockquote><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... У листов Excel я открываю их сценарии (Сервис-&gt;Макрос-&gt;Редактор сценариев)...</p></blockquote></div><p>1. Откройте редактор VBA (Сервис-&gt;Макрос-&gt;<strong><span style="color: green">Редактор Visual Basic</span></strong>).<br />2. В пункте <strong>Insert</strong> главного меню выберите пункт <strong>Module</strong>.<br />3. В появившееся окно кода этого модуля вставьте любой из предложенный мной вариантов макроса (ему место там).</p></blockquote></div><p>Я проделывал ранее то, что вы сейчас написали, более того, писал разобрался с подключением к проекту библиотеки <em>Microsoft Scripting Runtime</em> (кстати, его приходится подключать каждый раз) и получал в ответ &quot;Готово&quot;, но индексы так и оставались нетронутыми. Но, проделал то же самое сейчас - получилось! Спасибо вам! Как я понял он обрабатывает только первый лист <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Теперь с нетерпением жду (и пробую вникать) переделки макроса в сценарий <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> чтоб не возиться с копипастами (кстати, интересно получилось <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> в моём способе - это был копипаст тела листа, а в вашем - кода макроса).</p>]]></description>
			<author><![CDATA[null@example.com (Lucky)]]></author>
			<pubDate>Tue, 17 May 2011 14:06:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48460#p48460</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48459#p48459</link>
			<description><![CDATA[<div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... У листов Excel я открываю их сценарии (Сервис-&gt;Макрос-&gt;Редактор сценариев)...</p></blockquote></div><p>1. Откройте редактор VBA (Сервис-&gt;Макрос-&gt;<strong><span style="color: green">Редактор Visual Basic</span></strong>).<br />2. В пункте <strong>Insert</strong> главного меню выберите пункт <strong>Module</strong>.<br />3. В появившееся окно кода этого модуля вставьте любой из предложенный мной вариантов макроса (ему место там).</p><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... Есть у меня MS Office, только вот хотелось бы провести все действия без него...</p></blockquote></div><p>Минимально, что Вам для этого потребуется,- изучить формат файлов с рабочими книгами. Задача эта явно намного сложнее, чем та, которую Вам требуется сейчас решить (замена индексов на имена).<br />Мой совет: сначала хорошенько освойте возможности самого Excel.</p><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... моих знаний пока недостаточно и для запуска оного скрипта, не говоря уж об анализе и конвертировании...</p></blockquote></div><p>Если завтра будет досуг - переделаю макрос в сценарий.</p>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Tue, 17 May 2011 13:22:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48459#p48459</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48458#p48458</link>
			<description><![CDATA[<div class="quotebox"><cite>Dmitrii пишет:</cite><blockquote><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... заюзать скрипт не смог...</p></blockquote></div><p>Почему?</p></blockquote></div><p>Начну по-порядку, база моих знаний в VBA - 3 недели семестровых занятий, но тем не менее теперь по нужде разобрался с подключением к проекту библиотеки <em>Microsoft Scripting Runtime</em>. В итоге запускаю - в ответ в полне логичное сообщение &quot;Готово&quot;, но на деле в листе Excel все те же самые номера...</p><div class="quotebox"><cite>Dmitrii пишет:</cite><blockquote><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... хотелось бы работать именно с <em>.vbs</em>...</p></blockquote></div><p>В теме <a href="http://forum.script-coding.com/viewtopic.php?id=5805">WSH: преобразуем макрос VBA в скрипт VBScript</a> есть руководство к действию.</p></blockquote></div><p>Оказалось, что моих знаний пока недостаточно и для запуска онного скрипта, не говоря уж об анализе и конвертировании того, чего еще и не знаю <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p><div class="quotebox"><cite>Dmitrii пишет:</cite><blockquote><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... применять этот код к сценарию внутри Excel-книги...</p></blockquote></div><p>Не могу понять эту фразу.</p></blockquote></div><p>Если обратили внимание, мой скрипт с поста #11 как раз и парсит <span class="bbu">текстовый файл</span> <em>txt</em>, заменяя там все id-совпадения с ключа <em>id.txt</em>, но вот этим его функциональность и ограничивается. Но для себя я нашёл некоторый альтернативный выход из ситуации: У листов Excel я открываю их сценарии (Сервис-&gt;Макрос-&gt;Редактор сценариев) и копирую это текстовое представление листа в <em>file.txt</em>, затем обрабатываю его своим скриптом и обратно вставляю в Excel-лист. Вот такой вот механизм полу-автомат <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p><div class="quotebox"><cite>Dmitrii пишет:</cite><blockquote><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... не могу <em>про</em>парсить бинарный файл <em>vbs</em>-скриптом...</p></blockquote></div><p>Вы пытаетесь обрабатывать рабочую книгу Excel, не имея самого приложения?</p></blockquote></div><p>Есть у меня MS Office, только вот хотелось бы провести все действия без него, а им уж только любоваться результатом <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></description>
			<author><![CDATA[null@example.com (Lucky)]]></author>
			<pubDate>Tue, 17 May 2011 12:53:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48458#p48458</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48454#p48454</link>
			<description><![CDATA[<div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... заюзать скрипт не смог...</p></blockquote></div><p>Почему?</p><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... хотелось бы работать именно с <em>.vbs</em>...</p></blockquote></div><p>В теме <a href="http://forum.script-coding.com/viewtopic.php?id=5805">WSH: преобразуем макрос VBA в скрипт VBScript</a> есть руководство к действию.</p><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... применять этот код к сценарию внутри Excel-книги...</p></blockquote></div><p>Не могу понять эту фразу.</p><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... не могу <em>про</em>парсить бинарный файл <em>vbs</em>-скриптом...</p></blockquote></div><p>Вы пытаетесь обрабатывать рабочую книгу Excel, не имея самого приложения?</p>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Tue, 17 May 2011 10:29:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48454#p48454</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48438#p48438</link>
			<description><![CDATA[<p>Просмотрел ваши скрипты и как я понял там мы работаем непосредственно в <em>VBA</em>, открывая <em>документ Excel</em> (если ошибаюсь - поправьте, т.к. в макросах ни сколько не шарю, да и заюзать скрипт не смог), ну а хотелось бы работать именно с <em>.vbs</em>.<br />В голове есть идеи, но они годны лишь отчасти (только к текстовой части...), вот кусочек самого кода:<br /></p><div class="codebox"><pre><code>
set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)

file=&quot;1.txt&quot;
text=FSO.OpenTextFile(file,1).ReadAll()

key=&quot;id.txt&quot;
book=FSO.OpenTextFile(key,1).ReadAll()
book=Split(book,vbCrLf)

For each bookLine in book
  ab=Split(bookLine,vbTab)
  text=RePlace(text,ab(1),ab(0))
Next

FSO.OpenTextFile(&quot;out_&quot;&amp;file,2,true).Write(text)</code></pre></div><p>и решением пока вижу применять этот код к сценарию внутри Excel-книги (пока копи-пастом вручную, но в перспективе хотелось бы довести до автоматики), но как я писал ранее не могу <em>про</em>парсить бинарный файл <em>vbs</em>-скриптом. Может есть какие соображения у вас?</p>]]></description>
			<author><![CDATA[null@example.com (Lucky)]]></author>
			<pubDate>Tue, 17 May 2011 06:16:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48438#p48438</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48316#p48316</link>
			<description><![CDATA[<p>Спасибо вам огромное, <strong>Dmitrii</strong>, увы пока я зашел с телефона и по техническим причинам не смогу проверить в ближайшее время, как проверю сообщу результат... Примногом благодарен вам за помощь!</p>]]></description>
			<author><![CDATA[null@example.com (Lucky)]]></author>
			<pubDate>Wed, 11 May 2011 18:59:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48316#p48316</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48314#p48314</link>
			<description><![CDATA[<p>Вариант макроса с диалогом выбора файла со списком сопоставлений:<br /></p><div class="codebox"><pre><code>
Option Compare Text

Sub Example2()
Dim objFS As FileSystemObject, objFile As TextStream, strPath As String
Dim arrTemp, arrIDs() As String, arrNames() As String
Dim strTemp, lngTemp As Long, i As Long, j As Long
Dim objNonEmptyCells As Range, objItem As Range

With Application.FileDialog(msoFileDialogOpen)
    .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add &quot;Простой текст&quot;, &quot;*.txt&quot;
    .Show
    If .SelectedItems.Count = 1 Then
        strPath = .SelectedItems(1)
    End If
End With
If Len(strPath) &gt; 0 Then
    Set objFS = New FileSystemObject
    If objFS.GetFile(strPath).Size &gt; 0 Then
        Set objFile = objFS.OpenTextFile(strPath, ForReading)
        strTemp = objFile.ReadAll
        objFile.Close
        Set objFile = Nothing
        arrTemp = Split(strTemp, vbNewLine)
        lngTemp = UBound(arrTemp)
        j = -1
        For i = 0 To lngTemp
            If Len(arrTemp(i)) &gt; 0 Then
                j = j + 1
                ReDim Preserve arrIDs(j): ReDim Preserve arrNames(j)
                strTemp = Split(arrTemp(i), vbTab)
                arrIDs(j) = strTemp(1)
                arrNames(j) = strTemp(0)
            End If
        Next
        Erase arrTemp
        On Error Resume Next
        Set objNonEmptyCells = Worksheets(1).Cells.SpecialCells(xlCellTypeConstants)
        If Err.Number = 0 Then
            On Error GoTo 0
            For Each objItem In objNonEmptyCells
                strTemp = objItem.Value
                For i = 0 To UBound(arrIDs)
                    If InStr(strTemp, arrIDs(i)) &gt; 0 Then
                        objItem.Value = Replace(strTemp, arrIDs(i), arrNames(i))
                        Exit For
                    End If
                Next
            Next
            Set objNonEmptyCells = Nothing
            Erase arrIDs: Erase arrNames
            MsgBox &quot;Готово.&quot;, vbInformation
        Else
            Err.Clear
            MsgBox &quot;Рабочий лист не содержит строковых констант.&quot;, vbCritical
        End If
    Else
        MsgBox &quot;Файл &quot; &amp; UCase(strPath) &amp; &quot; пуст.&quot;, vbCritical
    End If
    Set objFS = Nothing
Else
    MsgBox &quot;Файл не выбран.&quot;, vbCritical
End If
End Sub</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Wed, 11 May 2011 12:10:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48314#p48314</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48313#p48313</link>
			<description><![CDATA[<p>Ну, если я правильно понял Вашу задачу, то в качестве базового варианта должен подойти такой макрос:<br /></p><div class="codebox"><pre><code>
Option Compare Text

Sub Example()
Dim objFS As FileSystemObject, objFile As TextStream, strPath As String
Dim arrTemp, arrIDs() As String, arrNames() As String
Dim strTemp, lngTemp As Long, i As Long, j As Long
Dim objNonEmptyCells As Range, objItem As Range

strPath = &quot;C:\Temp\id.txt&quot;
Set objFS = New FileSystemObject
If objFS.FileExists(strPath) Then
    If objFS.GetFile(strPath).Size &gt; 0 Then
        Set objFile = objFS.OpenTextFile(strPath, ForReading)
        strTemp = objFile.ReadAll
        objFile.Close
        Set objFile = Nothing
        arrTemp = Split(strTemp, vbNewLine)
        lngTemp = UBound(arrTemp)
        j = -1
        For i = 0 To lngTemp
            If Len(arrTemp(i)) &gt; 0 Then
                j = j + 1
                ReDim Preserve arrIDs(j): ReDim Preserve arrNames(j)
                strTemp = Split(arrTemp(i), vbTab)
                arrIDs(j) = strTemp(1)
                arrNames(j) = strTemp(0)
            End If
        Next
        Erase arrTemp
        On Error Resume Next
        Set objNonEmptyCells = Worksheets(1).Cells.SpecialCells(xlCellTypeConstants)
        If Err.Number = 0 Then
            On Error GoTo 0
            For Each objItem In objNonEmptyCells
                strTemp = objItem.Value
                For i = 0 To UBound(arrIDs)
                    If InStr(strTemp, arrIDs(i)) &gt; 0 Then
                        objItem.Value = Replace(strTemp, arrIDs(i), arrNames(i))
                        Exit For
                    End If
                Next
            Next
            Set objNonEmptyCells = Nothing
            Erase arrIDs: Erase arrNames
            MsgBox &quot;Готово.&quot;, vbInformation
        Else
            Err.Clear
            MsgBox &quot;Рабочий лист не содержит строковых констант.&quot;, vbCritical
        End If
    Else
        MsgBox &quot;Файл &quot; &amp; UCase(strPath) &amp; &quot; пуст.&quot;, vbCritical
    End If
Else
    MsgBox &quot;Путь &quot; &amp; UCase(strPath) &amp; &quot; не найден.&quot;, vbCritical
End If
Set objFS = Nothing
End Sub</code></pre></div><p>Примечания.<br />1. Предполагается, что анализируемые данные находятся на первом по порядку листе рабочей книги.<br />2. Обязательно подключите к проекту библиотеку <strong>Microsoft Scripting Runtime</strong> (файл именуется <span style="color: green">scrrun.dll</span>).<br />3. Макрос проверен для Excel 2003.</p>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Wed, 11 May 2011 11:47:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48313#p48313</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48309#p48309</link>
			<description><![CDATA[<div class="quotebox"><cite>Dmitrii пишет:</cite><blockquote><p>1. Идентификаторы пользователей расположены на листе беспорядочно?<br />2. Есть ли на листе определённые границы, в рамках которых размещаются идентификаторы?<br />3. Что в константе <span style="color: blue">--4887&lt;&lt;0</span> является идентификатором?<br />4. Возможны ли повторения идентификаторов на листе и (или) в текстовом файле?</p></blockquote></div><p>1. Да.<br />2. В основном столбцы Е1 и А1. (хотя бы скажем пусть будет только Е1, если сложность в этом).<br />3. <span style="color: blue">-4887</span><br />4. На листе Excel - любое кол-во повторений, но в текстовом файле (ключ) одному идентификатору соответствует только одно Имя, хоть и имена могут совпадать, учитывая совпадения имён людей.</p>]]></description>
			<author><![CDATA[null@example.com (Lucky)]]></author>
			<pubDate>Wed, 11 May 2011 08:23:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48309#p48309</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48308#p48308</link>
			<description><![CDATA[<p>1. Идентификаторы пользователей расположены на листе беспорядочно?<br />2. Есть ли на листе определённые границы, в рамках которых размещаются идентификаторы?<br />3. Что в константе <span style="color: blue">--4887&lt;&lt;0</span> является идентификатором?<br />4. Возможны ли повторения идентификаторов на листе и (или) в текстовом файле?</p>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Wed, 11 May 2011 08:02:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48308#p48308</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48307#p48307</link>
			<description><![CDATA[<div class="codebox"><pre><code>       A1               A2
1  &#039;+3435664         
2                    &#039;-5448&lt;4    
3                    &#039;+48244&gt;4   
4  384475481+
5                    558477&gt;0
6                    &#039;--4887&lt;&lt;0</code></pre></div><p>Вот пример. Может как-нибудь думал простую и верную <em>Replace()</em> вживить, только файл бинарный.</p>]]></description>
			<author><![CDATA[null@example.com (Lucky)]]></author>
			<pubDate>Wed, 11 May 2011 07:03:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48307#p48307</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Поиск и автозамена данных в .xls]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=48304#p48304</link>
			<description><![CDATA[<div class="quotebox"><cite>Lucky пишет:</cite><blockquote><p>... в самих ячейках с id-данными находится и другая информация(не шаблонно)...</p></blockquote></div><p>Приложите пример рабочей книги. Реальные данные можете заменить на вымышленные.</p>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Wed, 11 May 2011 06:33:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=48304#p48304</guid>
		</item>
	</channel>
</rss>
