Как объединить данные из нескольких книг Excel в главную книгу и устранить дублирующиеся приложения? - PullRequest
0 голосов
/ 14 декабря 2018

Я застрял в проблеме в VBA, когда объединяю данные из другой рабочей книги в основную рабочую книгу и использую имя файла и имя пути - переменная, которая динамически меняется в цикле, в котором я искал, но я нахожу только жестко закодированный путь, поэтому яздесь размещен следующий код:

Sub Append()

    'Append data from other files
    Path = "E:\NPM PahseIII\"
    Dim c As Range

    'find the first empty cell in ColA
    Set c = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(2, 0)
    Filename = Dir(Path & "*.xlsx")

    Do While Filename <> ""
        If InStr(Filename, ".") > 0 Then
            Filenamenoext = Left(Filename, InStr(Filename, ".") - 1)
        End If

        c.Value = Filenamenoext
        Set c = c.Offset(1, 0)
        Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
        Windows("Master sheet").Activate
        Selection.Consolidate Sources:=Array("'Path & [Filename]Sheet1'!$B$2:$B$5"), 
        Function:=xlSummary

        Workbooks(Filename).Close
        Filename = Dir()
    Loop

End Sub

Первая проблема заключается в том, что эта программа выдает мне ошибку

Object doesn't support this property or method

в этой строке

Selection.Consolidate Sources:=Array("'Path & [Filename]Sheet1'!$B$2:$B$5"), 
Function:=xlSummary

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

1 Ответ

0 голосов
/ 14 декабря 2018

Обратите внимание, что в этой строке "'Path & [Filename]Sheet1'!$B$2:$B$5" Path и Filename рассматривается не как переменная, а как жестко закодированная строка!

Вы должны использовать что-то вроде

"'" & Path & "[" & Filename & "]Sheet1'!$B$2:$B$5"

если вы хотите использовать значения переменных.

Также согласно документации Метод Range.Consolidate константа xlConsolidationFunction не равна Function:=xlSummaryно Function:=xlSum.

Также обратите внимание, что Selection очень неопределен и может находиться в любом месте этого листа.Я рекомендую прочитать Как избежать использования Select в Excel VBA и ссылаться на свои диапазоны, рабочие книги и т. Д., Не используя .Activate и .Select или Selection. вообще.

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