Microsoft Excel

Herbers Excel/VBA-Archiv

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

Drucken

Betrifft: Drucken von: AL
Geschrieben am: 05.11.2020 16:16:08

Hallo zusammen,

kann man den unteren Code wie folgt ändern: Es sollen beliebig viele (kopierte) Tabellenblätter, die den Namen FWK_VSA haben, erkannt und zusammen gedruckt werden. In dem Code müsste ich beispielsweise schon vorher wissen wie viele Tabellenblätter diesen Namen haben. Wenn ich nun eine fünfte Kopie des Tabellenblattes (FWK_VSA (5)) hätte, würde der Code das nicht mit drucken.

Sub FWKVSADRUCK()

    Dim ArrDruck() As String, varItem, k As Integer, strAktiv As String
    Dim ArrVorauswahl As Variant
       
    On Error GoTo Fehler
       
    ArrVorauswahl = Split("FWK_VSA,FWK_VSA (2),FWK_VSA (3),FWK_VSA (4)", ",")
   
    strAktiv = ActiveSheet.Name
    
    For Each varItem In ArrVorauswahl
        With ActiveWorkbook.Sheets(varItem)
            If .Visible = xlSheetVisible Then
                k = k + 1
                ReDim Preserve ArrDruck(1 To k)
                ArrDruck(k) = .Name
            End If
        End With
weiter:
    Next
    
    If k > 0 Then
        Application.ScreenUpdating = False
        Sheets(ArrDruck).Select
        Application.Dialogs(xlDialogPrint).Show
        Application.ScreenUpdating = True
    Else
        MsgBox "Es gibt keine zu druckenden Bl_tter"
    End If
    
    
Fehler:
    With Err
        Select Case .Number
            Case 0 'Alles OK
            Case 9 'Indexfehler
                Resume weiter
            Case Else
                MsgBox "Fehler-Nr,: " & .nummer & vbLf & .Description
        End Select
    
    End With
    ActiveWorkbook.Sheets(strAktiv).Select

End Sub

Betrifft: AW: Drucken
von: Nepumuk
Geschrieben am: 05.11.2020 18:05:29

Hallo Al,

teste mal:

Option Explicit

Public Sub FWKVSADRUCK()
    
    Const PRESELCT_NAME As String = "FWK_VSA"
    
    Dim objWorksheet As Worksheet
    
    If Application.Dialogs(xlDialogPrinterSetup).Show Then
        
        For Each objWorksheet In ThisWorkbook.Worksheets
            
            If Left$(objWorksheet.Name, Len(PRESELCT_NAME)) = PRESELCT_NAME Then objWorksheet.PrintOut
            
        Next
    End If
End Sub

Gruß
Nepumuk

Betrifft: @Nepumuk_AW: Drucken
von: AL
Geschrieben am: 06.11.2020 09:24:29

Hallo Nepumuk,

besten Dank für die schnelle Antwort.

Ich habe deinen Code getestet und es hat folgendes gezeigt: Der Druck wird zwar ausgeführt, aber es kommt ein Laufzeitfehler '1004!: Die Methode 'PrintOut' für das Objekt'_Worksheet' ist fehlgeschlagen. Ferner werden die einzelnen Tabellenblätter mit der Bezeichnung FWK_VSA nicht zusammengefasst, wenn man beispielsweise eine PDF erzeugen möchte.

Gruß
AL

Betrifft: @Nepumuk_AW: Drucken
von: Nepumuk
Geschrieben am: 06.11.2020 09:32:32

Hallo Al,

dann so:

Public Sub FWKVSADRUCK()
    
    Const PRESELCT_NAME As String = "FWK_VSA"
    
    Dim objWorksheet As Worksheet
    Dim blnSelect As Boolean
    
    If Application.Dialogs(xlDialogPrinterSetup).Show Then
        
        For Each objWorksheet In ThisWorkbook.Worksheets
            
            If Left$(objWorksheet.Name, Len(PRESELCT_NAME)) = PRESELCT_NAME Then
                
                If Not blnSelect Then
                    Call objWorksheet.Select
                    blnSelect = True
                Else
                    Call objWorksheet.Select(Replace:=False)
                End If
            End If
        Next
    End If
    ThisWorkbook.Windows(1).SelectedSheets.PrintOut
End Sub

Gruß
Nepumuk

Beiträge aus dem Excel-Forum zum Thema "Drucken"