6

36個のボタンがあるvbauserFormがあります。スプレッドシートの1つの値が特定の数に達したときに、すべてのボタンを無効にしたいのですが。現在、ボタンをクリックするたびに、参照しているスプレッドシートの数値が1つずつ上がります。数が3に達したら、すべてのボタンを無効にします。

4

3 に答える 3

5

すべてのボタンをFrameオブジェクトに配置してから、フレーム全体を無効にします。これにより、フレーム内のすべてが無効になります。

または、最後の質問に基づいて、次のコードを使用できます。

Dim counter As Integer

Private Sub btn1_Click()
    CaptureImage (btn1.Name)
End Sub

Private Sub btn2_Click()
    CaptureImage (btn2.Name)
End Sub

Private Sub btn3_Click()
    CaptureImage (btn3.Name)
End Sub

Private Sub UserForm_Activate()
    counter = 1
End Sub

Private Sub CaptureImage(ByVal btnName As String)
    Controls("capture" & counter).Picture = Controls(btnName).Picture
    counter = counter + 1
    If counter > 3 Then
        DisableButtons
    End If
End Sub

Private Sub DisableButtons()
    Dim ctl As Control
    For Each ctl In UserForm1.Controls
        If Left(ctl.Name, 3) = "btn" Then
            ctl.Enabled = False
        End If
    Next
End Sub

理想的には、Thomasが提案するように、コントロールオブジェクトをボタンにキャストすることをお勧めします。

于 2011-04-08T16:14:51.627 に答える
5
Dim oCtrl As Control
Dim oButton As CommandButton

For Each oCtrl In MyForm.Controls
    If oCtrl.Tag = "SomeValue" Then
        Set oButton = oCtrl
        oButton.Enabled = False
    End If
Next

Set oCtrl = Nothing
Set oButton = Nothing

無効にしたくない他のボタンがある場合、解決策はTagプロパティを使用することです。一緒に有効または無効にするすべてのボタンのTagプロパティを同じ値に設定します。次に、その値を一目で確認し、それらを有効/無効にすることができます。別の方法は、それらに同じプレフィックスまたはサフィックスという名前を付けて、コードでそれを確認することです。

添加

ところで、ControlオブジェクトにはEnabledプロパティがありません。したがって、コマンドボタンに「キャスト」して無効にする必要があります。どうやらControlオブジェクトにはEnabledプロパティがありますが、インテリセンスでは表示されません。ただし、それでも、コントロールをコマンドボタンにキャストして、それが確実に機能するようにする必要があります。これが拡張バージョンです:

Dim oCtrl As Control
Dim oButton As CommandButton

For Each oCtrl In MyForm.Controls
    If oCtrl.Tag = "SomeValue" Then
        On Error Resume Next
        Set oButton = oCtrl
        On Error GoTo 0

        If Not oButton Is Nothing Then
            oButton.Enabled = False
        End If
    End If
Next

Set oCtrl = Nothing
Set oButton = Nothing
于 2011-04-08T16:33:04.733 に答える
0

@マイク:試してみてください-

If Sheets("Sheet1").Range("A1").Value = 3 Then 
    UserForm1.CommandButton1.Enabled = True 
Else 
    UserForm1.CommandButton1.Enabled = False 
End If

Sheet1( 、、をワークブックに適したものにA1置き換えます)UserForm1CommandButton1

于 2011-04-08T16:16:32.100 に答える