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, 09:35 (Dieser Beitrag wurde zuletzt bearbeitet: 24.07.2022, 09: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