Ok - ja jetzt íst es denke ich klar.
Dann habe ich nur noch zwei Fragen:
Sind die Namen der Tabellen in Excel in allen Protokollen gleich?
Sollen die Daten in allen Protokollen in die gleichen Felder ("Koordinate" z.B. A1:A10) bzw. haben die Felder in allen Tabellen den gleichen Namen?
Der Code könnte dann z.B. so aussehen:
public function copyData()
Dim fd As FileDialog
Dim file As String
Dim objApp, objWBSource, objWBTarget, objWSSource, objWSTarget As Object
Set fd = Application.FileDialog(msoFileDialogOpen)
With fd
'Mehrfachauswahl verbieten
.AllowMultiSelect = False
.Title = "Zieldatei wählen..."
'Filter löschen
.Filters.Clear
'Neue Filter hinzufügen
.Filters.Add "Exceldateien", "*.xls; *.xlsm", 1
'Prüfen ob Abgebrochen wurde
If .Show = -1 Then
file = .SelectedItems(1)
Else
exit function
End If
End With
'Datei öffnen
Set objApp = CreateObject("Excel.Application")
Set objWBTarget = objApp.Workbooks.Open(file)
Set objWBSource = ActiveWorkbook
'Zieltabelle auswählen
Set objWSTarget = objWBTarget.Worksheets("TARGET_SHEET_NAME")
'Quelltabelle wählen 1.Zeile für eigenen Namen - 2. Zeile für aktive Tabelle
Set objWSSource = objWBSource.Worksheets("SOURCE_SHEET_NAME")
'Set objWSSource = ActiveSheet
'Zellen Kopieren - Entweder einen ganzen Bereich z.B. Range("A1:A5") oder eine einzelne Zelle
'z.B. Range("A1") oder eben über den Namen einer Zelle oder Zellbereichs Range("CELLNAME")
'ggf. hier eine Schleife beginnen oder die nächsten Zeilen für jeden Datensatz einzeln
'aufrufen
'BEGIN COPY-PASTE-BLOCK
'Quellworkbook aktivieren
objWSSource.Activate
Application.CutCopyMode = False
objWSSource.Range("A1:A5").Copy
'und Einfügen an die passende Stelle
objWSTarget.Range("A1").PasteSpecial
'END COPY-PASTE-BLOCK
'Ziel speichern und schließen
objWBTarget.Save
objWBTarget.Close
'Zurück zu Quelldatei wechseln
objWBSource.Activate
'Speicher freigeben
objApp.Quit
Set objWSTarget = Nothing
Set objWSSource = Nothing
Set objWBTarget = Nothing
Set objWBSource = Nothing
Set objApp = Nothing
Set fd = Nothing
end function
Ich selbst habe noch nicht viel mit VBA in Excel gearbeitet, also gebe ich keine Garantie das es auf anhieb so funktioniert. Aber der Code sollte so oder so ähnlich aussehen. Wo du die Zeilen hinkopierst, weist du selbst am besten. Wenns nicht als Bereich oder über eine Schleife geht musst du leider den COPY-PASTE-BLOCK für jede Zelle einzeln aufrufen.
Hoffe ich konnte weiterhelfen.
|