Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
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