Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

MsgBox und Cancel = True | Herbers Excel-Forum


Betrifft: MsgBox und Cancel = True von: Kirsche
Geschrieben am: 23.11.2009 21:59:24

hallo leute,

wie solls auch anders sein, ich hab da mal ein problem ;-)

in einer UF habe ich viele viele textboxen und frames ....
bei der großen menge habe ich die prüfungen in blöcke aufgeteilt und spreche diese
bei click auf den Commandbutton mit call mein makro an.

Call Allge_Click
Call Verpa_Click
Call Naehrw_Berech
Call Allerg_Click

in den makros sind MsgBoxen, die einen Hinweis geben, was nicht abgearbeitet wurde.
if Textbox1 = "" then
msgbox "hinweis"
exit sub
end if
der hinweis wird auch angezeigt, aber das exit sub wird nur für das eine makro akzeptiert, dann läuft der code im commandbutton weiter.

ich habe auch schon ein Cancel = True eingefügt, aber das wird im Private Sub nicht erkannt.

wie kann ich aus dem makro aussteigen?
wenn Call Allge_Click mit ExitSub beendet wird, dann soll der rest im commandbutton nicht weiter verarbeitet werden.

gruß dörte

  

Betrifft: End von: {Boris}
Geschrieben am: 23.11.2009 22:12:21

Hi Dörte,

nutze die End-Anweisung - die beendet alle Makros.

Grüße Boris


  

Betrifft: AW: @ Boris von: Gerd L
Geschrieben am: 23.11.2009 22:17:14

Guten Abend,

das gesamte Projekt "geht dann nach Hause".
Dies ist nur sehr selten beabsichtigt.

Gruß Gerd


  

Betrifft: AW: @ Boris von: Kirsche
Geschrieben am: 23.11.2009 22:28:10

hallo boris, hallo gerd,

ich gebe gerd vollkommen recht. das kannte ich schon und hab es raus genommen. aber trotzdem danke.

gruß dörte


  

Betrifft: AW: @ Boris von: Kirsche
Geschrieben am: 23.11.2009 22:30:36

ich bekomme es noch hin mit dem Frage noch offen
ist wohl schon zu spät für mich.
gruß dörte


  

Betrifft: AW: MsgBox und Cancel = True von: Gerd L
Geschrieben am: 23.11.2009 22:13:29

Hallo Dörte,

mit Funktionen u. Rückgabewerten vom Typ Boolean, kannst Du im Hauptmakro nach jedem
Call-Aufruf prüfen, z.B.
If blnAufhoeren= true Then Exsit Sub


  

Betrifft: AW: MsgBox und Cancel = True von: Kirsche
Geschrieben am: 23.11.2009 22:26:15

hallo gerd,

wie und wo muß ich das dann deklarieren?

ich habe es so versucht:

Option Explicit
Public blnMachNix As Boolean
und bei Commandbutton_click()
Call Verpa_Click
     If blnMachNix = True Then Exit Sub


aber das hat nicht geklappt.

gruß dörte


  

Betrifft: AW: MsgBox und Cancel = True von: fcs
Geschrieben am: 23.11.2009 22:32:02

Hallo Dörte,

Du muss am Anfang des Codes im Userformmodul eine Variable für das gesamte Userform-Modul deklarieren.
Diese Variable setzt du vor dem Aufruf der 4 Prozeduren auf True. Ist eine Eingabe unvollständig, dann wird die Variable auf False gesetzt und die Prüfung abgebrochen.
In der aufrufenden Prozedur prüfst du dann jeweils den Wert der Variablen.

Alternativ könnte man evtl. auch mit Functions statt Subs arbeiten. Dann kann man beim Abbruch der Prozedur einen entsprechenden Fehlerwert zur Prüfung an die aufrufende Prozedur übergeben und die Prozedur gesteuert beenden. Dafür ist in deinem Fall der Aufwand etwas groß die Prozeduren entsprechend umzustricken.

Gruß
Franz

'Variablendeklaration - am Anfang der Userform-Codes
Private bolEingabe As Boolean

Sub CommandButtonABC_Click()
bolEingabe = True
Call Allge_Click
If bolEingabe = False Then GoTo Ende
Call Verpa_Click
If bolEingabe = False Then GoTo Ende
Call Naehrw_Berech
If bolEingabe = False Then GoTo Ende
Call Allerg_Click
If bolEingabe = False Then GoTo Ende

Ende:
End Sub

Private Sub Allge_Click()
  If Textbox1 = "" Then
    MsgBox "hinweis"
    bolEingabe = False
    Exit Sub
  End If
End Sub




  

Betrifft: AW: MsgBox und Cancel = True von: Kirsche
Geschrieben am: 23.11.2009 22:39:17

hallo franz,

strike, das hat gefunzt und ich hab wieder was dazu gelernt, voll freu hier.
danke für deine hilfe, mein abend ist dadurch gerettet.

auch den übrigen helfern möchte ich hier an dieser stelle ein großes lob aussprechen.
es macht immer wieder spaß, da eine schnelle hilfe promt herbei eilt.

ich wünsche allen eine gute nacht.
gruß dörte


  

Betrifft: AW: MsgBox und Cancel = True von: Gerd L
Geschrieben am: 23.11.2009 22:45:52

Hallo Dörte,

je nachdem; mit Public - wie von Franz dargestellt - ist 's einfacher.

Sub Starter_egal()


If Not Allge_Click Then Exit Sub
If Not Verpa_Click Then Exit Sub
If Not Call_Naehrw_Berech Then Exit Sub
Call Allerg_Click

End Sub
Function Allge_Click() As Boolean

If TB = "" Then
MsgBox "TB fehlt!"
Else
TB = True
MsgBox "Mach noch etwas!"
End If

End Function
Gruß Gerd


  

Betrifft: AW: MsgBox und Cancel = True von: Kirsche
Geschrieben am: 23.11.2009 22:51:30

hallo gerd,

ich hab das von franz auch schon umgesetzt.
mit funktionen habe ich noch nicht so gearbeitet, höchstens kopiert und dann nicht unbedingt verstanden.

eine frage hätte ich da noch:
worin liegt der unterschied?

franz schrieb

go to ende
und bei dir lautet es
exit sub
ist das egal, wie man beendet?

gruß dörte


  

Betrifft: AW: MsgBox und Cancel = True von: Gerd L
Geschrieben am: 23.11.2009 23:03:34

Hallo Dörte,

Exit Sub hat den selben Effekt wie eine Sprungmarke, die ganz am Ende der Prozedur steht.

Mit GoTo könntest Du z.B. die Sprungmarke auch vor den letzten oder vorletzten "Call" setzen
oder danach noch "Kosmetik" betreiben wie "Application.EnableEvents=True, falls Du diese vorher
abgestellt hättest.

Gruß Gerd


  

Betrifft: AW: MsgBox und Cancel = True von: kirsche
Geschrieben am: 24.11.2009 13:19:44

hallo gerd,

danke für die super erklärung. das hilft mir um meilen weiter. denn ich habe des öfteren abstürze, welche ich nicht verstanden habe, aber das kann daran liegen, dass einige sachen durch exit sub nicht sauber beendet wurden. das werd ich gleich mal prüfen.

gruß dörte


Beiträge aus den Excel-Beispielen zum Thema "MsgBox und Cancel = True"