У меня есть две папки, заполненные файлами с одинаковыми именами, но разным содержанием.Как я могу сопоставить их, чтобы скопировать данные из одного файла в другой? - PullRequest
0 голосов
/ 02 января 2019

У меня есть две папки, заполненные файлами Excel с одинаковыми именами, но в разных шаблонах.Один из шаблонов (Newer) пуст, а старый шаблон содержит все данные.

Шаблоны между шаблоном A и шаблоном B согласованы - я знаю, какая ячейка в A переходит в какую ячейку в B, но я не уверен, как создать макрос в VBA для эффективной обработки всех файловза один раз.

До сих пор я создал два объекта Файловой системы, по одному на папку - но я не уверен, как заставить его вытащить идентичный файл из другой папки, чтобы начать процесс клонирования.

Чтобы избежать проблем с открытием файлов с тем же именем в Excel, новые шаблоны в конце имеют суффикс из 3 символов.

Буду признателен за любой совет!

    Set picker = Application.FileDialog(msoFileDialogFolderPicker)
    picker.Show
    Set fldrs = picker.SelectedItems
    fpath1 = fldrs(1)

Set picker = Application.FileDialog(msoFileDialogFolderPicker)
    picker.Show
    Set fldrs = picker.SelectedItems
    fpath2 = fldrs(1)

Dim fso1 As Object
Dim vfolder1 As Object
Dim fso2 As Object
Dim vfolder2 As Object

Set fso1 = CreateObject("Scripting.FileSystemObject")
Set vfolder1 = fso1.GetFolder(fpath1)

Set fso2 = CreateObject("scripting.filesystemobject")
Set vfolder2 = fso2.GetFolder(fpath2)

For Each vfile In vfolder1.Files

1 Ответ

0 голосов
/ 02 января 2019

Если предположить, что имена файлов всегда start одинаковы («новые шаблоны имеют суффикс из 3 символов в конце »), вы можете просто удалить их путь и расширение из имен файлов с GetBaseName и сравните их, чтобы увидеть, начинается ли имя целевого файла с имени исходного файла:

With New Scripting.FileSystemObject
    Dim source As Folder, target As Folder

    Set source = .GetFolder(fpath1)
    Set target = .GetFolder(fpath2)

    Dim item As File, fileName As String
    For Each item In source.Files
        'Get the filename without path or extension.
        fileName = .GetBaseName(item)
        Dim searched As File
        For Each searched In target
            'Does the file start with fileName?
            If InStr(1, .GetBaseName(item), fileName) = 1 Then
                'Files match, do your thing here.
            End If
        Next
    Next
End With

Обратите внимание, что это рано. Если вы настаиваете на том, чтобы не добавлять ссылку на Microsoft Scripting Runtime (практически нет причин не делать этого), просто измените ранние связанные переменные на Object и замените New Scripting.FileSystemObject на CreateObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...