Страницы: 1
RSS
Vba самопроизвольно меняет путь сохранения файлов и названия некоторых файлов, Vba самопроизвольно меняет путь сохранения файлов и названия некоторых файлов
 
Здравствуйте. Есть несложный скрипт. Получаю список всех файлов excel в указанной папке, по очереди открываю, делаю замену некоторых слов и закрываю. Сохранение происходит через .save.
1. Vba сохраняет изменённые файлы не с перезаписью оригиналов, а на уровень выше. Это странно, ведь используется команда .save, которая не подразумевает создание нового файла.
2. Имена файлов 1.xlsx и 2.xlsx превратились в 11 и 21.xlsx. Повторю, использовал команду .save.
Вопрос: почему подробное может происходить? Windows 10. Если важно, запросы отключаю перед сохранением.
Код
'Список файлов на пакетную обработку
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 test()
    Dim fls() As String  'файлы на обработку
    Dim sFld As String 'запрашиваем адрес папки на сохранение
    
    Application.ScreenUpdating = False
    fls = ScanFolder()
    'sFld = GetFolder("E:\Скрипты")
For Each f In fls()
    'открываем книгу в новом окне
    Set ww = Application.Workbooks.Add(f)
    'ищем текст на земену и заменяем
    ww.ActiveSheet.UsedRange.Replace "Мезеровский А.В.", "Шишкин С.Н."
    Application.DisplayAlerts = False
    ww.Save
    ww.Close
    Application.DisplayAlerts = True
Next f
    Application.ScreenUpdating = True
End Sub

Изменено: zenija2007 - 06.09.2022 15:01:46
 
поменяйте в коде строку:
Код
Set ww = Application.Workbooks.Add(f)
на
Код
Set ww = Application.Workbooks.Open(f)
 
Спасибо
Страницы: 1
Наверх