Proprietà enabled commandbutton

Anonimo
2018-04-11T16:17:11+00:00

Buonasera,

non so se si può fare:

ho un commanbutton che esegue determinate istruzioni se alcune textbox sono non vuote.

Mi piacerebbe sapere se c'è un modo, quando le tetxbox sono vuote button.enabled = false 

altrimenti button.enabled = true

Grazie,

Marco

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2018-04-12T11:30:54+00:00

Ciao Marco,

intanto GRAZIE.

Prego!

In effetti ho tre textbox e due combobox e devono essere TUTTI NON VUOTI per abilitare il commandbutton.

Forse un modulo di classe sarebbe meglio, sia per efficienza che per estetica di programmazione

e last but not least, continuerei a studiare questi benedetti/maledetti moduli di classe... :-)

non riesco a capirli fino in fondo........ :-(

A titolo di esempio, prova qualcosa del genere:

  • Inserisci un modulo di Class e denominarlo cComboBoxClass
  • Inserisci un modulo di Class e denominarlo cTextBoxClass
  • Nel modulo cComboBoxClass incolla il seguente codice:

'=========>>

Option Explicit

Public WithEvents ComboBoxGroup As ComboBox

'--------->>

Private Sub ComboBoxGroup_Change()

    Call UF.ToggleCommandButton

End Sub

'<<=========

  • Nel modulo cTextBoxClass incolla il seguente codice

'=========>>

Option Explicit

Public WithEvents TextBoxGroup As MSForms.TextBox

'--------->>

Private Sub TextBoxGroup_Change()

    Call UF.ToggleCommandButton

End Sub

'<<=========

Nel modulo della Userform, incolla codice:

'=========>>

Option Explicit

Dim TextBoxes() As New cTextBoxClass

Dim ComboBoxes() As New cComboBoxClass

Private Const sCaption As String = "Sono irraggiungibile!"

Private Const sCaption2 As String = "Sono vivo e pronto!"

'--------->>

Private Sub UserForm_Initialize()

    Dim WB As Workbook

    Dim SH_Elenchi As Worksheet

    Dim rngElenco As Range, rngElenco2 As Range

    Dim LObj As ListObject, LObj2 As ListObject

    Dim Ctrl As Control

    Dim iCtr As Long, jCtr As Long

    Const sFoglioElenchi As String = "Elenchi"

    Set UF = Me

    For Each Ctrl In Me.Controls

        Select Case TypeName(Ctrl)

        Case "TextBox"

            iCtr = iCtr + 1

            ReDim Preserve TextBoxes(1 To iCtr)

            Set TextBoxes(iCtr).TextBoxGroup = Ctrl

        Case "ComboBox"

            iCtr = iCtr + 1

            ReDim Preserve ComboBoxes(1 To iCtr)

            Set ComboBoxes(iCtr).ComboBoxGroup = Ctrl

        Case Else

            '\ ignora!

        End Select

    Next Ctrl

    Set WB = ThisWorkbook

    Set SH_Elenchi = WB.Sheets(sFoglioElenchi)

    With SH_Elenchi

        Set LObj = .ListObjects("Tabella1")

        Set LObj2 = .ListObjects("Tabella2")

        Set rngElenco = LObj.DataBodyRange

        Set rngElenco2 = LObj2.DataBodyRange

    End With

    With Me

        .ComboBox1.List = rngElenco.Value

        .ComboBox2.List = rngElenco2.Value

        With .CommandButton1

            .Enabled = False

            .Caption = sCaption

            .BackColor = RGB(255, 0, 0)

        End With

    End With

End Sub

'--------->>

Public Sub ToggleCommandButton()

    Dim Ctrl As MSForms.Control

    Dim TBox As MSForms.TextBox

    With Me

        .CommandButton1.Enabled = False

        For Each Ctrl In Me.Controls

            If TypeName(Ctrl) = "TextBox" _

               Or TypeName(Ctrl) = "ComboBox" Then

                If Ctrl.Text = vbNullString Then

                    With .CommandButton1

                        .Enabled = False

                        .Caption = sCaption

                        .BackColor = RGB(255, 0, 0)

                    End With

                    Exit Sub

                End If

            End If

        Next Ctrl

        With .CommandButton1

            .Enabled = True

            .Caption = sCaption2

            .BackColor = RGB(0, 255, 0)

        End With

    End With

End Sub

'--------->>

Private Sub CommandButton1_Click()

'\ Tuo codice.Ad esempio:

    MsgBox "Sono abiltato!"

End Sub

'<<=========

  • In cima ad un modulo standard, incolla;

'=========>>

Option Explicit

Public UF As Object

'--------->>

Public Sub Tester()

    Userform1.Show

End Sub

'<<=========

Potresti scaricare il mio file di prova Marco20180412.xlsm

In questo file, per caricare i due controlli ComboBox, ho creato due tabelle (Tabella1 e Tabella2) excel sul foglio Elenchi.

Per avviare il demo. premi il pulsante rosa sul Foglio1

Fino a quando tutti i controlli TextBox e ComboBox non vengono popolati, il controllo CommandButton sarà disabilitato e rosso; quando tutti i controlli TextBox e ComboBox sono popolati, il controllo CommandButton sarà abilitato, avrà uno sfondo verde e il suo testo cambierà. Infine, con la cancellazione del contenuto di uno qualsiasi dei controlli di interesse, si disattiva nuovamente il controllo CommandButton, si cambia il suo sfondo in rosso e si cambia il suo testo.

===

Regards,

Norman

La risposta è stata utile?

2 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2018-04-12T16:47:54+00:00

    Ciao Marco,

    ho aggiustato il codice per rendere attivo o passivo il commanbutton

    e funziona!!!! :-)

    grazieeeeeeee :-)

    a presto

    Benissimo, mi fa piacere!

    Alla prossima.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-04-12T16:39:05+00:00

    Caro Norman,

    ho aggiustato il codice per rendere attivo o passivo il commanbutton

    e funziona!!!! :-)

    grazieeeeeeee :-)

    a presto

    Marco

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-04-12T07:50:59+00:00

    Buongiorno Norman,

    intanto GRAZIE.

    In effetti ho tre textbox e due combobox e devono essere TUTTI NON VUOTI per abilitare il commandbutton.

    Forse un modulo di classe sarebbe meglio, sia per efficienza che per estetica di programmazione

    e last but not least, continuerei a studiare questi benedetti/maledetti moduli di classe... :-)

    non riesco a capirli fino in fondo........ :-(

    Marco

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2018-04-11T22:21:39+00:00

    Ciao Marco,

    ho un commanbutton che esegue determinate istruzioni se alcune textbox sono non vuote.

    Mi piacerebbe sapere se c'è un modo, quando le tetxbox sono vuote button.enabled = false 

    altrimenti button.enabled = true

    Ponendo che si tratti di una Userform, nel modulo di codice della Userform, prova qualcosa del genere:

    '=========>>

    Option Explicit

    '--------->>

    Private Sub TextBox1_Change()

        Call ToggleCommandButton

    End Sub

    '--------->>

    Private Sub TextBox2_Change()

        Call ToggleCommandButton

    End Sub

    '--------->>

    Private Sub UserForm_Initialize()

        Me.CommandButton1.Enabled = False

    End Sub

    '--------->>

    Private Sub ToggleCommandButton()

        Dim Ctrl As MSForms.Control

        Dim TBox As MSForms.TextBox

        Me.CommandButton1.Enabled = False

        For Each Ctrl In Me.Controls

            If TypeName(Ctrl) = "TextBox" Then

                Set TBox = Ctrl

                If TBox.Text <> vbNullString Then

                    Me.CommandButton1.Enabled = True

                    Exit For

                End If

            End If

        Next Ctrl

    End Sub

    '--------->>

    Private Sub CommandButton1_Click()

    '\ Tuo codice.Ad esempio:

        MsgBox "Sono abiltato!"

    End Sub

    '<<=========

    Potresti scaricare il mio file di prova Marco2010411.xlsm

    Se ci fossero più di (diciamo) due controlli TextBox, potrei creare un modulo di Classe per evitare che sia necessario inserire l'istruzione 

        Call ToggleCommandButton

    nell'evento Change di ogni TextBox.

    Inoltre, volendo, si potrebbe modificare il codice per visualizzare il controllo CommandButton solo qualora almeno un controllo TextBox non sia vuoto.    

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento