
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 Explicit
no 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
ReadOnly
argumento, e talvez também oUpdateLinks
argumento, assim:Workbooks.Open(SourceArray(i), ReadOnly:=False, UpdateLinks:=False)
Passar
False
paraUpdateLinks
impedirá que a caixa de diálogo do link de atualização apareça.- Use
Long
em vez deInteger
mesmo se tiver certeza de que seus valores estarão dentro do intervalo de umaInteger
variável. Li em algum lugar que oLong
tipo de dados se tornou mais eficiente nas versões recentes do VBA.