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
Steffen
Hallo An Alle,
Ich würde gerne den cmdBerechnen, den Sie im Bild sehen können, solange „ausgegraut“ lassen , also nicht anwählbar machen, bis alle Eingabemöglichkeit in dieser Userform ausgefüllt sind. Ist sowas möglich? Man müsste dabei beachten, dass bei einer Änderung der Button sich wieder „ausgraut“. Diese Function muss dann also immer im Hintergrund laufen und ständig abfragen.
Userbild
Gruß Steffen
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Button aktivieren
12.10.2011 11:12:51
Dirk
Hallo!
Du must halt im UF macro die Eingabeboxen ueberwachen. Falls eine = "" ist, dann commandbutton.enabled=false
ansonsten wenn alle "" sind, commandbutton.enabled=true.
Gruss
Dirk aus Dubai
AW: Button aktivieren
12.10.2011 11:44:33
Frank
Hallo Dirk und danke für deine Antwort...Mich würde das auch interessieren. Die Frage ist ja, wo muss ich diese Überwachung in der UserForm hinschreiben? Das ist mir nicht ganz klar.
Ich klicke also auf UserForm1 --> Code anzeigen und gebe das ein:
Option Explicit

Private Sub Button_active()
If TextBox1.Text = "" Or TextBox2.Text = "" Then
Button1.Enabled = False
Else
Button1.Enabled = True
End If
End Sub
https://www.herber.de/bbs/user/76972.xlsm
Ich habe gerade ein Brett vorm Kopf :-).
Vielen Dank und viele Grüße,
Frank
Anzeige
AW: Button aktivieren
12.10.2011 12:25:13
Henrik
Naja, das einfachste wäre wohl in jedem Textbox_Change eine Methode aufzurufen, die überprüft ob alles ausgefüllt wurde und dann den gewünschten Button ausgraut oder auch nicht:
So ungefähr:

Private Sub TextBox1_Change()
Call ButtonEnable
End Sub


Private Sub TextBox2_Change()
Call ButtonEnable
End Sub

Private Sub ButtonEnable()
If TextBox1.Text = "" And TextBox2.Text = "" Then 'hier alle auflisten die überwacht werden  _
sollen
CommandButton.Enabled = False
Else
CommandButton.Enabled = True
End If
End Sub
Gruß Henrik
Anzeige
AW: Button aktivieren
12.10.2011 12:41:30
Henrik
Hier mal ein gutes Beispiel von Nepumuk wie man es auch mit einem Klassenmodul eleganter lösen kann:

In die Userform kommt folgender Code rein:
Option Explicit
Private objTextBox() As clsTextBox
Private Sub UserForm_Activate()
Dim objControl As Control
Dim intCounter As Integer
For Each objControl In Controls
If TypeOf objControl Is MSForms.TextBox Then
intCounter = intCounter + 1
ReDim Preserve objTextBox(1 To intCounter)
Set objTextBox(intCounter) = New clsTextBox
Set objTextBox(intCounter).prpSetTextBox = objControl
End If
Next
End Sub
Private Sub UserForm_Terminate()
Dim intCounter As Integer
For intCounter = LBound(objTextBox) To UBound(objTextBox)
Set objTextBox(intCounter) = Nothing
Next
End Sub
Dazu ein Klassenmodul mit dem Namen "clsTextBox". Da kommt folgender Code rein:
Code:
Option Explicit
Private WithEvents mobjTextBox As MSForms.TextBox
Friend Property Set prpSetTextBox(objTextBox As MSForms.TextBox)
Set mobjTextBox = objTextBox
End Property
Private Sub mobjTextBox_Change()
If UserForm1.TextBox1.Text = "" And UserForm1.TextBox2.Text = "" Then 'hier alle auflisten  _
die überwacht werden _
sollen
UserForm1.CommandButton1.Enabled = False
Else
UserForm1.CommandButton1.Enabled = True
End If
End Sub
Und nochmal zur Erklärung. Du erstellst für jede Textbox eine neue Instanz der Klasse im  _
Arbeitsspeicher (Set objTextBox(intCounter) = New clsTextBox). Bei 10 Boxen hast du also 10 Instanzen welche alle das selbe machen. Das ist so, als würdest du für jede Textbox die selbe Routine schreiben. Jetzt klarer?
_________________
gruß Henrik
Anzeige
Button aktivieren/deaktivieren
12.10.2011 12:31:18
Matthias
Hallo
Du mußt aber auch den richtigen Objektnamen benutzen Button1 gibts bei Dir nicht
https://www.herber.de/bbs/user/76974.xls
Gruß Matthias
AW: Button aktivieren/deaktivieren
12.10.2011 13:22:59
Steffen
Hallo An Alle,
vielen Dank für die super hilfreichen Antworten!! THUMBS UP
Gruß
Steffen
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Button aktivieren in Excel UserForms


Schritt-für-Schritt-Anleitung

Um einen Button in einer Excel UserForm zu aktivieren oder zu deaktivieren, kannst du die folgenden Schritte befolgen:

  1. Öffne die UserForm:

    • Klicke auf die UserForm, in der du den Button aktivieren möchtest.
  2. Code anzeigen:

    • Gehe zu "Entwicklertools" > "Visual Basic" und wähle deine UserForm aus.
  3. Füge folgenden Code ein:

    • Du kannst den folgenden VBA-Code verwenden, um die Schaltfläche zu aktivieren:
    Option Explicit
    
    Private Sub Button_active()
       If TextBox1.Text = "" Or TextBox2.Text = "" Then
           Button1.Enabled = False
       Else
           Button1.Enabled = True
       End If
    End Sub
  4. Überwachung der TextBoxen:

    • Füge den Code in den Change-Ereignissen der TextBoxen hinzu, so dass der Button automatisch aktiviert oder deaktiviert wird, wenn der Benutzer die Eingabefelder ändert:
    Private Sub TextBox1_Change()
       Call Button_active
    End Sub
    
    Private Sub TextBox2_Change()
       Call Button_active
    End Sub
  5. Testen:

    • Teste die UserForm, um sicherzustellen, dass der Button korrekt aktiviert oder deaktiviert wird.

Häufige Fehler und Lösungen

  • Button bleibt ausgegraut:

    • Stelle sicher, dass die Namen der TextBoxen im Code mit den tatsächlichen Namen übereinstimmen. Wenn du Button1 verwendest, überprüfe, ob dieser tatsächlich der Name deines Buttons ist.
  • Code wird nicht ausgeführt:

    • Achte darauf, dass die Change-Ereignisse korrekt mit den TextBoxen verbunden sind. Wenn der Code nicht reagiert, könnte ein Fehler in der Ereignisbindung vorliegen.

Alternative Methoden

Eine alternative Methode, um die Schaltfläche zu aktivieren, wäre die Verwendung von Klassenmodulen. Hier ist ein Beispiel:

  1. Klassenmodul erstellen:

    • Erstelle ein neues Klassenmodul und nenne es clsTextBox.
  2. Klassenmodul-Code:

    • Füge folgenden Code in das Klassenmodul ein:
    Option Explicit
    
    Private WithEvents mobjTextBox As MSForms.TextBox
    
    Friend Property Set prpSetTextBox(objTextBox As MSForms.TextBox)
       Set mobjTextBox = objTextBox
    End Property
    
    Private Sub mobjTextBox_Change()
       UserForm1.CommandButton1.Enabled = (UserForm1.TextBox1.Text <> "" And UserForm1.TextBox2.Text <> "")
    End Sub
  3. UserForm-Code anpassen:

    • In der UserForm kannst du dann Instanzen dieser Klasse für jede TextBox erstellen.

Praktische Beispiele

Hier ist ein einfaches Beispiel, das die Aktivierung des Buttons zeigt:

Private Sub UserForm_Activate()
    Dim objControl As Control
    Dim intCounter As Integer
    For Each objControl In Controls
        If TypeOf objControl Is MSForms.TextBox Then
            intCounter = intCounter + 1
            ReDim Preserve objTextBox(1 To intCounter)
            Set objTextBox(intCounter) = New clsTextBox
            Set objTextBox(intCounter).prpSetTextBox = objControl
        End If
    Next
End Sub

Dieses Beispiel zeigt, wie alle TextBoxen in der UserForm überwacht werden können, um die Schaltfläche entsprechend zu aktivieren.


Tipps für Profis

  • Code modularisieren: Halte deinen Code modular und verwende Klassenmodule, um die Wartbarkeit zu verbessern.
  • Vermeidung von Hardcodierung: Vermeide es, die Namen von Steuerelementen direkt im Code zu verwenden; verwende stattdessen Variablen, um die Lesbarkeit zu erhöhen.
  • Debugging: Nutze Debug.Print in deinem Code, um die Werte während der Ausführung zu verfolgen. So kannst du Probleme schneller identifizieren.

FAQ: Häufige Fragen

1. Frage Wie oft sollte ich den Code zur Überwachung ausführen?

Antwort: Der Code sollte in den Change-Ereignissen der TextBoxen ausgeführt werden, damit er jedes Mal aktualisiert wird, wenn der Benutzer eine Eingabe macht.

2. Frage Kann ich die Schaltfläche auch deaktivieren, wenn ein bestimmter Wert eingegeben wird?

Antwort: Ja, du kannst die Bedingungen im Code anpassen, um die Schaltfläche basierend auf spezifischen Eingaben zu aktivieren oder zu deaktivieren.

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