Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1520to1524
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Tabellen untereinander kopieren

VBA Tabellen untereinander kopieren
26.10.2016 04:23:15
Florian
Hallo,
ich habe folgendes VBA Problem und komme leider absolut nicht mehr weiter. Ich soll eine Zeiterfassungsdatei erstellen, in der jeder Mitarbeiter die Zeiten und Tätigkeiten einträgt, die er bestimmten Projekten gewidmet hat. Da jeder Mtarbeiter ein eigenes Template haben soll, habe ich ein Standardtemplate erstellt. Nun sollen diesen gesamten Daten in einer Datei gesammelt werden. Dazu bin ich wie folgt vorgegangen:
1. Eine Art Masterfile erstellt
2. Jeder Mitarbeiter hat in diesem Masterfile ein eigenes Tabellenblatt, welches mit dem Originaltabellenblatt verknüpft ist. Die Daten ziehe ich über "Verbindungen", sodass sich das Blatt immer aktualisiert.
3. Im ersten Tabellenblatt soll nun eine Übersicht erfolgen, in der die Daten aller Mitarbeiter erfasst. Vereinfacht gesagt, nur untereinander kopiert.
4. Bei jeder Aktualisierung muss der vorherige Inhalt gelöscht werden, da beim sturen Untereinanderkopieren sonst doppelte Einträge entstehen würden.
4. Mein VBA Code dafür ist folgender:
Sub TabellenKopierenUntereinander()
Dim i As Integer
Dim z As Integer
With Sheets("Zusammenfuegen")
z = Cells(Rows.Count, 1).End(xlUp).Row
.Range(.Cells(2, 1), .Cells(z, 3)).ClearContents
End With
With ActiveWorkbook
For i = 2 To .Worksheets.Count
'Ermitteln den benutzen Bereich der einzelnen Tabellenblätter
Set Rng = .Worksheets(i).UsedRange
'letzte Zeile ermitteln des ersten Blattes
Set rng1 = Worksheets(1).Cells(Rows.Count, "A").End(xlUp)(2)
'Bereich kopieren
Rng.Copy Destination:=rng1
Next
End With
End Sub

Das Problem dabei ist, dass nun immer die Überschriften mit kopiert werden. Ich habe es absolut nicht geschafft, den "UsedRange" so zu definieren, dass quasi ab Zeile 2 alles ins erste Tabellenblatt kopiert wird. Da die Überschriften immer gleich sind, hatte ich sie manuell ins Tabellenblatt "Zusammenführen eingetragen.
Wie könnte ich außerdem die Gesamtübersicht so einrichten, dass die Überschriften in Zeile 5 sind und alle Werte beginnend in Zeile 6 erfolgen. Die ersten Zeilen muss ich nämlich noch für Beschreibungen nutzen (ehrlich gesagt, weiß ich nicht, warum es in Zeile 2 beginnt). Gibt es die Möglichkeit am Ende der generierten Gesamttabelle eine Art Summenzeile einzufügen. In dieser Summenzeile sollten die eingetragen Zeiten, die ein Mitarbeiter für die Tätigkeiten gebraucht hat, summiert werden. Auch hier muss die Möglichkeit bestehen, filtern zu können (quasi wie viel Zeit hat Mitarbeiter "Florian" mit "Blumen gießen" verbraucht)
Ich habe eine Testdatei angehängt (die Daten von den einzelnen Mitarbeitern habe ich manuell eingetragen).
Der Text ist ein wenig länger geworden, aber ich wollte genau beschreiben, was ich benötige und was mein Problem ist. Falls es generelle Anmerkungen gibt, wie man das verbessern könnte, bin ich für Vorschläge offen.
Vielen Dank schonmal,
Florian
https://www.herber.de/bbs/user/109019.xlsm

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Tabellen untereinander kopieren
26.10.2016 04:31:54
Florian
Sorry, habe nicht die letzte gespeicherte Version der Datei hochgeladen. Hier nochmal die aktuelle:
https://www.herber.de/bbs/user/109020.xlsm
AW: VBA Tabellen untereinander kopieren
26.10.2016 09:01:33
baschti007
So in der Art Vielleicht ?
Gruß Basti
Sub TabellenKopierenUntereinander()
Dim i As Integer
Dim z As Integer
Dim r As Long, c As Long
Dim SZ As Worksheet
Dim rng()
Set SZ = Sheets("Zusammenfuegen")
With SZ
z = .Cells(.Rows.Count, 1).End(xlUp).Row
If z = 1 Then z = 2
.Range(.Cells(2, 1), .Cells(z, 3)).ClearContents
End With
z = 2
With ActiveWorkbook
For i = 2 To .Worksheets.Count
rng = .Worksheets(i).UsedRange.Value
For r = LBound(rng, 1) + 1 To UBound(rng, 1)
For c = LBound(rng, 2) To UBound(rng, 2)
With SZ
.Cells(z, c) = rng(r, c)
End With
Next
z = z + 1
Next
Next
End With
End Sub

Anzeige
AW: VBA Tabellen untereinander kopieren
27.10.2016 04:10:14
Florian
Hallo Basti,
vielen Dank. Die Routine macht genau das, was ich gesucht habe. Deine Schritte kann ich auch soweit nachvollziehen, dass ich sie anpassen kann (auch wenn ich alleine nie darauf gekommen wäre).
Eine Frage hätte ich allerdings noch. Bisher werden die Daten der einzelnen Mitarbeiter in diese Datei eingelesen und sind dann in den fortlaufenden Tabellenblätter gespeichtert wurden. Würde es theoretisch auch funktonieren, diese direkt von den Excel Datei einzulesen ohne Tabellenblätter zu stellen? Vom Ablauf in etwa so:
1. Die einzelnen Excel Dateien werden in einem bestimmten Verzeichnis gespeichert. Name und alles was die Umsetzung vereinfachen würde, wird vorgegeben.
2. Das Zusammenfügen erfolgt dann in der Masterfile. Die Routine müsste sich die Daten File für File direkt aus diesen ziehen und diese dann wie gehabt untereinander kopieren. Wäre das möglich?
Nochmals vielen Dank für deine Hilfe!
VG Flo
Anzeige
AW: VBA Tabellen untereinander kopieren
27.10.2016 07:34:11
baschti007
Ja geht auch wenn alle deine Leute Ihre Datei in einem Ordner haben mit diesem code
Gruß Basti
Sub fff()
Dim strOrdner As String
Dim objFSO As Object, objOrdner As Object, colDateien As Object, objDatei As Object
Dim wkbkSource As Workbook
Dim PfadCSV As String, NamenErstellt As String
Dim WSZusammen As Worksheet, SZ As Worksheet
Dim x As Integer
Dim r As Long, c As Long
Dim rng()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set WSZusammen = ThisWorkbook.Worksheets("Zusammenfuegen")
With WSZusammen
x = .Cells(.Rows.Count, 1).End(xlUp).Row
If x = 1 Then x = 2
.Range(.Cells(2, 1), .Cells(x, 3)).ClearContents
End With
x = 2
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\"
.Title = "Ordnerauswahl"
.ButtonName = "Auswahl..."
.InitialView = msoFileDialogViewList
If .Show = -1 Then
strOrdner = .SelectedItems(1)
If Right(strOrdner, 1)  "\" Then strOrdner = strOrdner & "\"
Else
strOrdner = ""
End If
End With
If strOrdner = "" Then
MsgBox ("Kein Ordner gewählt!")
Else
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOrdner = objFSO.GetFolder(strOrdner)
Set colDateien = objOrdner.Files
For Each objDatei In colDateien
If objFSO.GetExtensionName(objDatei) = "xlsx" Then
Set wkbkSource = Workbooks.Open(objDatei)
rng = wkbkSource.Worksheets(1).UsedRange.Value
For r = LBound(rng, 1) + 1 To UBound(rng, 1)
For c = LBound(rng, 2) To UBound(rng, 2)
WSZusammen.Cells(x, c) = rng(r, c)
Next
x = x + 1
Next
NamenErstellt = NamenErstellt & vbCr & wkbkSource.Name
wkbkSource.Close False
End If
Next objDatei
Set wkbkSource = Nothing
Set objFSO = Nothing
Set objOrdner = Nothing
Set colDateien = Nothing
Set WSZusammen = Nothing
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "Diese Dateien Wurden Ausgelesen" & vbCr & NamenErstellt
End If
End Sub

Anzeige
AW: VBA Tabellen untereinander kopieren
28.10.2016 05:13:28
Florian
Hallo Basti,
tausend Dank für deine Mühen. Der modifizierte Code übertrifft sogar noch alles, was ich mir erhofft hatte. Kann gar nicht oft genug danke sagen :-)
VG Flo
AW: VBA Tabellen untereinander kopieren
28.10.2016 07:19:54
baschti007
Bitte Bitte
Gruß Basti

40 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige