Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1556to1560
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Commandbutton im Userform deaktivieren

Commandbutton im Userform deaktivieren
07.05.2017 00:08:32
Lisa
Hallo,
bin Neuling in Sachen VBA und komme leider auf keine funktionierende Lösung für folgendes Problem:
In meinem Userform befinden sich 3 Comboboxen und 3 Textfelder. Erst, wenn in jeder Combobox eine Auswahl getroffen, und in jedem Textfeld etwas eingegeben wurde, soll der Commandbutton für die Eingabe aktiviert werden.
Kann den cmd zwar über diverse Möglichkeiten deaktivieren, aber ich schaffe es nicht dass er nach dem Ausfüllen von allen Felder wieder aktiv wird.
Habe auch schon diverse Foren danach durchsucht, aber nichts gefunden.
Vielen Dank vorab für Eure Hilfe!

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Commandbutton im Userform deaktivieren
07.05.2017 02:15:58
fcs
Hallo Lisa,
du musst im Userform-Code eine Prüf-Prozedur einbauen, die alle Steuerelemente prüft und bei Wertänderung (Comboboxen) oder Verlassen (Textboxen) der Steuerelemente gestartet wird.
Alternative: Die Prüfung der Eingaben wird nur bei Klick auf die Schaltfläche ausgeführt und eine Meldung bei fehlenden Eingaben angezeigt. Borteil: Du muust nicht für jedes Steuerelement eine Ereignisprozedur einfügen.
LG
Franz

'Userform-Code
Private Function fncCheckEingaben() As Boolean
Dim bolEnable As Boolean
bolEnable = True
If Me.ComboBox1.ListIndex = -1 Then bolEnable = False
If Me.ComboBox2.ListIndex = -1 Then bolEnable = False
If Me.ComboBox3.ListIndex = -1 Then bolEnable = False
If Me.TextBox1 = "" Then bolEnable = False
If Me.TextBox2 = "" Then bolEnable = False
If Me.TextBox3 = "" Then bolEnable = False
fncCheckEingaben = bolEnable
End Function
Private Sub ComboBox1_Change()
Me.CommandButton1.Enabled = fncCheckEingaben
End Sub
Private Sub ComboBox2_Change()
Me.CommandButton1.Enabled = fncCheckEingaben
End Sub
Private Sub ComboBox3_Change()
Me.CommandButton1.Enabled = fncCheckEingaben
End Sub
Private Sub CommandButton1_Click()
MsgBox "Alle Eingaben sind vollständig", vbOKOnly, "Eingaben geprüft" 'Test-Zeile
'Userform-Eingaben weiter verarbeiten
Me.Hide
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Me.CommandButton1.Enabled = fncCheckEingaben
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Me.CommandButton1.Enabled = fncCheckEingaben
End Sub
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Me.CommandButton1.Enabled = fncCheckEingaben
End Sub
Private Sub UserForm_Activate()
Me.CommandButton1.Enabled = fncCheckEingaben
End Sub
Alternative: Prüfung der Eingaben nach Klick auf die Schaltfläche
'Userform-Code
Private Function fncCheckEingaben() As Boolean
Dim bolEnable As Boolean
bolEnable = True
If Me.ComboBox1.ListIndex = -1 Then bolEnable = False
If Me.ComboBox2.ListIndex = -1 Then bolEnable = False
If Me.ComboBox3.ListIndex = -1 Then bolEnable = False
If Me.TextBox1 = "" Then bolEnable = False
If Me.TextBox2 = "" Then bolEnable = False
If Me.TextBox3 = "" Then bolEnable = False
fncCheckEingaben = bolEnable
End Function
Private Sub CommandButton1_Click()
'Beispiel für Prüfung der Eingaben nach Klick auf Schaltfläche
If fncCheckEingaben = False Then
MsgBox "Die Eingaben im Userform sind nicht vollständig", vbOKOnly, "Prüfung-Eingaben"
Else
'Userform-Eingaben weiter verarbeiten
Me.Hide
End If
End Sub

Anzeige
AW: Commandbutton im Userform deaktivieren
07.05.2017 21:10:24
Lisa
Hallo Franz,
vielen Dank für deine rasche Hilfe! Habe mal Variante zwei ausprobiert, allerdings reagiert nun mein Userform überhaupt nicht mehr sobald ich es aufrufen möchte:
Private Sub cmdAbbruch_Click()
'Schließt das Formular frmBestaende
Unload frmBestaende
End Sub
Private Sub cmdEingabe_Click()
'Beispiel für Prüfung der Eingaben nach Klick auf Schaltfläche
If fncCheckEingaben = False Then
MsgBox "Die Eingaben im Userform sind nicht vollständig", vbOKOnly, "Prüfung-Eingaben"
Else
'Fügt die eingetragenen Werte ins Tabellenblatt und schließt das Formular frmBestaende
Dim intErsteLeereZeile As Long
intErsteLeereZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
ActiveSheet.Cells(intErsteLeereZeile, 1).Value = Me.cboBaumart.Value
ActiveSheet.Cells(intErsteLeereZeile, 2).Value = Me.cboMisch.Value
ActiveSheet.Cells(intErsteLeereZeile, 3).Value = Me.txtHa.Value
ActiveSheet.Cells(intErsteLeereZeile, 4).Value = Me.cboZ.Value
ActiveSheet.Cells(intErsteLeereZeile, 5).Value = Me.txtOst.Value
ActiveSheet.Cells(intErsteLeereZeile, 6).Value = Me.txtNord.Value
'Hinweis alle Felder müssen ausgefüllt werden
If cboBaumart.Value = "" Then
Call MsgBox("Es muss eine Auswahl getroffen werden!", vbExclamation, "Auswahlfeld  _
ist Leer!")
cboBaumart.SetFocus
Exit Sub
Else
If cboMisch.Value = "" Then
Call MsgBox("Es muss eine Auswahl getroffen werden!", vbExclamation, "Auswahlfeld  _
ist Leer!")
cboMisch.SetFocus
Exit Sub
Else
If txtHa.Value = "" Then
Call MsgBox("Es muss die Bestandesgröße angegeben werden!", vbExclamation, " _
Textfeld ist Leer!")
txtHa.SetFocus
Exit Sub
Else
If cboZ.Value = "" Then
Call MsgBox("Es muss eine Auswahl getroffen werden!", vbExclamation, "Auswahlfeld  _
ist Leer!")
cboZ.SetFocus
Exit Sub
Else
If txtOst.Value = "" Then
Call MsgBox("Es muss der Ostwert angegeben werden!", vbExclamation, "Textfeld ist  _
Leer!")
txtOst.SetFocus
Exit Sub
Else
If txtNord.Value = "" Then
Call MsgBox("Es muss der Nordwert angegeben werden!", vbExclamation, "Textfeld ist  _
Leer!")
txtNord.SetFocus
Exit Sub
End If
End If
End If
End If
End If
End If
Unload frmBestaende
Me.Hide
End If
End Sub
Private Sub txtHa_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Nur Zahlen 0-9 und , können eingegeben werden
If KeyAscii = 44 Then
ElseIf KeyAscii  57 Then KeyAscii = 0
End If
End Sub
Private Sub txtNord_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Nur Zahlen 0-9 können eingegeben werden
Select Case KeyAscii
Case 48 To 57
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub txtOst_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Nur Zahlen 0-9 können eingegeben werden
Select Case KeyAscii
Case 48 To 57
Case Else
KeyAscii = 0
End Select
End Sub
Private Function fncCheckEingaben() As Boolean
Dim bolEnable As Boolean
bolEnable = True
If Me.cboBaumart.ListIndex = -1 Then bolEnable = False
If Me.cboMisch.ListIndex = -1 Then bolEnable = False
If Me.cboZ.ListIndex = -1 Then bolEnable = False
If Me.txtHa = "" Then bolEnable = False
If Me.txtOst = "" Then bolEnable = False
If Me.txtNord = "" Then bolEnable = False
fncCheckEingaben = bolEnable
End Function
Private Sub UserForm_Initialize()
'Formular initialisieren
'Auswahlmöglichkeiten cboBaumart
With cboBaumart
.AddItem "Schwarznuss"
.AddItem "Walnuss"
End With
'Auswahlmöglichkeiten cboMisch
With cboMisch
.AddItem "vereinzelt (bis 10%)"
.AddItem "beigemischt (10-40%)"
.AddItem "gemischt (+/- 50%)"
.AddItem "Reinbestand (>90%)"
End With
'Auswahlmöglichkeiten cboZ
With cboZ
.AddItem "32 U"
.AddItem "33 U"
End With
End Sub

Anzeige
AW: Commandbutton im Userform deaktivieren
08.05.2017 00:07:17
fcs
Hallo Lisa,
du hast die logischen Prüfungen im Code für den Eintragen-Button nicht korrekt aufgebaut.
Dadurch werden deine Meldungen bei fehlenden Eingaben nicht angezeigt.
Gruß
Franz
Private Sub cmdEingabe_Click()
'Beispiel für Prüfung der Eingaben nach Klick auf Schaltfläche
If fncCheckEingaben = False Then
'        MsgBox "Die Eingaben im Userform sind nicht vollständig", vbOKOnly, "Prüfung-Eingaben"
'Hinweis alle Felder müssen ausgefüllt werden
If cboBaumart.Value = "" Then
Call MsgBox("Es muss eine Auswahl getroffen werden!", vbExclamation, _
"Auswahlfeld ist Leer!")
cboBaumart.SetFocus
Exit Sub
Else
If cboMisch.Value = "" Then
Call MsgBox("Es muss eine Auswahl getroffen werden!", vbExclamation, _
"Auswahlfeld ist Leer!")
cboMisch.SetFocus
Exit Sub
Else
If txtHa.Value = "" Then
Call MsgBox("Es muss die Bestandesgröße angegeben werden!", vbExclamation, _
"Textfeld ist Leer!")
txtHa.SetFocus
Exit Sub
Else
If cboZ.Value = "" Then
Call MsgBox("Es muss eine Auswahl getroffen werden!", vbExclamation, _
"Auswahlfeld ist Leer!")
cboZ.SetFocus
Exit Sub
Else
If txtOst.Value = "" Then
Call MsgBox("Es muss der Ostwert angegeben werden!", vbExclamation, _
"Textfeld ist Leer!")
txtOst.SetFocus
Exit Sub
Else
If txtNord.Value = "" Then
Call MsgBox("Es muss der Nordwert angegeben werden!", vbExclamation, _
"Textfeld ist Leer!")
txtNord.SetFocus
Exit Sub
End If
End If
End If
End If
End If
End If
Else
'Fügt die eingetragenen Werte ins Tabellenblatt und schließt das Formular frmBestaende
Dim intErsteLeereZeile As Long
intErsteLeereZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
ActiveSheet.Cells(intErsteLeereZeile, 1).Value = Me.cboBaumart.Value
ActiveSheet.Cells(intErsteLeereZeile, 2).Value = Me.cboMisch.Value
ActiveSheet.Cells(intErsteLeereZeile, 3).Value = Me.txtHa.Value
ActiveSheet.Cells(intErsteLeereZeile, 4).Value = Me.cboZ.Value
ActiveSheet.Cells(intErsteLeereZeile, 5).Value = Me.txtOst.Value
ActiveSheet.Cells(intErsteLeereZeile, 6).Value = Me.txtNord.Value
Unload frmBestaende
End If
End Sub

Anzeige
AW: Commandbutton im Userform deaktivieren
08.05.2017 16:24:45
Lisa
Hallo Franz,
danke nochmal für die Antwort.
Habe die Reihenfolge nun entsprechend verändert, allerdings bleibt das Ergebnis dasselbe. Ich kann das Userform starten, jedoch sobald es da ist nichts eintragen, keinen cmd benützen, auch nicht schließen. Woran kann das liegen? Vorher hat es stets geklappt.
lg
AW: Commandbutton im Userform deaktivieren
08.05.2017 19:00:04
fcs
Hallo Lisa,
Woran kann das liegen? Vorher hat es stets geklappt.
keine Ahnung. Aber irgend etwas muss ja in der Datei/den Makros jetzt anders sein. Da müsstest du die Datei mal mit ein paar anonyisierten Beispieldaten hier hochladen. Dabei sollte der Fehler in der Datei natürlich weiter auftreten.
LG
Franz
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige