Отключить командную кнопку, если обязательные поля пусты - PullRequest
0 голосов
/ 05 сентября 2018

Я создаю форму из Excel-ActiveX, но я понятия не имею, как можно отключить командную кнопку, если все обязательные поля (текстовое поле и поле со списком) пусты. Я приложил образец формы для вашей справки.

образец формы LA

1 Ответ

0 голосов
/ 05 сентября 2018

Используйте событие *_Change для каждого элемента управления (и, необязательно, событие UserForm_Activate), чтобы установить свойство .Enabled для кнопки управления.

Например, на простой пользовательской форме с 1 ComboBox (ComboBox1), 2 TextBoxes (TextBox1 и TextBox2) и 1 CommandButton (CommandButton1), следующий код гарантирует, что CommandButton1 отключен если нет данных в каждом из 3 других элементов управления:

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
...