So kompilieren und sammeln Sie Daten aus mehreren Arbeitsmappen und Blättern in einer neuen Excel-Datei in VBA

So kompilieren und sammeln Sie Daten aus mehreren Arbeitsmappen und Blättern in einer neuen Excel-Datei in VBA

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 Explicitam 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 ReadOnlyArgument und möglicherweise auch das UpdateLinksArgument wie folgt zu verwenden:

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

    Durch die Übergabe Falsean UpdateLinkswird verhindert, dass das Dialogfeld zum Aktualisieren des Links angezeigt wird.

  • Verwenden Sie Longanstelle von , Integerauch wenn Sie sicher sind, dass Ihre Werte gut innerhalb des Bereichs einer IntegerVariablen liegen. Ich habe irgendwo gelesen, dass dieser LongDatentyp in den neuesten VBA-Versionen effizienter gemacht wurde.

verwandte Informationen