Hey liebe Forumgemeinde, ich bin gerade dabei mein Studium zu machen. Um ehrlich zu sein, fehlt mir gerade etwas die Zeit und hoffe das ihr mir helfen könnt.
Was habe ich vor: Ich habe 3 Excel Dateien die im Pfad C:\Users\User\Desktop\Abrechnungen liegen. 2 Dateien mit den Namen "Technik Abrechnung" und "Küchenmöbel Abrechnung". Beide mit je 12 Tabellenblätter (Januar bis Dezember), wobei diese erst ab Zeile 4 zusammengefügt werden sollen. Diese sollen in der 3. Datei "Abrechnungen gesamt" ab der 8. Zeile zusammengefügt und aktualisiert werden.
für Lösungsvorschläge per VBA benötigt man, genau wie bei anderen Vorgehensweisen, genaue Kenntnis über den Aufbau der Dateien. Sonst wird das nichts. Bitte Beispieldatei(en) einstellen.
Hinweis: Die Aufteilung von Daten auf Monatsblätter ist eine weit verbreitete Unsitte, die die Datenverarbeitung nur unnötig verkompliziert. Verzichte darauf.
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
Hallo, Ich habe gerade noch Probleme, dass in Zelle I3 der Ordnerpfad angezeigt wird und der Code nur das erste Tabellenblatt kopiert, nicht alle (der Inhalt der Tabellenblätter soll untereinander angezeigt werden - Anzahl der Spalten ist immer gleich, lediglich die Anzahl der Zeilen variiert). Vielleicht könnt ihr mir helfen.
Angehängt ist das Master in dem die Tabellenblätter reinkopiert werden sollen und eine externe Datei mit mehreren Tabellenblätter.
Ich würde gern bei VBA bleiben, da wir zum Teil mit verschiedenen Tabellen (die unabhängig von einander betrachtet werden müssen) arbeiten. Wo ich aktuell noch nicht weiter komme: Ich will von einer Datei nicht nur "Tabelle1" sondern Tabelle1 bis Tabelle34 kopieren. Hat da einer eine Hilfestellung?
Function GetConnXLS(ByVal cFileName As String, _ Optional ByVal InformErrMSG As Boolean = False) As ADODB.Connection
'On Error GoTo LOI:
'Open ADO connection to excel workbook
Dim oConn As ADODB.Connection Dim Ext As String, ConnStr As String
oConn.Open ConnStr Set GetConnXLS = oConn Exit Function
LOI: If Err.Number <> 0 Then Set oConn = Nothing If InformErrMSG Then MsgBox "GetConnXLS" & ": " & Err.Number & " " & Err.Description, vbCritical End If End If End Function
Sub Merge_All() Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Dim Sh As Worksheet Dim I As Long, k As Long, CountFiles As Long, J As Long, strData, _ kDS As Long, xKorr As Integer files = Application.GetOpenFilename(, , , , True)
If VarType(files) = vbBoolean Then Exit Sub Set Sh = Sheets("Master")
For k = LBound(files) To UBound(files) 'Anzahl der Datensätze in der ausgewählten DAtei ermitteln kDS = lastRowClosedFile(files(k), "Tabelle1", "A:A")
'ADODB-Connection erstellen Set cnn = GetConnXLS(files(k)) If cnn Is Nothing Then MsgBox "Check lai co so du lieu file: " & files(k) Exit Sub End If
'Select-Befehl zusammenstellen strData = "SELECT * From [Tabelle1$A2:S" & kDS & "];" 'Recordset öffnen auf der Grundlage der Connection & Select-Befehl Set rst = cnn.Execute(strData)
CountFiles = CountFiles + 1
If CountFiles = 1 Then For L = 0 To rst.Fields.Count - 1 Sh.Cells(3, J + 1).Value = rst.Fields(J).Name Next L End If If k = 1 Then xKorr = 1 Else xKorr = 0 End If Sh.Range("AX" & 3 + I - xKorr).Value = files(k) I = I + Sh.Range("A" & 4 + I).CopyFromRecordset(rst)
rst.Close Set rst = Nothing cnn.Close Set cnn = Nothing
Next k MsgBox "Fertig", vbSystemModal + 48, "..." End Sub
Ist dein gezeigter Lösungsversuch mit der Adodb Connection fest oder darfs auch anders gehen? Im Grunde holst du doch nur den gesamten Inhalt aus dem Blatt. Wenn du relativ wenig verändern willst dann bastel dir eine Funktion, die in der Quelldatei alle Blätter in ein neues Blatt zusammenfasst und wende die Recordsetabfrage darauf an. Anschließend das Blatt wieder löschen oder die Datei schließen ohne speichern.
24.07.2022, 10:35 (Dieser Beitrag wurde zuletzt bearbeitet: 24.07.2022, 10:36 von Pawelpopolski.)
Hallo,
du hast dir da ja schon ein schönes Beispiel zusammengestückelt, ein wenig überkomplex, aber nett. Wenn du dieses Beispiel mit deinen Daten weiternutzt wirst du auf weitere Hürden stossen, zu denen du dann weitere Fragen haben wirst.
Wenn du hier ein vereinfachtes und anonymisiertes Beispiel deiner Originaldateien hochladen würdest, wäre es für alle Beteiligten einfacher eine passgenaue Lösung zu erstellen