Villkorlig Utskrift

October 9

Kirk frågade om det finns ett sätt att villkor kontrollera vad som skrivs ut i Excel. Till exempel, cell A1 innehåller ett värde, och värdet styr exakt vad som skrivs ut. Kanske om A1 innehåller 1, sedan Blad1 skrivs; om den innehåller två, då tabellerna 1 och 2 är tryckta.

Det enda sättet att göra detta är med ett makro, och det finns flera metoder som du kan använda. Tänk dig följande mycket enkla makro, som helt enkelt använder en Select Case struktur för att styra utskriften.

Sub PrintStuff ()
Dim vShts As Variant

vShts = Sheets (1) .Range ("A1")
Om inte IsNumeric (vShts) Då
Exit Sub
Else
Välj Case vShts
Fall 1
Sheets ("Blad1"). Utskrift
Fall 2
Sheets ("Blad2"). Utskrift
Fall 3
Sheets ("Blad1"). Utskrift
Sheets ("Blad2"). Utskrift
End Select
End If
End Sub

Kör den här makrot med värdet 1, 2, eller 3 i cell A1 i det första arket, och makro utskrifter olika saker baserat på värdet. Om värdet är 1, då Blad1 skrivs; om det är 2, då Sheet2 skrivs; och om det är 3, då tabellerna 1 och 2 skrivs. Om du vill ha olika värden för att skriva ut olika saker, bara modifiera Välj Case strukturen för att återspegla de möjliga värden och vad som ska skrivas för varje värde.

Kan skapas en mer övergripande strategi, liksom. Överväg att lägga en "kontrollblad" till arbetsboken. Detta blad skulle ha namnet på varje kalkylblad i arbetsboken som anges i den första kolumnen. Om du sätter ett värde till höger om ett kalkylblad namn, i den andra kolumnen, då ett makro skriver ut motsvarande kalkylbladet.

Följande makrot kan användas för att skapa den "kontrollbladet."

Sub CreateControlSheet ()
Dim i As Integer

On Error Resume Next 'Radera detta blad om den redan finns
Sheets ("Styr Sheet"). Delete
On Error GoTo 0

Sheets.Add 'Lägg till WhatToPrint Sheet
ActiveSheet.Name = "Kontrollblad"

Range ("A1"). Välj "Märk kolumnerna
ActiveCell.FormulaR1C1 = "Sheet Name"

Range ("B1"). Välj
ActiveCell.FormulaR1C1 = "Skriv ut?"

Cells.Select
Selection.Columns.AutoFit

För i = 1 Till ActiveWorkbook.Sheets.Count
Celler (i + 1, 1) .Value = Sheets (i) .name
Nästa
End Sub

Makrot först raderar några gamla kontrollblad, om den finns. Den lägger sedan ett nytt kalkylblad med namnet Kontrollblad, och sätter rubriker etiketter i kolumnerna A och B. Den listar sedan alla kalkylblad i arbetsboken i kolumn A.

Med skapade kontrollbladet, kan du sedan placera ett "X" eller något annat värde (till exempel "Y" eller 1) i kolumn B bredvid varje kalkylblad som du vill skriva ut. Följande makrot sedan undersöker styrbladet och skriver varje kalkylblad som har ett pålägg varje påslag i cellen i kolumn B.

Sub PrintSelectedSheets ()
Dim i As Integer
i = 2

Gör Tills Sheets ("Kontroll Sheet"). Cells (i, 1) .Value = ""
Om Trim (Sheets ("Kontrollblad"). Cells (i, 2) .Value <> "") Då
Lakan (Sheets ("Styr Sheet"). Cells (i, 1) .Value) .Select
ActiveWindow.SelectedSheets.PrintOut Kopior: = 1
End If
i = i + 1
Loop
End Sub

Ett annat tillvägagångssätt är att skapa ett makro som körs strax före utskrift. (Detta är en av de händelser-utskrift-att Excel gör att du kan fånga.) Följande makro, läggas till thisWorkbook objektet körs varje gång du försöker skriva ut eller välj Förhandsgranska.

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")
Om inte IsNumeric (vShts) Då
GoTo InValidEntry
ElseIf vShts <1 Eller vShts> Sheets.Count Sedan
GoTo InValidEntry
Else
iResponse = MsgBox (prompten: = "? Vill du Print Preview", _
Knappar: = vbYesNoCancel, Titel: "? Preview" =)
Välj ärende iResponse
Case vbYes
bPreview = True
Case vbNo
bPreview = False
Case Else
MsgBox "Avbruten på Användar begäran"
GoTo ExitHandler
End Select

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

ExitHandler:
Application.EnableEvents = True
Cancel = Sant
Exit Sub

InValidEntry:
MsgBox "'" & Sheets (1) .name & "'! A1" _
& VbCrLf & "måste ha ett nummer mellan" _
& "1 och" & Sheets.Count & vbCrLf
GoTo ExitHandler

ErrHandler:
MsgBox Err.Description
Resume ExitHandler
End Sub

Makrot kontrollerar värdet i cell A1 i det första kalkylbladet. Den använder detta värde för att avgöra vilka kalkylblad ska skrivas. Med andra ord, en 1 skriver ut de första kalkylblad, en 2 skriver ut den andra, en 3 utskrifter den tredje, och så vidare.

Om värdet i A1 är inte ett värde eller om det är mindre än 1 eller större än antalet kalkylblad i arbetsboken, då användaren informeras om att värdet är felaktigt och makrot avslutas.

Förutsatt att värdet i A1 är inom räckhåll, makrot frågar om du vill att använda Förhandsgranska. Beroende på användarens svar, makro skriver den angivna kalkylblad eller visar Print Preview för det kalkylblad.

ExcelTips är din källa för kostnadseffektiv Microsoft Excel utbildning. Detta tips (2372) gäller för Microsoft Excel 97, 2000, 2002, och 2003. Du kan hitta en version av detta tips för menyfliksområdet i Excel (Excel 2007 och senare) här: Villkorlig utskrift.