2方向のみのユーザーフォームオプションボタン

2020-02-11 excel vba userform

列と列の表のようにボタンが整理されたユーザーフォームがあります。列と行ごとに1つのボタンのみをアクティブにする必要があります。 現時点では、すべてのボタンがオプションボタンであり、同じフレームの行のすべてのオプションボタンで機能します。 次に、列について、各ボタンに対してタイプのサブを記述し始めました:

Private Sub Col1Row3_Click()

For i = 1 To 2
 Me.Controls("col1Row" & i) = False
Next i

For i = 4 To 14
 Me.Controls("col1Row" & i) = False
Next i

End Sub

動作しますが、もっとエレガントな方法があると確信しています。何かご意見は ? ありがとう!

Answers

簡単なサブ手順

アプローチに近いコードを単純化する簡単な方法を実証しようとしました

  1. サブ手順を使用する
  2. ループ内ですべてのオプションボタンをFalseに設定し、最終的にアクティブなボタンを再びTrueに設定します。
Sub Only(ByVal rowNum As Long, ByVal colName As String, Optional ByVal maxRow As Long = 14)
' Purpose: set all OptionButtons to False except the one for row rowNum
    Dim currRow     As Long
    For currRow = 1 To maxRow
        Me.Controls(colName & "Row" & currRow) = False
    Next
    Me.Controls(colName & "Row" & rowNum) = True
End Sub

複雑なループを回避する呼び出し例

Private Sub col1Row3_Click()
    Only 3, "col1"
End Sub

さらにヒント

オプションボタンごとにプロシージャコールを繰り返す代わりに、クラスプログラミング(〜> WithEvents )から利益を得ることができます。より深い洞察のために、たとえば、クラスで事前定義された同じ名前タイプと同じイベントプロシージャを共有するコントロールをグループ化する場合、 VBAコントロールアレイに興味があるかもしれません。

Related