2

セルの値に応じて多数のボタンを表示するコードを作成しようとしています

10 個のコマンド ボタンがすべて非表示で、最初の x のみを表示したい x x は「シート 1」のセル「A1」の値です (1 から 10 になります) コマンド ボタンの名前は既定の名前です (CommandButton4、CommandButton5、.. 、コマンドボタン13)

注:ユーザーフォームではなくワークシートで作業しています

これは私のコードですが、より短く、よりプロで効率的なものが必要です

Private Sub CommandButton15_Click()
    Dim i As Long
    Dim CommandButton() As Variant

    Application.ScreenUpdating = False

    CommandButton = Array("CommandButton4", "CommandButton5", "CommandButton6", "CommandButton7",     "CommandButton8", "CommandButton9", "CommandButton10", "CommandButton11", "CommandButton12", "CommandButton13")

    For i = LBound(CommandButton) To LBound(CommandButton) + Sheet1.Range("A1").Value - 1

        Sheet1.Shapes(CommandButton(i)).Visible = True

    Next i

    Application.ScreenUpdating = True

End Sub

助けてください

4

1 に答える 1

2

コメントで述べたように、ボタンの名前を変更する必要があります。それだけで物事は簡単になります。

たとえば、「btn1」、「btn2」、「btn3」などの名前を付けることができます....コードは問題なく、重大なエラーは表示されません。後で新しいボタンを追加するかどうかはわかりません。

もしそうなら、私はもっと一般的なものをお勧めします。ボタンの名前を「btn1」に変更すると、次のようなものを使用できます。

Private Sub CommandButton15_Click()
Dim btn As OLEObject, name As String, i As Long
i = Sheets(1).Range("A1").Value + 1
For Each btn In ActiveSheet.OLEObjects
    name = btn.name
    If btn.OLEType = xlButtonOnly And InStr(name, "btn") = 1 Then
        If Int(Right(name, Len(name) - 3)) < i Then
            btn.Visible = True
        Else
            btn.Visible = False
        End If
    End If
Next
End Sub

したがって、「btn..」パターンで名前を付ける新しいボタンを追加でき、コードを変更する必要はありません。

于 2013-06-11T08:43:23.367 に答える