我正在使用excel-ActiveX创建表单,但是我不知道如何在所有必填字段(文本框和组合框)为空的情况下禁用命令按钮。我附上了样本表格供您参考。
答案 0 :(得分:0)
对每个控件使用*_Change
事件(以及可选的UserForm_Activate
事件)来设置控件按钮的.Enabled
属性。
例如,在具有1个ComboBox(ComboBox1
),2个TextBoxes(TextBox1
和TextBox2
)和1个CommandButton(CommandButton1
)的简单UserForm上,以下代码将确保禁用CommandButton1
,除非其他三个控件中的每个控件中都包含数据:
Option Explicit
Private Sub CheckMandatoryFields()
'Is a separate sub to make it easy to edit for all Controls at the same time
If Len(TextBox1.Value) > 0 And Len(TextBox2.Value) > 0 And Len(ComboBox1.Value) > 0 Then
CommandButton1.Enabled = True
Else
CommandButton1.Enabled = False
End If
End Sub
Private Sub CommandButton1_Click()
MsgBox "Button is enabled!"
End Sub
Private Sub ComboBox1_Change()
CheckMandatoryFields
End Sub
Private Sub TextBox1_Change()
CheckMandatoryFields
End Sub
Private Sub TextBox2_Change()
CheckMandatoryFields
End Sub
Private Sub UserForm_Activate()
CheckMandatoryFields
End Sub
如果您的按钮和控件位于工作表中,则需要将UserForm_Activate
更改为Worksheet_Activate
。如果它们在不同的工作表中,或者在工作表中的某些表中,而在用户表单中的其他表中,则您需要完全限定引用(例如Sheet1.Textbox1.Value
)
如果您在工作表中使用窗体控件而不是ActiveX控件,则不能使用_Change
事件,并且引用对象的方式也不同:
Sheet1.Shapes("TextBox1").TextFrame2.TextRange.Text 'The value of TextBox1
Sheet1.Shapes("ComboBox1").ControlFormat.Value 'Which Number item in ComboBox1 is selected
Sheet1.Shapes("ComboBox1").ControlFormat.List(n) 'The value of the nth item in ComboBox1
“表单控件”按钮没有Enabled
属性-但是,如果您有“什么都不做”宏,则可以像这样将其进行修饰:
Sub DoNothing()
'As it says
End Sub
Sub MakeASound()
Beep
End Sub
Sub ToggleButton()
If Sheet1.Shapes("Button 1").OnAction = "Sheet1!DoNothing" Then 'Disable Button 1
Sheet1.Shapes("Button 1").OLEFormat.Object.Font.ColorIndex = 16 'Font colour = Grey
Sheet1.Shapes("Button 1").OnAction = "Sheet1!DoNothing"
Else 'Enable Button 1
Sheet1.Shapes("Button 1").OLEFormat.Object.Font.ColorIndex = 1 'Font colour = Black
Sheet1.Shapes("Button 1").OnAction = "Sheet1!MakeASound"
End If
End Sub