Excel, Makro-Schleife mit Zählen
Betrifft: Excel, Makro-Schleife mit Zählen
von: winni
Geschrieben am: 14.11.2014 14:52:20
Hallo, ich mache einiges mit Tabellen und Makros, dies ist nun ein neues Problem.
Ich habe in einem Tabellenblatt eine Liste von Mitgliedern, die sehr variabel sein kann, da jedes mal hier nur Leute mit bestimmten Voraussetzungen angezeigt werden. Mit den jeweiligen Daten dieser Mitglieder möchte ich nun ein anderes Tabellenblatt ausdrucken, aber eben immer nur so viel Blätter, wie jeweilig Mitglieder angezeigt werden. Habe bisher Makros benutzt, die eine bestimmte Anzahl dieses Vorganges ( kopieren relevanter Daten in einen entsprechenden Bereich, der mit dem Druck-Blatt verknüpft ist; dann Ausdruck ) wiederholt. Nun möchte ich, dass dieser Vorgang genau so oft wiederholt wird, wieviel Mitglieder in der Liste stehen. Wenn die Anzahl erreicht ist, beendet Excel diesen Kopier-Druck-Vorgang. Eigentlich wie ein Serienbrief, aber ich möchte das als Makro so haben, weil ich es auch für andere zukünftige Dinge brauche. Wäre sehr schön, wenn mir jemand helfen könnte. Vielen Dank im Voraus !
 |
Betrifft: AW: Excel, Makro-Schleife mit Zählen
von: fcs
Geschrieben am: 14.11.2014 17:05:11
Hallo Winni,
grundsätzlich kann man es mit Makros der folgenden Struktur lösen.
Hier muss man ggf. im Hauptmakro die Namen der Tabellen und die Startzeile festlegen.
Für Varianten kann man das Hauptmakro kopieren und unterschiedliche Namen für das Blatt mit der Liste vorgeben.
Sieht die Druckausgabe anders aus, dann muss man das Übertragungsmakro anpassen oder eine Kopie des Makros anpassen und den Makronamen im Hauptmakro anpassen.
Gruß
Franz
'Code in einem allgemeinen Modul
Option Explicit
Private wksListe As Worksheet, wksDruck As Worksheet, ZeileL As Long, bolFehler As Boolean
Public Sub DruckenTabelle1()
Set wksListe = ActiveWorkbook.Worksheets("Tabelle1") 'Tabellenblatt mit Liste
Set wksDruck = ActiveWorkbook.Worksheets("Tabelle2") 'Tabellenblatt für Druckausgabe
Call prcDruckenAuswahl(strMakro:="fncDaten_nach_Tab2", Zeile_1:=2, _
bolPreview:=False, ColumnLastRow:=1)
Set wksListe = Nothing
Set wksDruck = Nothing
End Sub
Sub prcDruckenAuswahl(strMakro As String, Optional Zeile_1 As Long = 2, _
Optional bolPreview As Boolean = False, _
Optional ColumnLastRow As Long = 1)
Dim Zeile_Letzte As Long
'strMakro = Name des Makros, das die Daten aus der Liste in die Drucktabelle überträgt.
'Zeile_1 = 1. Datenzeile der Datenliste
'bolPreview = wenn True dann wird die Druckvorschau angezeigt
'ColumnLastRow = letzte Zeile mit Daten wird in Spalte ermittelt _
wenn 0, dann wird letzte benutzte Zeile aus UsedRange ermittelt
If ColumnLastRow < 0 Then
MsgBox "Wert für Parameter ""ColumnLastRow"" muss ganze Zahl >=0 sein!"
Exit Sub
End If
If Zeile_1 < 1 Then
MsgBox "Wert für Parameter ""Zeile_1"" muss ganze Zahl >=1 sein!"
Exit Sub
End If
If MsgBox("Sichtbare Datenzeilen in Blatt """ & wksListe.Name _
& """ nach Blatt """ & wksDruck.Name _
& """ übertragen und drucken", _
vbOKCancel + vbQuestion, "Seriendruck-Makro: " & strMakro) = vbCancel Then Exit Sub
With wksListe
If ColumnLastRow = 0 Then
Zeile_Letzte = .UsedRange.Row + .UsedRange.Rows.Count - 1
Else
Zeile_Letzte = .Cells(.Rows.Count, ColumnLastRow).End(xlUp).Row
End If
If Zeile_Letzte >= Zeile_1 Then
For ZeileL = Zeile_1 To Zeile_Letzte
If .Rows(ZeileL).Hidden = False Then
Run strMakro
If bolFehler = False Then
If bolPreview = True Then
wksDruck.PrintPreview
Else
wksDruck.PrintOut
End If
End If
End If
Next
Else
MsgBox "Keine Daten in Liste """ & wksListe.Name & """"
End If
End With
End Sub
Private Sub fncDaten_nach_Tab2()
bolFehler = True
On Error GoTo Fehler
'Übertragen der Daten aus der Zeile der Quelletabelle in das Ziel Tabelle1
With wksListe
If .Cells(ZeileL, 1) = "" Then bolFehler = True: Exit Sub
wksDruck.Cells(2, 3).Value = .Cells(ZeileL, 2).Text & " " & .Cells(ZeileL, 1).Text 'Vorname _
Name
wksDruck.Cells(4, 3).Value = "'" & .Cells(ZeileL, 4).Value 'PLZ
wksDruck.Cells(4, 4).Value = "'" & .Cells(ZeileL, 3).Value 'Ort
wksDruck.Cells(4, 6).Value = .Cells(ZeileL, 5).Value 'Datum
wksDruck.Cells(6, 3).Value = .Cells(ZeileL, 6).Value 'Wert 1
wksDruck.Range("E6").Value = .Cells(ZeileL, 7).Text 'Info
End With
bolFehler = False
Fehler:
With Err
Select Case .Number
Case 0 'alles ist ok
Case Else
MsgBox "Fehler-Nr.: " & .Number & .Description, _
vbInformation + vbOKOnly, "Übertragen der Daten aus Zeile " & ZeileL
End Select
End With
End Sub
 |
Betrifft: AW: Excel, Makro-Schleife mit Zählen
von: winni
Geschrieben am: 15.11.2014 13:33:54
Pardon erst mal, dass ich erst jetzt antworte, war aber bis eben unterwegs, hatte aber Deine antwort bereits gelesen. Vielen Dank für die Mühe, aber ich habe wohl viel zu viel drumrumgeschrieben, was garnicht durch das Makro, was ich suche, abgedeckt werden soll. Eigentlich brauche ich nur Folgendes : ich habe in Zelle A1 einen Wert (zeigt Anzahl der Mitglieder an), dann habe ich einen Wert in A2 (dort wird die Anzahl der Druckvorgänge angezeigt ( mache ich durch Kennzeichnung der Mitglieder, hier dann die Anzahl der Kennzeichnungen). So, das decke ich durch mein schmales Wissen ab, aber was ich nicht weiss : Das Programm soll nach jedem Vorgang ( Kopieren+Druck) vergleichen : sind die Zahlen in A1 und A2 gleich ?, wenn nein, dann wiederhole mein Makros, wenn die Zahl gleich sind ( also alle Mitglieder durch Ausdrucke erfasst ), dann beende das Makro. Das ist vielleicht das banale Problem bei mir, alles andere glaube ich zu können. Wäre schön, wenn es gehen würde.
 |
Betrifft: AW: Excel, Makro-Schleife mit Zählen
von: fcs
Geschrieben am: 16.11.2014 09:59:56
Hallo winni,
da hast du dann bei deiner 1. Beschreibung etwas zu weit ausgeholt und das Wesentliche irgendwie nicht beschrieben. Das Zusatzmakro wird dann entsprechend einfach.
Sub Seriendruck()
If MsgBox("Seriendruck jetzt starten?", _
vbQuestion + vbOKCancel, "Seriendruck") = vbCancel Then Exit Sub
With Worksheets("Tabelle1") 'Blattname ggf. anpassen!
Do Until .Range("A2").Value = .Range("A1").Value
Call CopyDruck_Makro 'Makroname anpassen
.Range("A2").Calculate
Loop
End With
End Sub
Gruß
Franz
Betrifft: AW: Excel, Makro-Schleife mit Zählen
von: winni
Geschrieben am: 16.11.2014 18:01:24
so, endlich hat mich meine Frau wieder an den PC gelassen, und ich habe es ausprobiert. Hatte noch zum Anfang einen Gedankenfehler beim Kopiervorgang, aber jetzt klappt es WUNDERBAR !!!!!!!!!!!!
Recht recht herzlichen Dank. Das wird mir ab jetzt bei vielen Dingen sehr weiterhelfen !
Gut, dass es Euch, solche hilfsbereiten Menschen wie Du hier im Netz gibt !
Beiträge aus den Excel-Beispielen zum Thema "Excel, Makro-Schleife mit Zählen"