Получение значения ячейки из закрытых рабочих книг в каталоге - как перебрать все существующие файлы? - PullRequest
0 голосов
/ 27 мая 2019

У меня есть рабочий код для извлечения определенной ячейки в закрытой книге, когда я указываю каталог. Я пытаюсь заставить этот код перебрать все существующие книги в указанном каталоге, извлекая одну и ту же ячейку из каждого файла.

Это код, который я до сих пор использовал в цикле (я также включаю используемую функцию):

Private Function GetValueFromClosedWorkbook(path, file, sheet, ref)    
    Dim arg As String, xFolder As String

    If Right(path, 1) <> "\" Then path = path & "\"

    If Dir(path & file) = "" Then
        GetValueFromClosedWorkbook = "File not found."
        Exit Function
    End If

    arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
    Range(ref).Address(, , xlR1C1)         'create the argument
    GetValueFromClosedWorkbook = ExecuteExcel4Macro(arg)
End Function


Sub TestGetValueFromClosedWorkbook()        
    Dim p As String, xFolder As String        
    Dim s As String, a As String, f(1 To 2) As String, z As Long

    xFolder = "\\generic path"

    For z = 1 To 2
        s = "Sheet1"
        a = "A1"
        p = xFolder '& "\*.xlsx"
        f(z) = Dir(p & "\*.xlsx")  

        Do While f(z) <> ""
            ActiveSheet.Range("A" & (z + 7)) = GetValueFromClosedWorkbook(p, f(z), s, a)   
            f(z) = Dir()
        Loop
    Next z
End Sub

Получается правильная ячейка, а затем вставляется в активный лист в ячейке A8.

Единственная проблема заключается в том, что когда он проходит через второй файл, он все равно получает ячейку из первого файла. Почему это происходит? Или как я могу убедиться, что второй цикл извлекает ячейку из второй рабочей книги?

1 Ответ

1 голос
/ 27 мая 2019

Циклы были немного запутаны, и вы перезаписывали значения.Пожалуйста, смотрите ниже исправленный код:

Sub TestGetValueFromClosedWorkbook()

    Dim p As String, xFolder As String

    Dim s As String, a As String, f As String, z As Long

    xFolder = "\\generic path"

    s = "Sheet1"
    a = "A1"
    p = xFolder '& "\*.xlsx"

    f = Dir(p & "\*.xlsx")
    Do While f <> ""

        ActiveSheet.Range("A" & (z + 7)) = GetValueFromClosedWorkbook(p, f, s, a)

        f = Dir()
        z = z + 1
    Loop
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...