Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Button aktivieren

Button aktivieren
08.03.2009 13:45:05
Frank
Hallo und 'nen schönen Sonntag!!!
Vielleicht gibt es eine Lösung? In einer UF wird in TextBox5 eine Zahl eingegeben, so 45,67. Nun möchte ich das wenn die Eingabe so erfolgt ist, gleich der CommandButton aktiviert, aber noch nicht ausgelöst wird. Geht das und wenn ja wie?
Die TextBox ist aber bereits mit einem Code belegt!

Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 46 Then  ' wenn Punkt getippt
KeyAscii = 44        ' ersetze durch Komma
End If
End Sub


Gruß Frank H.

Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Button aktivieren
08.03.2009 13:53:30
Daniel
Hi
die Textbox kann problemlos mehrere Codes haben, z.B. so was:

Private Sub TextBox5_Change()
Commandbutton1.Enabled = IsNumeric(Textbox5.Text)
End Sub


würde den commandbutton1 nur dann aktivieren (dh. anklickbar machen), wenn in Textbox5 eine Zahl steht.
Gruß, Daniel

Anzeige
AW: Button aktivieren
08.03.2009 14:39:20
Frank
Hi Daniel!
Danke für die schnelle Antwort. Ist aber nicht ganz, dass was ich haben wollte. Wenn die Eingabe in TextBox5 erfolgt ist, soll der Button gleich aktiv sein, dass ich den dahinter befindlichen Code mittels Enter aúslösen kann!!! Ich hoffe das ist zu verstehen?
Danke!!!
Gruß Frank H.
Anzeige
AW: Button aktivieren
08.03.2009 15:03:24
Daniel
Hi
woran kann Excel erkennen, daß die Eingabe in die Textbox abgschlossen ist und nicht noch weitere Zahlen eigegeben werden sollen?
was du ausnutzen könntest wäre folgendes:
wenn du bei der Eingabe in die Textbox auf ENTER oder TAB drückst, wird die Textbox verlassen und das nächste Steuerelement aktiviert.
welches das ist, entscheidet die Steuereelementeigenschaft "TabIndex". Es wird immer das Steuerelement mit dem nächstgrösseren TAB-Index ausgewählt.
(bei Commandbuttons ist das etwas anders, sollte der Commandbutton aktiv sein, löst der druck auf ENTER das CLICK-Makro aus.)
im Prinizp brauchst du also nur der Textbox und dem Commandbutton direkt aufeinanderfolgende TabIndexe zu verpassen und du kannst durch zweimaligen Druck auf Enter das ClickEreignis des Commandbuttons auslösen.
solltes du nur 1x auf Enter klicken wollen, müsstest du den Code vom CLICK-Event in das ENTER-Event des Commandbuttons übertragen.
Dieses würde dann sofort ausgefürt werden, wenn die Textbox verlassen wird, so daß du nur 1x auf ENTER clicken musst.
Gruß, Daniel
ps solltest du nicht mit einer USERFORM sondern mit Steuerelementen direkt auf dem Tabellenblatt arbeiten, heißt das Event nicht ENTER sondern GOTFOCUS
Anzeige
AW: Button aktivieren
08.03.2009 14:50:16
Tino
Hallo,
ich würde es so machen.
Option Explicit
'CommandButton1.Enabled Standart auf False setzen 
Private Sub TextBox5_Change()
    If IsNumeric(TextBox5) And Len(TextBox5) > 0 Then
     Me.CommandButton1.Enabled = True
    Else
     Me.CommandButton1.Enabled = False
    End If
End Sub

'Nur Zahlen zulassen 
Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim PunktOderKomma As String
    
    PunktOderKomma = IIf("0.5" * 2 = 1, ".", ",")
    If KeyAscii = 44 Or KeyAscii = 46 Then
        If InStr(TextBox5, PunktOderKomma) = 0 And Len(TextBox5) > 0 Then
          KeyAscii = IIf("0.5" * 2 = 1, 46, 44)
        Else
          KeyAscii = 0
        End If
     Else
            Select Case KeyAscii
             Case 48 To 57: KeyAscii = KeyAscii
             Case Else: KeyAscii = 0
            End Select
     End If
End Sub


Gruß Tino

Anzeige
AW: Button aktivieren
08.03.2009 14:54:44
Gerd
Hallo Frank,
ergänzend kann im VBA-Editor nach Klick mit der rechten Mouse-Taste auf die Userform die
Aktivierungsreihenfolge der Steuerelemente festgelegt bzw. geändert werden.
Gruß Gerd
Erweiterung
08.03.2009 15:08:06
Tino
Hallo,
mit dem Focus hätte ich auch noch was,
dieser wird automatisch gesetzt wenn 2 Nachkommastellen enthalten sind.
'CommandButton1.Enabled Standart auf False setzen 
Private Sub TextBox5_Change()
Dim PunktOderKomma As String
PunktOderKomma = IIf("0.5" * 2 = 1, ".", ",")
    If Len(TextBox5) > 0 Then

        If Len(TextBox5) - InStrRev(TextBox5, PunktOderKomma) > 1 And InStr(TextBox5, PunktOderKomma) > 0 Then
         Me.CommandButton1.Enabled = True
         Me.CommandButton1.SetFocus
        Else
         Me.CommandButton1.Enabled = False
        End If
        
    Else
        Me.CommandButton1.Enabled = False
    End If
End Sub

'Nur Zahlen zulassen 
Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim PunktOderKomma As String
    
    PunktOderKomma = IIf("0.5" * 2 = 1, ".", ",")
    
    If KeyAscii = 44 Or KeyAscii = 46 Then
            If InStr(TextBox5, PunktOderKomma) = 0 And Len(TextBox5) > 0 Then
              KeyAscii = IIf("0.5" * 2 = 1, 46, 44)
            Else
              KeyAscii = 0
            End If
     Else
            Select Case KeyAscii
             Case 48 To 57: KeyAscii = KeyAscii
             Case Else: KeyAscii = 0
            End Select
     End If
End Sub


Gruß Tino

Anzeige
AW: Erweiterung
08.03.2009 15:52:43
Frank
Hallo Tino!!!
Echt Super!!! Funzt wie gewünscht!!! Danke!!!
Aber auch allen Anderen DANK!!!
Gruß Frank H.
P.S.: Einen schönen Rest Sonntag noch!!!
AW: Button aktivieren
08.03.2009 15:13:32
Frank
Hallo Tino!!!
Bringt noch nicht das gewünschte Ergebnis, der Button bleibt unberührt und ich muss ihn per Hand auswählen, sprich per Tabulator!!!
Gruß Frank H.
Anzeige
AW: Button aktivieren
08.03.2009 15:18:51
Gerd
Hallo Frank,
wie ist die Einstellung des Commandbuttons in den Eigenschaften bei
"TakeFocusOnClick" ?
Gruß Gerd
AW: Button aktivieren
08.03.2009 15:48:59
Frank
Hallo Gerd!
True!!!
Gruß Frank H.
AW: Button aktivieren
08.03.2009 15:56:05
Gerd
Hallo Frank,
ob es die Lösung ist, kann ich jetzt nicht sagen.
Denn Tino 's Code habe ich nicht getestet. Der läuft aber fast immer.
Stelle die TakeFocusOnClick - Eigenschaft einfach mal auf "False"
u. probiere anschließend nochmal.
Gruß Gerd
Anzeige
AW: Button aktivieren
08.03.2009 15:54:32
Tino
Hallo,
funktioniert alles nicht so richtig wenn es noch mehrere Steuerelemente gibt.
Bin jetzt den Umweg über KeyUp gegangen, etwas besseres fällt mir jetzt nicht ein.
Habe das prüfen auf Zahl noch in eine Funktion ausgelagert.
Private Sub CommandButton1_Enter()
If CommandButton1.Tag = "1" Then Exit Sub
    'Dein Code 
    '... 
    '... 
End Sub

'kleiner umweg über KeyUp 
Private Sub CommandButton1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 If KeyCode = 13 Then CommandButton1_Enter
End Sub

'CommandButton1.Enabled Standart auf False setzen 
Private Sub TextBox5_Change()
Dim PunktOderKomma As String
PunktOderKomma = IIf("0.5" * 2 = 1, ".", ",")
  With Me.CommandButton1
    If Len(TextBox5) > 0 Then
        If Len(TextBox5) - InStrRev(TextBox5, PunktOderKomma) > 1 And InStr(TextBox5, PunktOderKomma) > 0 Then
          .Enabled = True
          .Tag = "1"
          .SetFocus
          .Tag = ""
        Else
          .Enabled = False
        End If
        
    Else
          .Enabled = False
    End If
  End With
End Sub

Private Sub TextBox5_KeyPress(ByVal intKeyAsc As MSForms.ReturnInteger)
 intKeyAsc = NurZahlenZulassen(TextBox5, CInt(intKeyAsc))
End Sub

'Funktion zum prüfen einer Textbox ---> Nur Zahlen zulassen 
Private Function NurZahlenZulassen(objTextBox As MSForms.TextBox, intKeyNumber As Integer) As Integer
Dim PunktOderKomma As String
    
    PunktOderKomma = IIf("0.5" * 2 = 1, ".", ",")
    
    If intKeyNumber = 44 Or intKeyNumber = 46 Then
            If InStr(objTextBox, PunktOderKomma) = 0 And Len(objTextBox) > 0 Then
              NurZahlenZulassen = IIf("0.5" * 2 = 1, 46, 44)
            Else
              NurZahlenZulassen = 0
            End If
     Else
            Select Case intKeyNumber
             Case 48 To 57: NurZahlenZulassen = intKeyNumber
             Case Else: NurZahlenZulassen = 0
            End Select
     End If

End Function


Gruß Tino

Anzeige
AW: TabReihenfolge
08.03.2009 16:31:04
Daniel
Hallo
hier nochmal das Beispiel über die TAB-Reihenfolge:
durch druck auf ENTER wird der Code des Commandbuttons1 ausgelöst.
https://www.herber.de/bbs/user/60103.xls
Gruß, Daniel
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

CommandButton aktivieren in Excel UserForms


Schritt-für-Schritt-Anleitung

Um den CommandButton in Deiner UserForm zu aktivieren, wenn in der TextBox eine Zahl eingegeben wird, kannst Du folgenden VBA-Code verwenden. Dieser Code sorgt dafür, dass der Button aktiviert wird, sobald eine gültige Zahl eingegeben wird.

  1. Öffne die UserForm im VBA-Editor.
  2. Füge den folgenden Code in das Code-Fenster der UserForm ein:
Private Sub TextBox5_Change()
    CommandButton1.Enabled = IsNumeric(TextBox5.Text) And Len(TextBox5.Text) > 0
End Sub

Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = 46 Then  ' wenn Punkt getippt
        KeyAscii = 44      ' ersetze durch Komma
    End If
End Sub

Dieser Code aktiviert den CommandButton1, wenn in TextBox5 eine gültige Zahl eingegeben wird. Außerdem wird sichergestellt, dass nur Zahlen und das Komma als Dezimaltrennzeichen akzeptiert werden.


Häufige Fehler und Lösungen

  • Fehler: Der Button bleibt deaktiviert.

    • Stelle sicher, dass die TextBox nicht leer ist und eine gültige Zahl enthält. Der Code prüft das mit IsNumeric.
  • Fehler: Der Button wird nicht aktiviert, wenn ein Komma eingegeben wird.

    • Achte darauf, dass der KeyPress-Code korrekt ist. Der Code ersetzt den Punkt durch ein Komma.

Alternative Methoden

Eine alternative Methode besteht darin, die TabIndex-Eigenschaft der Steuerelemente zu nutzen. Wenn Du die TabIndex-Werte korrekt einstellst, kannst Du durch Drücken der Enter-Taste den CommandButton auslösen, ohne dass Du ihn vorher aktivieren musst. Hierzu kannst Du den folgenden Code verwenden:

Private Sub CommandButton1_Enter()
    ' Dein Code hier
End Sub

Private Sub CommandButton1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then CommandButton1_Enter
End Sub

Praktische Beispiele

Ein Beispiel für die Verwendung des Codes könnte wie folgt aussehen:

  1. Du hast ein Textfeld für die Eingabe einer Zahl in TextBox5.
  2. Der CommandButton soll aktiviert werden, sobald der Benutzer eine Zahl eingibt und die Enter-Taste drückt.

Mit dem obenstehenden Code funktioniert dies reibungslos, ohne dass zusätzliche Mausklicks erforderlich sind.


Tipps für Profis

  • Verwendung von Funktionen: Du kannst die Logik zur Überprüfung der Zahlen in eine separate Funktion auslagern. Damit bleibt der Code sauber und wartbar.

  • Ereignisse optimieren: Um die Performance zu verbessern, kannst Du das Change-Ereignis der TextBox so optimieren, dass es nur dann ausgeführt wird, wenn tatsächlich Änderungen an den Eingaben vorgenommen werden.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass nur Zahlen in die TextBox eingegeben werden?
Du kannst das KeyPress-Ereignis der TextBox nutzen, um Eingaben zu filtern und nur erlaubte Zeichen zuzulassen.

2. Was ist die TakeFocusOnClick-Eigenschaft?
Diese Eigenschaft bestimmt, ob der Button den Fokus erhält, wenn er angeklickt wird. Du kannst sie auf False setzen, um das Verhalten zu ändern, wie es Daniel im Thread erwähnt hat.

3. Wie kann ich mehrere Steuerelemente in einer UserForm verwalten?
Du kannst die TabIndex-Eigenschaft für jedes Steuerelement festlegen, um die Reihenfolge der Eingaben und die Aktivierung der Controls zu steuern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige