
Ich versuche, Daten aus verschiedenen Arbeitsmappen in einer Excel-Tabelle zusammenzustellen und zu sammeln. Ich versuche, Daten in A1:D1 aus zwei Arbeitsmappen, Secondtest1 und Secondtest2, in ThisWorkbook zu ziehen. Hier ist mein bisheriger Code.
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
Ich habe die Zeile, in der ich einen Fehler erhalte, mit einem Sternchen markiert. Der Fehler, den ich erhalte, ist „Anwendungsdefinierter oder objektdefinierter Fehler“. Ich wäre für jede Hilfe dankbar, danke.
Antwort1
Dies sollte der Fall sein xlUp
(es ist ein kleines „L“, nicht die Zahl „1“).
Bearbeiten
Einige Punkte:
- Verwenden Sie es immer
Option Explicit
am Anfang Ihrer Module, auch wenn es nicht für eine Produktionsumgebung ist. Dadurch hätten Sie den Fehler in Ihrem Code sofort erkannt. - Wählen Sie eine Namenskonvention und halten Sie sich konsequent daran (Sie verwenden hauptsächlich Wörter mit Großbuchstaben, haben aber eine Variable als deklariert
sourceFile
). - Manche Leute bevorzugen möglicherweise eine andere Konvention zum Benennen von Prozeduren als die für Variablen (das bleibt Ihnen überlassen).
Wenn Sie eine Eingabearbeitsmappe öffnen, ohne sie weiter ändern zu wollen, ist es besser, das
ReadOnly
Argument und möglicherweise auch dasUpdateLinks
Argument wie folgt zu verwenden:Workbooks.Open(SourceArray(i), ReadOnly:=False, UpdateLinks:=False)
Durch die Übergabe
False
anUpdateLinks
wird verhindert, dass das Dialogfeld zum Aktualisieren des Links angezeigt wird.- Verwenden Sie
Long
anstelle von ,Integer
auch wenn Sie sicher sind, dass Ihre Werte gut innerhalb des Bereichs einerInteger
Variablen liegen. Ich habe irgendwo gelesen, dass dieserLong
Datentyp in den neuesten VBA-Versionen effizienter gemacht wurde.