Lucky пишет:... разобрался с подключением к проекту библиотеки Microsoft Scripting Runtime (кстати, его приходится подключать каждый раз)...
Так не должно быть. Один раз настроенная в проекте ссылка должна оставаться до того момента, пока Вы её не отключите.
Как именно выполняли подключение?
Lucky пишет:... он обрабатывает только первый лист...
Да. Если надо обрабатывать другие листы (все или часть из них), потребуется организовать соответствующий цикл.
Lucky пишет:... жду (и пробую вникать) переделки макроса в сценарий...
Вариант 1 (без диалога выбора файла и книги).
Dim objFS, objFile, strFile
Dim objExcel, objWB, strBook
Dim objNonEmptyCells, objItem
Dim arrTemp, arrIDs(), arrNames()
Dim strTemp, lngTemp, i, j
strFile = "C:\Temp\id.txt"
strBook = "C:\Temp\book.xls"
Set objFS = CreateObject("Scripting.FileSystemObject")
If objFS.FileExists(strFile) Then
If objFS.GetFile(strFile).Size > 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)) > 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("Excel.Application")
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)) > 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 "Готово."
Else
Err.Clear
objWB.Saved = True
WScript.Echo "Рабочий лист не содержит строковых констант."
End If
objWB.Close
Set objWB = Nothing
objExcel.Quit
Set objExcel = Nothing
Else
WScript.Echo "Путь " & UCase(strBook) & " не найден."
End If
Else
WScript.Echo "Файл " & UCase(strFile) & " пуст."
End If
Else
WScript.Echo "Путь " & UCase(strFile) & " не найден."
End If
Set objFS = Nothing
WScript.Quit 0
Вариант 2 (с диалогом выбора файла и книги).
Dim objFS, objFile, strFile
Dim objExcel, objWB, strBook
Dim objNonEmptyCells, objItem
Dim arrTemp, arrIDs(), arrNames()
Dim strTemp, lngTemp, i, j
Set objExcel = CreateObject("Excel.Application")
With objExcel.FileDialog(1)
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Простой текст", "*.txt"
.Show
If .SelectedItems.Count = 1 Then
strFile = .SelectedItems(1)
End If
End With
If Len(strFile) > 0 Then
Set objFS = CreateObject("Scripting.FileSystemObject")
If objFS.GetFile(strFile).Size > 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)) > 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 "Рабочая книга Excel", "*.xls"
.Show
If .SelectedItems.Count = 1 Then
strBook = .SelectedItems(1)
End If
End With
objExcel.Visible = False
If Len(strBook) > 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)) > 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 "Готово."
Else
Err.Clear
objWB.Saved = True
WScript.Echo "Рабочий лист не содержит строковых констант."
End If
objWB.Close
Set objWB = Nothing
objExcel.Quit
Else
WScript.Echo "Файл с рабочей книгой не выбран."
End If
Else
WScript.Echo "Файл " & UCase(strFile) & " пуст."
End If
Set objFS = Nothing
Else
WScript.Echo "Файл с таблицей сопоставления не выбран."
End If
Set objExcel = Nothing
WScript.Quit 0