Como compilar e agrupar dados de várias pastas de trabalho e planilhas em um novo arquivo Excel em VBA

Como compilar e agrupar dados de várias pastas de trabalho e planilhas em um novo arquivo Excel em VBA

Estou tentando compilar e agrupar dados de diferentes pastas de trabalho em uma planilha do Excel. Estou tentando extrair dados em A1:D1 de duas pastas de trabalho, Secondtest1 e Secondtest2 para ThisWorkbook. Aqui esta o meu codigo ate agora.

Sub collateData()

    Dim SourceArray
    Dim SheetName As String, SourceRange As String
    Dim TargetWorkbook As Workbook, sourceFile As Workbook
    Dim TargetSheet As Worksheet
    Dim i As Integer
    Dim LastRow As Long

    SourceArray = Array("H:\Secondtest1.xlsx", "H:\Secondtest2.xlsx")
    SheetName = "Sheet1"
    SourceRange = "A1:D1"
    Set TargetWorkbook = ThisWorkbook
    Set TargetSheet = TargetWorkbook.Sheets("Sheet1")
    For i = 0 To UBound(SourceArray)
        Set sourceFile = Workbooks.Open(SourceArray(i))
        **LastRow = TargetSheet.Cells(TargetSheet.Rows.Count, 1).End(x1Up).Row**
        With sourceFile
            .Sheets(SheetName).Range(SourceRange).Copy Destination:=TargetSheet.Range("A" & i & ":D" & i)

            .Close
        End With
    Next

End Sub

Coloquei um asterisco na linha na qual estou recebendo um erro. O erro que estou recebendo é "Erro definido pelo aplicativo ou definido pelo objeto". Eu apreciaria qualquer ajuda, obrigado.

Responder1

Deveria ser xlUp(é um 'L' minúsculo, não o número '1').

Editar

Alguns pontos:

  • Use sempre Option Explicitno topo dos seus módulos, mesmo que não seja para um ambiente de produção. Fazer isso teria apontado o erro imediatamente em seu código.
  • Escolha uma convenção de nomenclatura e siga-a de forma consistente (você está usando principalmente palavras em maiúsculas, mas declarou uma variável como sourceFile).
  • Algumas pessoas podem preferir nomear procedimentos usando uma convenção diferente daquela usada para variáveis ​​(você decide).
  • Se você estiver abrindo uma pasta de trabalho de entrada sem a intenção de modificá-la ainda mais, é melhor usar o ReadOnlyargumento, e talvez também o UpdateLinksargumento, assim:

    Workbooks.Open(SourceArray(i), ReadOnly:=False, UpdateLinks:=False)
    

    Passar Falsepara UpdateLinksimpedirá que a caixa de diálogo do link de atualização apareça.

  • Use Longem vez de Integermesmo se tiver certeza de que seus valores estarão dentro do intervalo de uma Integervariável. Li em algum lugar que o Longtipo de dados se tornou mais eficiente nas versões recentes do VBA.

informação relacionada