Kirk fragte, ob es eine Möglichkeit gibt, bedingt zu steuern, was in Excel gedruckt wird. Beispielsweise enthält Zelle A1 einen Wert, und der Wert steuert genau, was gedruckt wird. Wenn A1 1 enthält, wird möglicherweise Blatt1 gedruckt. Wenn es 2 enthält, werden Sheet1 und Sheet2 gedruckt.

Der einzige Weg, dies zu tun, ist mit einem Makro, und es gibt verschiedene Ansätze, die Sie verwenden können. Betrachten Sie das folgende sehr einfache Makro, das einfach eine Select Case-Struktur verwendet, um den Druck zu steuern.

Sub PrintStuff()

Dim vShts As Variant

vShts = Sheets(1).Range("A1")

If Not IsNumeric(vShts) Then         Exit Sub     Else         Select Case vShts             Case 1                 Sheets("Sheet1").PrintOut             Case 2                 Sheets("Sheet2").PrintOut             Case 3                 Sheets("Sheet1").PrintOut                 Sheets("Sheet2").PrintOut         End Select     End If End Sub

Führen Sie dieses Makro mit dem Wert 1, 2 oder 3 in Zelle A1 des ersten Blattes aus, und das Makro druckt basierend auf dem Wert verschiedene Dinge. Wenn der Wert 1 ist, wird Sheet1 gedruckt. Wenn es 2 ist, wird Sheet2 gedruckt. und wenn es 3 ist, werden sowohl Blatt1 als auch Blatt2 gedruckt. Wenn Sie möchten, dass unterschiedliche Werte unterschiedliche Elemente drucken, ändern Sie einfach die Struktur „Fall auswählen“, um die möglichen Werte und die für jeden Wert zu druckenden Werte wiederzugeben.

Es kann auch ein umfassenderer Ansatz erstellt werden. Erwägen Sie, Ihrer Arbeitsmappe ein „Kontrollblatt“ hinzuzufügen. Dieses Blatt enthält den Namen jedes Arbeitsblatts in der Arbeitsmappe, die in der ersten Spalte aufgeführt ist. Wenn Sie in der zweiten Spalte einen Wert rechts neben einem Arbeitsblattnamen einfügen, druckt ein Makro das entsprechende Arbeitsblatt.

Das folgende Makro kann verwendet werden, um das „Kontrollblatt“ zu erstellen.

Sub CreateControlSheet()

Dim i as integer

On Error Resume Next   'Delete this sheet if it already exists     Sheets("Control Sheet").Delete     On Error GoTo 0

Sheets.Add   'Add the WhatToPrint Sheet     ActiveSheet.Name = "Control Sheet"



Range("A1").Select   'Label the columns     ActiveCell.FormulaR1C1 = "Sheet Name"



Range("B1").Select     ActiveCell.FormulaR1C1 = "Print?"



Cells.Select     Selection.Columns.AutoFit

For i = 1 To ActiveWorkbook.Sheets.Count         Cells(i + 1, 1).Value = Sheets(i).Name     Next End Sub

Das Makro löscht zuerst alle alten Kontrollblätter, falls vorhanden. Anschließend wird ein neues Arbeitsblatt mit dem Namen „Kontrollblatt“ hinzugefügt und in den Spalten A und B Überschriftenbeschriftungen eingefügt. Anschließend werden alle Arbeitsblätter in der Arbeitsmappe in Spalte A aufgelistet.

Wenn das Kontrollblatt erstellt wurde, können Sie neben jedem Arbeitsblatt, das Sie drucken möchten, ein „X“ oder einen anderen Wert (z. B. „Y“ oder 1) in Spalte B einfügen. Das folgende Makro untersucht dann das Kontrollblatt und druckt jedes Arbeitsblatt, das eine Markierung hat – eine beliebige Markierung – in der Zelle in Spalte B.

Sub PrintSelectedSheets()

Dim i as Integer     i = 2

Do Until Sheets("Control Sheet").Cells(i, 1).Value = ""

If Trim(Sheets("Control Sheet").Cells(i, 2).Value <> "") Then             Sheets(Sheets("Control Sheet").Cells(i, 1).Value).Select             ActiveWindow.SelectedSheets.PrintOut Copies:=1         End If         i = i + 1     Loop End Sub

Ein anderer Ansatz besteht darin, ein Makro zu erstellen, das unmittelbar vor dem Drucken ausgeführt wird.

(Dies ist eines der Ereignisse – Drucken -, die Sie in Excel abfangen können.) Das folgende Makro, das dem thisWorkbook-Objekt hinzugefügt wurde, wird jedes Mal ausgeführt, wenn Sie versuchen, zu drucken oder Druckvorschau zu wählen.

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Dim vShts As Variant     Dim iResponse As Integer     Dim bPreview As Boolean

On Error GoTo ErrHandler

vShts = Sheets(1).Range("A1")

If Not IsNumeric(vShts) Then         GoTo InValidEntry     ElseIf vShts < 1 Or vShts > Sheets.Count Then         GoTo InValidEntry     Else         iResponse = MsgBox(prompt:="Do you want Print Preview?", _           Buttons:=vbYesNoCancel, Title:="Preview?")

Select Case iResponse             Case vbYes                 bPreview = True             Case vbNo                 bPreview = False             Case Else                Msgbox "Canceled at User request"

GoTo ExitHandler         End Select

Application.EnableEvents = False         Sheets(vShts).PrintOut Preview:=bPreview     End If

ExitHandler:

Application.EnableEvents = True     Cancel = True     Exit Sub

InValidEntry:

MsgBox "'" & Sheets(1).Name & "'!A1" _         & vbCrLf & "must have a number between " _         & "1 and " & Sheets.Count & vbCrLf     GoTo ExitHandler

ErrHandler:

MsgBox Err.Description     Resume ExitHandler End Sub

Das Makro überprüft den Wert in Zelle A1 des ersten Arbeitsblatts. Mit diesem Wert wird festgelegt, welche Arbeitsblätter gedruckt werden sollen. Mit anderen Worten, eine 1 druckt das erste Arbeitsblatt, eine 2 das zweite, eine 3 das dritte und so weiter.

Wenn der Wert in A1 kein Wert ist oder kleiner als 1 oder größer als die Anzahl der Arbeitsblätter in der Arbeitsmappe ist, wird der Benutzer darüber informiert, dass der Wert falsch ist, und das Makro wird beendet.

Angenommen, der Wert in A1 liegt innerhalb des Bereichs, fragt das Makro, ob Sie die Seitenansicht verwenden möchten. Abhängig von der Antwort des Benutzers druckt das Makro das angegebene Arbeitsblatt oder zeigt die Seitenansicht für dieses Arbeitsblatt an.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (2372) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: