#783 イベントプロパティを動的に設定するには? フォーム、VBA

「#782 複数コントロールのイベントプロシージャを1ケ所に集約するには?」では各コントロールのイベント発生時に呼び出すプロシージャをプロパティシートで固定値として設定していましたが、「イベント」プロパティの値は動的に設定したり切り替えたりすることができます。その方法を使うことで、呼び出すプロシージャに対してコントロールごとに異なる引数を指定することができます。

次の例では、フォーム読み込み時に「OnGotFocus/フォーカス取得後」「OnLostFocus/フォーカス喪失後」の2つのイベントのプロパティを動的に設定しています。
また両方とも呼び出すプロシージャは同じですが、どのコンボボックスでイベントが発生したかを知らせるため、1つめの引数としてそれぞれ異なる値(コントロール名)を渡しています。
さらに、フォーカス取得後と喪失後とで2つめの引数の値を変えることで、2種類のイベントの共通化も図っています。

Private Sub Form_Load()
'フォーム読み込み時

  Dim iintLoop As Integer

  For iintLoop = 1 To 5
    With Me("cbo従業員" & iintLoop)
      'フォーカス取得後プロパティを設定
      .OnGotFocus = "=ComboFocus(""cbo従業員" & iintLoop & """, True)"
      'フォーカス喪失後プロパティを設定
      .OnLostFocus = "=ComboFocus(""cbo従業員" & iintLoop & """, False)"
    End With
  Next iintLoop

End Sub

Private Function ComboFocus(strCtlName As String, blnFocus As Boolean)
'各コンボボックスの共通処理

  'blnFocusのTrue/Falseに応じてコンボボックスの前景色と背景色を切り替え
  With Me(strCtlName)
    If blnFocus Then
      'フォーカス取得後
      .ForeColor = vbWhite
      .BackColor = vbBlue
    Else
      'フォーカス喪失後
      .ForeColor = vbBlack
      .BackColor = vbWhite
    End If
  End With

End Function

実行例:


| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved