2

スプレッドシートに 3 つの異なるフォーム ボタンがあります。1つが押されている間、2つを無効にしたい。それは可能ですか?

C# では、ボタンは true または false になりますが、VBA Excel 2010 でこの例を見つけることができませんか?

前もって感謝します

4

2 に答える 2

2

フォームボタンを無効にすることはできません。その機能を使用する場合は、ActiveXボタンを使用してください。

ただし、別の方法があります。2つのパブリックブール変数を作成し、ボタン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
于 2012-05-22T10:53:36.413 に答える
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

次に、ActiveX ボタンのプロパティをSetFormButtonEnabled使用するのと同じ方法で関数を使用し、クリック マクロを実行する前にボタンが有効であることを確認するために使用できます。button.EnabledGetFormButtonEnabled

これらを使用して最初の質問に答えるには、名前付きのボタン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
于 2013-07-30T13:45:41.170 に答える