Inputbox "Abbrechen"-Button verarbeiten
#1
Hallo,

ich habe hier eine kleine Routine, wo das aktuelle ausgewählte Tabellenblatt auf einem auszuwählenden Drucker in einer einzustellenden Anzahl ausgedruckt werden kann/soll:

Code:
Private Sub CommandButton2_Click()
    If Application.Dialogs(xlDialogPrinterSetup).Show = False Then Exit Sub
    Anzahl = InputBox("Wieviele Exemplare?", "Druckauftrag", 1)
    ActiveWindow.SelectedSheets.PrintOut Copies:=Anzahl
End Sub


Der "Abbrechen"-Button bei der Druckerauswahl funktioniert und beendet die Sub. Wenn aber bei der Inputbox der "Abbrechen"-Button benutzt wird, stürzt der Code ab.
Wie und mit welcher Zeile kann ich diesen Vorgang abfangen bzw. behandeln - mit der Suche (auch im Internet) habe ich nichts gefunden, außer dass die Inputbox dann  False zurückgibt. Wie und wo kann ich das in diesem Code verwenden?
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#2
Probiers mal damit, Je nachdem ob generell eine Kopie gedruckt werden soll oder nicht.

if not isNumeric(Anzahl) then Anzahl = 1 
oder  if not isNumeric(Anzahl) then exit sub


ActiveWindow.SelectedSheets.PrintOut Copies:=Anzahl
Antworten Top
#3
Hallo Ralf,

geht leider nicht - Excel malt die Zeile "Anzahl = InputBox("Wieviele Exemplare?", "Druckauftrag", 1)" gelb an und bringt die Fehlermeldung 13, Typen unverträglich!

Man muss doch irgendwie den Abbrechen-Button auswerten können .....
Hoffe auf weitere Vorschläge bzw. Lösungen!
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#4
Hallo,

beim Abbrechen wird ein "false" geliefert! Du musst die Variable als variant deklarieren und prüfen, ob ein Wahrheitswert, Text od. numerischer Wert vorliegt.

Grüße Sigi
Antworten Top
#5
Hallo, 19 

probiere es mal so (getestet): 21

Code:
Option Explicit
Private Sub CommandButton2_Click()
    Dim Anzahl As String
    If Application.Dialogs(xlDialogPrinterSetup).Show = False Then Exit Sub
    Anzahl = InputBox("Wieviele Exemplare?", "Druckauftrag", 1)
    If StrPtr(Anzahl) = 0 Then
        MsgBox "Das war Abbrechen"
    ElseIf Anzahl = "" Then
        MsgBox "Das war OK, aber keine Eingabe"
    Else
        ActiveWindow.SelectedSheets.PrintOut Copies:=Anzahl
    End If
End Sub

Die MsgBoxen kannst du natürlich auch rausnehmen. Dodgy
Antworten Top
#6
Hallo,

vielen Dank an alle Helfer! Mit Eurer Hilfe konnte ich das Problem lösen - der Code sieht jetzt so aus und funktioniert wie er soll:

Code:
Private Sub CommandButton2_Click()
    Dim Anzahl as Variant
    If Application.Dialogs(xlDialogPrinterSetup).Show = False Then Exit Sub
    Anzahl = InputBox("Wieviele Exemplare?", "Druckauftrag", 1)
    If Anzahl = Empty Then Exit Sub
    ActiveWindow.SelectedSheets.PrintOut Copies:=Val(Anzahl)
End Sub

Jetzt kann ich beruhigt mein Feierabendbier genießen .... 97 97 97
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#7
Moin!

Zitat:wo das aktuelle ausgewählte Tabellenblatt … ausgedruckt werden kann/soll


1. Das aktuelle Blatt ist ActiveSheet, ActiveWindow.SelectedSheets geht zwar auch, wird aber nur bei einer Gruppierung benötigt.
(Rekorder-Code?)

2. Wenn ich eine Zahl übergeben will, dann nehme ich nicht die InputBox-Funktion, sondern die Application.InputBox-Methode mit Type:=1.
Damit ist sicher gestellt, dass nur eine Zahl oder False übergeben werden kann.

3. Da jede Zahl außer 0 in VBA True ist, kann man dies einfach so regeln:
Code:
Sub Test()
Dim Anzahl As Long
Anzahl = Application.InputBox("Wieviele Exemplare?", "Druckauftrag", 1, Type:=1)
If Anzahl Then
  ActiveSheet.PrintOut Copies:=Anzahl
Else
  MsgBox "Abbruch oder 0 eingegeben!"
End If
End Sub

4. Wie man sieht, ist Exit Sub meist überflüssig.
Man könnte oben einfach den Else-Zweig weg lassen.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#8
Hallo Günter,

warum nicht einfach so?

Code:
Private Sub CommandButton2_Click()
    Application.Dialogs(xlDialogPrint).Show
End Sub

Gruß Uwe
Antworten Top
#9
Noch einfacher wäre natürlich Strg+p
Aber wer will sich schon mit so etwas profanem wie einer Benutzer-Oberfläche aka GUI auseinander setzen?
Etwas selbst "programmiertes" gibt schließlich viel mehr her!
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#10
Dieser Code reicht:

Code:
Private Sub CommandButton2_Click()
  y = Val(InputBox("Wieviele Exemplare?", "Druckauftrag", 1))
  If y Then If Application.Dialogs(9).Show Then Activesheet.PrintOut , , y
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste