Bedingter Druck (Microsoft Excel)
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: