PDA

Vollständige Version anzeigen : MsgBox mit doppelter abfrage


texasmatze
03.05.2009, 12:16
Mahlzeit,

ich hab mal wieder eine Frage zu meiner Stundenabrechnung:

Die Stundenabrechnung wird per VBA an den Drucker gesendet. Jetzt hab ich noch ein zusätzliches Blatt, welches mitgedruckt werden soll.

Wie bekomme ich folgenden Abfrage hin?

MsgBox Frage: Zusatzblatt drucken ja/nein?
wenn nein, Exit, wenn ja, Blatt drucken
Wenn Blatt gedruckt, MsgBox Prämienformular drucken ja/nein?
wenn nein, Exit, wenn ja, Blatt drucken

Mein Code sieht zur Zeit so aus:

Private Sub Zusatzblatt_Click()
Select Case MsgBox("Zusatzblatt drucken?", vbYesNo Or vbQuestion Or vbDefaultButton1, "Hinweis")
Case vbYes
ActiveSheet.Unprotect Password:="00fa24b34d"
ActiveSheet.Range("AG24:AG73").Locked = False
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.3)
.RightMargin = Application.InchesToPoints(0.3)
.TopMargin = Application.InchesToPoints(0.3)
.BottomMargin = Application.InchesToPoints(0.3)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.CenterFooter = "Unterschrift: _______________________________"
.CenterHorizontally = True
.CenterVertically = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.Orientation = xlPortrait
.PaperSize = xlPaperA4
End With
ActiveSheet.Gesundheit.PrintObject = False
ActiveSheet.Aufgaben.PrintObject = False
ActiveSheet.Umsatz.PrintObject = False
ActiveSheet.PKI.PrintObject = False
Range("A10:L80").EntireRow.Hidden = True
ActiveSheet.PageSetup.PrintArea = "$B$1:$L$118"
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Range("A10:L80").EntireRow.Hidden = False
ActiveSheet.Gesundheit.PrintObject = True
ActiveSheet.Aufgaben.PrintObject = True
ActiveSheet.Umsatz.PrintObject = True
ActiveSheet.PKI.PrintObject = True
Dim protect
With ActiveSheet
.protect Userinterfaceonly:=True, Password:="00fa24b34d"
End With

Case MsgBox("Prämienformular drucken?", vbYesNo Or vbQuestion Or vbDefaultButton1, "Frage")
Case vbYes
With ThisWorkbook.Sheets(14).PageSetup
.LeftMargin = Application.InchesToPoints(0.3)
.RightMargin = Application.InchesToPoints(0.3)
.TopMargin = Application.InchesToPoints(0.3)
.BottomMargin = Application.InchesToPoints(0.3)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.CenterFooter = "Unterschrift: _______________________________"
.CenterHorizontally = True
.CenterVertically = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.Orientation = xlPortrait
.PaperSize = xlPaperA4
End With
ThisWorkbook.Sheets(14).PageSetup.PrintArea = "$A$2:$G$46"
ThisWorkbook.Sheets(14).SelectedSheets.PrintOut Copies:=1
Case vbNo


Case vbNo
Exit Sub
End Select
End Sub

Hier druckt er nur die erste Seite und rührt die 2. Abfrage gar nicht an, hab aber grad ferstgestellt dass wenn ich in der Abfrage auf nein klicke, dass er dann mich nach dem Prämienblatt fragt ...

bin leicth konfus grad, die Abfrage ist doch aber über den vbNo oder hab ich da einen Denkfehler?

jinx
03.05.2009, 12:41
Moin, texasmatze,

Select Case wertet meines Wissens vorhandene Werte aus, nicht neu hinzukommende. Vorschlag: zweite Select Case Anweisung im Anschluß an die erste, die ggf. durch Exit Sub oder Übergabe einer booleschen Variable verlassen wird...

texasmatze
04.05.2009, 21:55
Hm, nach verschiedenen rumprobieren, was alles nicht wirklich funktioniert hat, hab ich mich dazu entscheiden, die 2. Abfrage wegzulassen und das Blatt direkt mitzudrucken.

Da ist auch schon das 2. Problem. Da das Formular jeden Monat das selbe ist, hab ich das im Tabellenblatt 14, welches ich ausgeblendet habe.

Wie bekomme ich das hin, dass der Code trotzdem druckt?

With ThisWorkbook.Sheets(14).PageSetup
.LeftMargin = Application.InchesToPoints(0.3)
.RightMargin = Application.InchesToPoints(0.3)
.TopMargin = Application.InchesToPoints(0.3)
.BottomMargin = Application.InchesToPoints(0.3)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.CenterFooter = "Unterschrift: _______________________________"
.CenterHorizontally = True
.CenterVertically = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.Orientation = xlPortrait
.PaperSize = xlPaperA4
End With
Sheets("Praemie").Activate
ActiveSheet.PageSetup.PrintArea = "$A$2:$G$46"
ActiveWindow.SelectedSheets.PrintOut Copies:=1

Dim protect
With ActiveSheet
.protect Userinterfaceonly:=True, Password:="passworthier"
End With



Das funktioniert, solange das Blatt eingeblendet ist, aber sobald es ausgeblendet ist, ruft der Code den Dezember auf und macht nix...

Hier die Frage: Mit EntireRow.Hidden = True kann ich Zellbereiche zwecks Druck ein und ausblenden, aber wie geht das bei ganzen Tabellenblättern?

jinx
05.05.2009, 04:54
Moin, texasmatze,

die erste Frage beantowrtet sich doch von selbst - Du arbeitest mit dem Activate-Befehl, der für eine ausgeblendete Tabelle nicht funktioniert. Auch der Druckbefehl setzt zwingend voraus, dass die Tabelle eingeblendet und aktiv ist. Also die Tabelle für das Drucken einblenden, ausdrucken, dann wieder ausblenden.

Sheets("Tabelle2").Visible = xlSheetHidden
Einblenden der Tabelle über das Menü Format/Blatt/Einblenden möglich
Sheets("Tabelle2").Visible = xlSheetVeryHidden
Einblenden nur über die VBE und das Eigenschaftenfenster bzw. per VBA möglich
Sheets("Tabelle2").Visible = xlSheetVisible
Einblenden der Tabelle für beide Fälle

texasmatze
05.05.2009, 15:57
So funktionierts... *BrettvormKopfhab*

mit Sheets("Tabelle2").Visible = true das ganze vorher einblenden und mit false danach wieder ausblenden...

Danke
Nächste Frage kommt bestimmt ;)