Как работает: есть таблица с 2 столбцами, в первой искомый текст, во втором текст на замену. Выделяю первый столбец и запускаю скрипт. Все проверил 100 раз - должно работать, но не работает. Имя файла верное, строки для поиска и замены верные, но ошибка при попытке выполнить саму замену в строке. Наверняка, глупая ошибка, но в упор не вижу. Заранее спасибо.
P.S. при выделении 1 ячейки в первом столбце все работает, проблема появляется лишь при выделении диапазона ячеек (2 и более). Значит, после первого прохода ссылка на диапазон теряется? Я даже не знаю, в чем может быть ошибка.
P.S. при выделении 1 ячейки в первом столбце все работает, проблема появляется лишь при выделении диапазона ячеек (2 и более). Значит, после первого прохода ссылка на диапазон теряется? Я даже не знаю, в чем может быть ошибка.
| Цитата | 
|---|
| k.UsedRange.Replace i.Value, i.Offset(, 1).Value | 
| Код | 
|---|
'Список файлов на пакетную обработку Function ScanFolder() Dim sFolder As String, sFiles As String Dim str As String Dim s() As String 'диалог запроса выбора папки с файлами With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Function sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator) sFiles = Dir(sFolder & "*.xls*") str = "" Do While sFiles <> "" 'сохраняем полный путь в массив строк If str = "" Then str = sFolder & sFiles Else str = str & "^" & sFolder & sFiles sFiles = Dir() Loop s = Split(str, "^") ScanFolder = s End Function Sub Замена() Dim fls() As String 'файлы на обработку Dim sFld As String 'запрашиваем адрес папки на сохранение Application.ScreenUpdating = False fls = ScanFolder() Dim r As Range Set r = Selection For Each f In fls() 'перебираем файлы в папке MsgBox f Set wa = Application.Workbooks.Open(f) For Each k In wa.Worksheets For Each i In r 'делаем замену в документе 'открываем документ в новом окне 'ищем текст на земену и заменяем MsgBox i.Value MsgBox i.Offset(, 1).Value 'wa.Worksheets(1).UsedRange.Replace i.Value, i.Offset(, 1).Value k.UsedRange.Replace i.Value, i.Offset(, 1).Value wa.Save wa.Close Next i Next k Next f End Sub  | 
					Изменено:						 - 16.12.2024 06:57:21