如果必填字段为空,请禁用命令按钮

时间:2018-09-05 07:16:58

标签: excel-vba

我正在使用excel-ActiveX创建表单,但是我不知道如何在所有必填字段(文本框和组合框)为空的情况下禁用命令按钮。我附上了样本表格供您参考。

sample LA Form

1 个答案:

答案 0 :(得分:0)

对每个控件使用*_Change事件(以及可选的UserForm_Activate事件)来设置控件按钮的.Enabled属性。

例如,在具有1个ComboBox(ComboBox1),2个TextBoxes(TextBox1TextBox2)和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