Herbers Excel-Forum - das Archiv

Datensätze aus mehreren Tabellenblättern


Betrifft: Datensätze aus mehreren Tabellenblättern
von: Andrea

Geschrieben am: 10.09.2019 15:22:01
Hallo!
ich brauche bitte Unterstützung bei einem VBA-Code:
ich habe insgesamt 45 Tabellenblätter, in jedem ist ein Stundenschein eines Mitarbeiters gespeichert. ich möchte gewisse Zellen jedes Tabellenblattes in einer .csv-Datei speichern.
Die Frage: wie kann ich diese 45 Tabellenblätter (heißt "1"..."45") hintereinander abfragen?
Danke für die Hilfe!
lg Andrea

Betrifft: AW: Datensätze aus mehreren Tabellenblättern
von: 1712283.html
Geschrieben am: 10.09.2019 15:27:26
Hi Andrea,
hier ein Ansatz:


Dim liBlattNr As Integer
For liBlattNr = 1 To 45
hier dein Code, der alles in csv einträgt
Next


hilfts?
Ciao
Thorsten

Betrifft: AW: Datensätze aus mehreren Tabellenblättern
von: 1712300.html

Geschrieben am: 10.09.2019 16:23:39
Hallo Thorsten!
Danke für deine schnelle Hilfe! Bei mir funktioniert es leider nicht... hier mal ein Auszug aus meinem dazugehörigen Code, könntest du mir sagen was ich falsch mache, bitte:
Sub Import()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Users\kneissl\Desktop\Ausarbeitungen\HR\bmd web\Stundenimport\ _
import.xlsx")
Dim Personalnummer As Integer
Dim Kostenträger As String
Dim Datum As String
Dim time1 As Date
Dim time2 As Date
Dim Zähler1 As Integer 'Kalendertage 1-31
Dim liBlattNr As Integer 'Tabellenblätter 1-45
Dim i As Integer 'Startzeile
For liBlattNr = 1 To 45
i = 16
For Zähler1 = 1 To 31
If Worksheets(liBlattNr).Cells(i, 8) <> "" Then 'wenn Uhrzeit von nicht leer
Personalnummer = WorksheetFunction.VLookup(Sheets(liBlattNr).[W9], Sheets("Mitarbeiter").[ _
C3:F300], 4, False)
wb.Sheets("Tabelle1").[A2] = Personalnummer
Kostenträger = Worksheets(liBlattNr).Range("z12").Copy
wb.Sheets("Tabelle1").[B2].PasteSpecial Paste:=xlPasteValues
Datum = DateSerial(Worksheets(liBlattNr).Cells(12, 21), Worksheets(liBlattNr).Cells(12, 19), _
Worksheets("1").Cells(i, 2))
wb.Sheets("Tabelle1").[D2] = Datum
time1 = Worksheets(liBlattNr).Cells(i, 8)
wb.Sheets("Tabelle1").[E2].Value = time1
time2 = Worksheets(liBlattNr).Cells(i, 11)
wb.Sheets("Tabelle1").[F2].Value = time2
wb.Sheets("Tabelle1").Rows("2:2").Select 'in .csv eine Leerzeile einfügen
Selection.Insert shift:=xlDown
End If
i = i + 1
Next Zähler1
Next
wb.Close savechanges:=True
Set wb = Nothing
End Sub

Betrifft: AW: Datensätze aus mehreren Tabellenblättern
von: 1712307.html

Geschrieben am: 10.09.2019 16:47:02
Hi Andrea,
kannst du für uns bitte eine Bsp-Datei erstellen und diese hier per Upload mit Bsp-Daten und deinem Code zeigen?
ein kleiner Tipp:
dein Hinweis "Bei mir funktioniert es leider nicht" ist nicht hilfreich.
Besser wäre, wenn du (be)schreibst, was genau nicht funktioniert und was genau passiert, wenn du unsere Code-Vorschläge ausprobierst.
Ciao
Thorsten

Betrifft: AW: Datensätze aus mehreren Tabellenblättern
von: 1712317.html

Geschrieben am: 10.09.2019 17:25:40
Hallo Thorsten!
Dachte mein Fehler wäre in meinem Code offensichtlich... er erkennt die Tabellenblätter offenbar nicht als Variable und überträgt nichts in die .csv, aber auch keine Fehlermeldung. Wenn ich direkt ein Tabellenblatt anspreche, zB. "1", überträgt er die Daten einwandfrei, aber leider nur für das erste Tabellenblatt...
habe ein Excelsheet mit 2 Stundenscheinen gebastelt und hochgeladen. Er soll vom ersten Tabellenblatt Konstanten (Personalnummer, Kostenstelle und Kostenträger) sowie mehrere Variablen (zusammengesetztes Datum, Uhrzeit von, Uhrzeit bis und div. Zulagen) kopieren und in der csv eintragen und dann zum nächsten Tabellenblatt springen und wieder kopieren und einfügen. ist es so nachvollziehbar was ich gerne machen würde?
hier die Probedatei:
https://www.herber.de/bbs/user/131961.xlsm

Betrifft: AW: Datensätze aus mehreren Tabellenblättern
von: 1712369.html

Geschrieben am: 10.09.2019 22:08:17
Moin!
Ich probiere mal mein Glück. HIer mal eine Variante (den Teil in deinem Code austauschen). Dabei sollte durch alle Blätter gegangen werden. (ist getestet) Das Problem bei dir (könnte ich mir so vorstellen), war, das nicht genau referenziert wurde. Wenn du eine Datei öffnest, ist diese aktuelle. Wenn du also vor das Blatt nicht noch einen Mappennamen schreibst, wird das aktuelle genommen. Damit bezieht er sich aber auf wb und nicht die Ursprungsmappe. Im Code ist deshalb immer genau referenziert. Test mal, ob das klappt. Ansonsten könnte man den Code noch etwas vereinfachen (gleich direkt kopieren ohne die ZWischenschritte). Das könnte man aber in Angriff nehmen, wenn das Übertragen passt. HIer mal der Code. Habe nur den relevanten Teil aufgenommen.
i = 16
For blatt = 1 To ThisWorkbook.Sheets.Count
If Worksheets("1").Cells(i, 8) <> "" Then 'wenn Uhrzeit von nicht leer
Personalnummer = ThisWorkbook.Worksheets(blatt).Range("w9").Copy
wb.Sheets("Tabelle1").[A2] = Personalnummer
Kostenträger = ThisWorkbook.Worksheets(blatt).Range("z12").Copy
wb.Sheets("Tabelle1").[B2].PasteSpecial Paste:=xlPasteValues
Datum = DateSerial(ThisWorkbook.Worksheets(blatt).Cells(12, 21), ThisWorkbook.Worksheets("1" _
).Cells(12, 19), ThisWorkbook.Worksheets("1").Cells(i, 2))
wb.Sheets("Tabelle1").[D2] = Datum
time1 = ThisWorkbook.Worksheets(blatt).Cells(i, 8)
wb.Sheets("Tabelle1").[E2].Value = time1
time2 = ThisWorkbook.Worksheets(blatt).Cells(i, 11)
wb.Sheets("Tabelle1").[F2].Value = time2
Schmutz = ThisWorkbook.Worksheets(blatt).Cells(i, 28).Copy
wb.Sheets("Tabelle1").[G2].PasteSpecial Paste:=xlPasteValues
Erschwernis = ThisWorkbook.Worksheets(blatt).Cells(i, 31).Copy
wb.Sheets("Tabelle1").[h2].PasteSpecial Paste:=xlPasteValues
Gefahr = ThisWorkbook.Worksheets(blatt).Cells(i, 34).Copy
wb.Sheets("Tabelle1").[i2].PasteSpecial Paste:=xlPasteValues
Schweisser = ThisWorkbook.Worksheets(blatt).Cells(i, 37).Copy
wb.Sheets("Tabelle1").[j2].PasteSpecial Paste:=xlPasteValues
Obermonteur = ThisWorkbook.Worksheets(blatt).Cells(i, 40).Copy
wb.Sheets("Tabelle1").[k2].PasteSpecial Paste:=xlPasteValues
wb.Sheets("Tabelle1").Rows("2:2").Select 'in .csv eine Leerzeile einfügen
Selection.Insert shift:=xlDown
End If
i = i + 1
Next

VG

Betrifft: AW: Datensätze aus mehreren Tabellenblättern
von: 1712498.html
Geschrieben am: 11.09.2019 16:17:30
Hallo Matthias!
Spitze! das funktioniert perfekt :) scheiterte wirklich an dem passenden Tabellenblatt!
Vielen lieben Dank für Deine Hilfe!
lg Andrea

Betrifft: wer anderes bitte...
von: 1712327.html

Geschrieben am: 10.09.2019 17:52:20
Hi Andrea,
sorry, ich verstehe nix.
Du zeigst uns eine Bsp-Datei mit 2 Tabellen.
Ok, erst mal nicht schlecht.
Wenn ich dann aber versuche, deinen Code einzubauen, bzw anzupassen, stelle ich fest, dass in deinem Code in jeder Tabelle die Personalnummer aus einer Tabelle "Mitarbeiter" gesucht werden soll.
Aber weder ein Name in W9 ist vorhanden und auch die Tabelle "Mitarbeiter" fehlt.
An der Stelle hab ich abgebrochen. Ich weiß nicht, ob sonst noch wichtige Angaben von dir fehlen.
Ich kann leider nicht weiter helfen
Ciao
Thorsten

Betrifft: AW: wer anderes bitte...
von: 1712328.html
Geschrieben am: 10.09.2019 17:56:30
Hi Andrea,
sorry, nicht alles, was ich schrieb.
In Zelle W9 sind doch Werte. Aber Tabelle "Mitarbeiter" fehlt.
Ciao
Thorsten

Excel-Beispiele zum Thema "Datensätze aus mehreren Tabellenblättern"
Doppelte Datensätze löschen Alle Datensätze >= Eingabewert filtern
Datensätze nach zwei Kriterien in neues Blatt übernehmen Datensätze in zweitem Blatt anders anordnen
Datensätze in UserForm auswählen und im Blatt löschen Doppelte Datensätze und Leerzeilen löschen
Alle mehrfach vorkommenden Datensätze in zweiter Tabelle listen Doppelte Datensätze farblich markieren und auflisten
Anzahl der durch Autofilter ermittelten Datensätze anzeigen Druck aus mehreren Tabellenblättern auf eine Druckseite
Bewerten Sie hier bitte das Excel-Portal