
Estoy intentando compilar y cotejar datos de diferentes libros en una hoja de Excel. Estoy intentando extraer datos en A1:D1 de dos libros de trabajo, Secondtest1 y Secondtest2 en ThisWorkbook. Aquí está mi código hasta ahora.
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
He marcado con un asterisco la línea en la que aparece un error. El error que recibo es "Error definido por la aplicación o por el objeto". Agradecería cualquier ayuda, gracias.
Respuesta1
Debería serlo xlUp
(es una 'L' minúscula, no el número '1').
Editar
Algunos puntos:
- Úselo siempre
Option Explicit
en la parte superior de sus módulos, incluso si no es para un entorno de producción. Hacer esto le habría señalado el error de inmediato en su código. - Elija una convención de nomenclatura y sígala de manera consistente (usará principalmente palabras en mayúscula, pero ha declarado una variable como
sourceFile
). - Algunas personas pueden preferir nombrar procedimientos usando una convención diferente a la que se usa para las variables (depende de usted).
Si está abriendo un libro de entrada sin la intención de modificarlo más, es mejor usar el
ReadOnly
argumento, y quizás también elUpdateLinks
argumento, como este:Workbooks.Open(SourceArray(i), ReadOnly:=False, UpdateLinks:=False)
Pasar
False
aUpdateLinks
evitará que aparezca el cuadro de diálogo del enlace de actualización.- Úselo
Long
en lugar deInteger
incluso si está seguro de que sus valores estarán dentro del rango de unaInteger
variable. Leí en alguna parte que elLong
tipo de datos se ha vuelto más eficiente en las versiones recientes de VBA.