Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Liste aus anderer Excel Datei zusammenfügen
#1
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.

Ich hoffe ihr könnt mir helfen.

Vielen lieben Dank im Vorraus
Vanessa
Antworten Top
#2
Hallo Vanessa,

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
Antworten Top
#3
Hallo Vanessa,

schaue Dir in der Zwischenzeit mal die Möglichkeiten von PQ (Powerquery) an.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#4
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.

Grüße
Vanessa


Angehängte Dateien
.xlsm   Master.xlsm (Größe: 116,15 KB / Downloads: 6)
.xlsx   Ex_Datei_01.xlsx (Größe: 33,07 KB / Downloads: 6)
Antworten Top
#5
Hallo

Anbei mein Vorschlag mit PQ, obwohl VBA erwünscht ist. Wichtig nachentpacken der Zipdatei muss alles im Ordner bleiben.
Bei Probleme gerne nachfragen.


Angehängte Dateien
.zip   Vanessa.zip (Größe: 50,56 KB / Downloads: 8)
Viele Grüße
PIVPQ
Antworten Top
#6
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

Set oConn = New ADODB.Connection

ConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source=" & cFileName & ";" & _
                "Extended Properties=""Excel 12.0 xml;HDR=Yes"";"

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
Antworten Top
#7
Hallo Vanessa,

Powerquery kann man auch mit vba anschubsen. 
 
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.
Antworten Top
#8
Hallo ralf_b

Klar kann man PQ per Makro anschubsen, das geht auch recht einfach.

Nur die Frage ist wenn in der Firma des TE PQ gesperrt ist, dann nützt VBA anschubsen auch nix, was wir nicht wissen.
Viele Grüße
PIVPQ
Antworten Top
#9
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 Wink
Antworten Top
#10
Hallo PIVPQ, 

wenn wenn wenn, ... es schadet sicher auch nicht es mal erwähnt zu haben.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste