Microsoft Excel

Herbers Excel/VBA-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

Beiträge aus dem Excel-Forum zum Thema "Datensätze aus mehreren Tabellenblättern"