Excel 2010 – кнопка "Отключить"

Вопрос:

У меня есть 3 разных кнопки формы на моей таблице. Я хочу отключить 2 из них, пока один нажат. Возможно ли это?

В С# кнопка может быть true или false, но я не могу найти примеры этого в VBA Excel 2010?

Заранее спасибо

Лучший ответ:

Вы не можете отключить кнопки формы. Если вы хотите использовать эту функцию, используйте кнопку ActiveX.

Однако есть альтернатива. Создайте 2 общедоступные логические переменные, а затем в событии click Button 1 Установите переменные в True или False. В зависимости от булевых переменных остальные 2 кнопки будут запускать свой код или нет. Например

Option Explicit

Dim enableB2 As Boolean, enableB3 As Boolean

Sub Button1_Click()
    If enableB2 = False Then
        enableB2 = True: enableB3 = True
    Else
        enableB2 = False: enableB3 = False
    End If

    '
    '~~> Rest of the code
    '
End Sub

Sub Button2_Click()
     If enableB2 = True Then
        '
        MsgBox "Hello You clicked Button 2"
        '
     End If
End Sub

Sub Button3_Click()
     If enableB3 = True Then
        '
        MsgBox "Hello You clicked Button 3"
        '
     End If
End Sub

Ответ №1

Я просто хотел предложить альтернативный подход для тех, кто ударил это из Google (который предпочитает не использовать кнопки ActiveX): вместо использования глобальных переменных Boolean вы можете серым текстом в кнопке, когда она отключена, и проверьте цвет текста в макросе, назначенном кнопке, перед запуском макроса.

Например, если у вас есть следующий подраздел:

Public Sub SetFormButtonEnabled(ByVal oWks As Object, ByVal sName As String, ByVal bValue As Boolean) As Boolean
If blnValue Then
' Enabled: black text
oWks.Shapes(sName).TextFrame.Characters.Font.ColorIndex = 1
Else
' Disabled: grey text
oWks.Shapes(sName).TextFrame.Characters.Font.ColorIndex = 16
End If
End Sub

и функция:

Public Function GetFormButtonEnabled(ByVal oWks As Object, ByVal sName As String) As Boolean
' Enabled if text colour is black, otherwise it is disabled
GetFormButtonEnabled = (oWks.Shapes(sName).TextFrame.Characters.Font.ColorIndex = 1)
End Function

то вы можете использовать функцию SetFormButtonEnabled так же, как вы бы использовали свойство button.Enabled для кнопки ActiveX, и использовать GetFormButtonEnabled, чтобы проверить, что кнопка включена до выполнения макроса щелчка.

Чтобы использовать их для ответа на начальный вопрос, с кнопками с именем btnTest1-3 (я называю кнопки с таким соглашением после создания, но Button 1-3 тоже будет работать нормально) и макросы btnTest1_Click соглашение ActiveX, но можно назвать что угодно):

Public Sub btnTest1_Click()
If Not GetFormButtonEnabled(Me, "btnTest1") Then Exit Sub
SetFormButtonEnabled Me, "btnTest2", False
SetFormButtonEnabled Me, "btnTest3", False
' Do some work...
End Sub

Public Sub btnTest2_Click()
If Not GetFormButtonEnabled(Me, "btnTest2") Then Exit Sub
' Do some work...
End Sub

Public Sub btnTest3_Click()
If Not GetFormButtonEnabled(Me, "btnTest3") Then Exit Sub
' Do some work...
End Sub

Оцените статью
TechArks.Ru
Добавить комментарий