Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1528to1532
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

Programmierteil für mehrere Tabellen wiederholen

Programmierteil für mehrere Tabellen wiederholen
20.12.2016 12:41:05
Hans
Servus ihr lieben Excelaner,
ich habe folgendes Problem und bräuchte euren Rat dazu:
Es existiert eine Excel-Mappe mit 1. einer Tabelle "Abfrage" - hier wird per Knopfdruck eine SQL-Abfrage von unserer Datenbank vorgenommen und die Spalten in "Abfrage" werden anschließend mit Daten gefüllt.
Daneben existieren mehrere leere Tabellen (Städte, z.B. München). In diese sollen bestimmte Spalten aus "Abfrage" hineinkopiert (und anschließend ausgedruckt) werden.
Das Ganze soll per Knopfdruck über ein Makro erfolgen.
Die Schritte, welche das Makro erledigen muss, lauten wie folgt:
1. Schau in Tabelle "Abfragen", filter (filtere?) in Spalte "AA" nach "München"
2. Nimm von den gefilterten Daten die Spalten E, F, I, O, U und AB
3. kopier diese Auswahl in (die noch leere Tabelle) "München".
4. Schau in Tabelle "Abfragen", filter (filtere?) in Spalte "AA" nach "Berlin"
5. Nimm von den gefilterten Daten die Spalten E, F, I, O, U und AB
6. kopier diese Auswahl in (die noch leere Tabelle) "Berlin". ......usw. usf.

Ich habe das mit dem Makrorecorder versucht, habe dabei aber das Problem, dass er bei Filtermechanismen in der "Abfragen"-Tabelle durcheinander kommt.
Auch die Möglichkeit, eine Zwischentabelle namens "Auswertung" anzulegen, in welcher mittels Pivot-Tabelle nur die Tabellen E, F, I, O, U und AB stehen, um von dort aus die leeren Tabellen füllen zu lassen, habe ich schon ausgeschöpft.
Der Code dazu sieht so aus:

Private Sub Kellerbestand_Erstellen()
Dim lzeilea As Long
Dim lspaltej As Long
''München''
'Variablen für letzte Zeile (in Spalte A) und letzte Spalte mit Eintrag (in Zeile 4, weil die   _
_
immer da ist)
'Stützpunkt München auswählen in Tabelle "Auswertung"
Sheets("Auswertung").PivotTables("PivotTable1").PivotFields("Stützpunkt:").CurrentPage _
= "München"
'letzte beschriebene Zeile in Spalte A ermitteln
lzeilea = Worksheets("Auswertung").Cells(Rows.Count, 1).End(xlUp).Row
'letzte beschriebene Spalte in Zeile 4 ermitteln (ist immer LA-Datum)
lspaltej = Worksheets("Auswertung").Cells(4, Columns.Count).End(xlToLeft).Column
'Filterauswahl aus Spalten A-J kopieren und in Tabelle "München" einfügen
Sheets("Auswertung").Range("A1", Cells(lzeilea, lspaltej)).Select
Selection.Copy
Sheets("München").Select
Range("A1").Select
ActiveSheet.Paste
''Berlin''
Sheets("Auswertung").PivotTables("PivotTable1").PivotFields("Stützpunkt:").CurrentPage _
= "Berlin"
lzeilea(1) = Worksheets("Auswertung").Cells(Rows.Count, 1).End(xlUp).Row
lspaltej(1) = Worksheets("Auswertung").Cells(4, Columns.Count).End(xlToLeft).Column
Sheets("Auswertung").Range("A1", Cells(lzeilea, lspaltej)).Select
Selection.Copy
Sheets("Berlin").Select
Range("A1").Select
ActiveSheet.Paste
End Sub

Das würde an und für sich denke ich funktionieren, auch wenn es natürlich schlampiger VBA-Code ist. Allerdings werden hier mehrmals (für jede Tabelle 1x) die Variablen lzeilea und lspaltej verwendet.
Ich habe das versucht mit einem Array zu lösen, damit ich lzeilea und lspaltej mehrmals innerhalb des SUBS verwenden kann.
Also habe ich Dim lzeilea(10) und lspaltej(10) probiert und für München und Berlin lzeilea(0), lspalte(0) bzw. lzeilea(1), lspaltej(1) verwendet.
Das hat aber nicht geklappt, der Compiler meckerte wegen einer fehlgeschlagenen Objektdefinition o.Ä.
Ich bin über jegliche Unterstützung dankbar und hoffe, dass das Problem verständlich ist. Wenn nicht, bitte nachfragen.
Grüßle
Hans

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Programmierteil für mehrere Tabellen wiederho
20.12.2016 13:18:59
Michael
Hallo Hans!
Bzgl. Die Schritte, welche das Makro erledigen muss, lauten wie folgt; das kann so aussehen (Bsp-Datei): https://www.herber.de/bbs/user/110122.xlsm
Der Code
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsQ As Worksheet: Set WsQ = Wb.Worksheets("Abfragen") 'Quell-Blatt
Dim WsZ As Worksheet, Stadte, Spalten, i As Long, j As Long
Stadte = Array("München", "Berlin", "Düsseldorf")
Spalten = Array("E", "F", "I", "O", "U", "AB")
With WsQ
For i = LBound(Stadte) To UBound(Stadte)
If .AutoFilterMode Then .AutoFilterMode = False
Set WsZ = Wb.Worksheets(Stadte(i))
.Range("A1").CurrentRegion.AutoFilter _
Field:=27, Criteria1:=Stadte(i)
For j = LBound(Spalten) To UBound(Spalten)
With .AutoFilter.Range
.Columns(Spalten(j) & ":" & Spalten(j)).Copy Destination:= _
WsZ.Cells(1, WsZ.Columns.Count).End(xlToLeft).Offset(, 1)
End With
Next j
Set WsZ = Nothing
Next i
.AutoFilterMode = False: .Activate
End With
End Sub
Da Du keine Bsp-Datei eingestellt hast, hab ich Dir eine gemacht; probier's mal aus, ob Du damit schon zurecht kommst.
LG
Michael
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige