Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

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"