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
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
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