スプレッドシートに 3 つの異なるフォーム ボタンがあります。1つが押されている間、2つを無効にしたい。それは可能ですか?
C# では、ボタンは true または false になりますが、VBA Excel 2010 でこの例を見つけることができませんか?
前もって感謝します
スプレッドシートに 3 つの異なるフォーム ボタンがあります。1つが押されている間、2つを無効にしたい。それは可能ですか?
C# では、ボタンは true または false になりますが、VBA Excel 2010 でこの例を見つけることができませんか?
前もって感謝します
フォームボタンを無効にすることはできません。その機能を使用する場合は、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
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.Enabled
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