OnMouseMove イベントを動的に割り当てる際に問題が発生しています。
レポートには、OnClick イベントを割り当てる数百のボタンがあります。このイベントは、呼び出しで条件付き WHERE を使用して、別のレポートを開きます。これを行うには、ボタンの名前 (番号を含む) を抽出し、その番号を抽出して関数の引数として渡します。
これはうまく機能し、正しいレポートが開きます。確認せずに、引数が正しく与えられていると思いました。
次のように機能します。
私が持っているレポートの初期化機能で
For Each ctl In Me.Controls
If ctl.ControlType = acCommandButton Then
nSekNr = ParseNumber(ctl.Name, 6)
ctl.OnClick = "=MapButtonClick('" & sBtnName & "', '" & nSekNr & "')"
[...]
ParseNumber 関数には次のものが含まれます
ParseNumber = Right(ctlName, (Len(ctlName) - z))
次に、次のようなクリック機能があります
Public Function MapButtonClick(ByVal sBtnName As String, ByVal nSekNr As Byte)
DoCmd.Minimize
DoCmd.Close acReport, "repSektion"
DoCmd.OpenReport "repSektion", acViewPreview, , "[SekID] = " & nSekNr
End Function
これは機能し、各ボタンをクリックすると正しいレポートが開きます。(はい、1つのパラメーターが必要ないことはわかっています。それは、私が試していた他の何かからの持ち越しです)
ここで、ラベルと OnMouseMove を使用してレポートにボタンの番号を表示し、ユーザーがボタンをクリックする前にセクション ID を確認できるようにします。
問題は、関数を複製したときに、Access が nSekNr 変数を引数として送信していないように見えることです。新しい関数を使用してこれを行います
Public Function MapButtonShowID(sBtnName As String, nSekNr As Integer)
Me.sekshow.Visible = True
Me.sekshow.Caption = "Sektion: " & sSekNr
End Function
sekshow は空のラベルです。クリックイベントの初期化のすぐ下でこれを呼び出します
For Each ctl In Me.Controls
If ctl.ControlType = acCommandButton Then
nSekNr = ParseNumber(ctl.Name, 6)
ctl.OnClick = "=MapButtonClick('" & sBtnName & "', '" & nSekNr & "')"
ctl.OnMouseMove = "=MapButtonShowId('" & sBtnName & "', '" & nSekNr & "')"
[...]
これにより、レポートに番号のない空の "Sektion: " が表示されます。
MsbBox を追加して、nSekNr がいずれかの関数に正しく与えられているかどうかを確認しました。確かに、クリック イベントが機能する場合は、正しい nSekNr が指定されているためです。どちらの関数も変数を受け取っていないことがわかりました - それは空です!
しかし、なぜクリックイベントが機能するのでしょうか? 問題のレポートには実際には内部フィルタリングはなく、一部のデータを表示する基本的なレポートにすぎません。
迷っています。
非常に多くのイベントがあるため、手動でイベントを割り当てることはほとんど不可能です。
おそらく、これを正しく行う方法があり、引数が空として指定されている場合でもクリックイベントが機能する理由を理解できますか?