軽く経緯をば。
環境はそこまで重要ではないと思いますが、windows11pro 21H2 Microsoft365pro(access2021相当)ざんす。
とあるユーザーで、マウスホイール制御モジュール(VBAに組み込む感じ)を使ってまして、access2010時代からの遺物なんすが、このところaccessがフリーズすることが多くなったとのことで、他のユーザーとの違いはこの「マウスホイール制御モジュール」ぐらいなんで、必要ないし排除しちまえってことで、削除したんすが、VBAのコンパイルでエラーが出てしまって、ググっても頓珍漢なことばっかりでどうしようかなぁと思ってたんすよね。
エラーメッセージが「ユーザー定義型は定義されていません。」ってやつなんだけど、参照型を見直せ言うてるんやけど、マウスホイール制御モジュールはずす前は大丈夫だったんで、見直しようもないんすよね。
ちなみにマウスホイール制御モジュールって下記のようなやつ、
---------------------------------------------------------------
Private frm As Object
Private intCancel As Integer
Public Event MouseWheel(Cancel As Integer)
Public Property Set Form(frmIn As Object)
Set frm = frmIn
End Property
Public Property Get MouseWheelCancel() As Integer
MouseWheelCancel = intCancel
End Property
Public Sub SubClassHookForm()
lpPrevWndProc = SetWindowLong(frm.hWnd, GWL_WNDPROC, AddressOf WindowProc)
Set CMouse = Me
End Sub
Public Sub SubClassUnHookForm()
Call SetWindowLong(frm.hWnd, GWL_WNDPROC, lpPrevWndProc)
End Sub
Public Sub FireMouseWheel()
RaiseEvent MouseWheel(intCancel)
End Sub
---------------------------------------------------------------
Public CMouse As CMouseWheel
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, _
ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = -4
Public Const WM_MouseWheel = &H20A
Public lpPrevWndProc As Long
Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case WM_MouseWheel
CMouse.FireMouseWheel
If CMouse.MouseWheelCancel = False Then
WindowProc = CallWindowProc(lpPrevWndProc, hWnd, uMsg, wParam, lParam)
End If
Case Else
WindowProc = CallWindowProc(lpPrevWndProc, hWnd, uMsg, wParam, lParam)
End Select
End Function
-----------------------------------------------------------------
なんか今は動作いまいちだけど、組み込んだ当時は単票フォームとかでマウスホイールをくりくり回してもレコードが移動したりすることがないという画期的なモジュールだったんすよ。
というわけで、困った時のいつもの解決法、新しいMDBに、動作不安定なMDBからすべてのテーブル・クエリー・フォーム・レポート・マクロ・モジュールをインポートして完了。エラーは解消されました。
ただこの方法をやると今度はこの新しいMDBの動作が妙に重ったるくなっちまうこともあるんすが、今回は大丈夫そうざんす。
たまには、Microsoftフォーラムでこの手のわけわからん現象をビシッと解決してくれる方策を示してほしいもんだなと。
環境はそこまで重要ではないと思いますが、windows11pro 21H2 Microsoft365pro(access2021相当)ざんす。
とあるユーザーで、マウスホイール制御モジュール(VBAに組み込む感じ)を使ってまして、access2010時代からの遺物なんすが、このところaccessがフリーズすることが多くなったとのことで、他のユーザーとの違いはこの「マウスホイール制御モジュール」ぐらいなんで、必要ないし排除しちまえってことで、削除したんすが、VBAのコンパイルでエラーが出てしまって、ググっても頓珍漢なことばっかりでどうしようかなぁと思ってたんすよね。
エラーメッセージが「ユーザー定義型は定義されていません。」ってやつなんだけど、参照型を見直せ言うてるんやけど、マウスホイール制御モジュールはずす前は大丈夫だったんで、見直しようもないんすよね。
ちなみにマウスホイール制御モジュールって下記のようなやつ、
---------------------------------------------------------------
Private frm As Object
Private intCancel As Integer
Public Event MouseWheel(Cancel As Integer)
Public Property Set Form(frmIn As Object)
Set frm = frmIn
End Property
Public Property Get MouseWheelCancel() As Integer
MouseWheelCancel = intCancel
End Property
Public Sub SubClassHookForm()
lpPrevWndProc = SetWindowLong(frm.hWnd, GWL_WNDPROC, AddressOf WindowProc)
Set CMouse = Me
End Sub
Public Sub SubClassUnHookForm()
Call SetWindowLong(frm.hWnd, GWL_WNDPROC, lpPrevWndProc)
End Sub
Public Sub FireMouseWheel()
RaiseEvent MouseWheel(intCancel)
End Sub
---------------------------------------------------------------
Public CMouse As CMouseWheel
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, _
ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = -4
Public Const WM_MouseWheel = &H20A
Public lpPrevWndProc As Long
Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case WM_MouseWheel
CMouse.FireMouseWheel
If CMouse.MouseWheelCancel = False Then
WindowProc = CallWindowProc(lpPrevWndProc, hWnd, uMsg, wParam, lParam)
End If
Case Else
WindowProc = CallWindowProc(lpPrevWndProc, hWnd, uMsg, wParam, lParam)
End Select
End Function
-----------------------------------------------------------------
なんか今は動作いまいちだけど、組み込んだ当時は単票フォームとかでマウスホイールをくりくり回してもレコードが移動したりすることがないという画期的なモジュールだったんすよ。
というわけで、困った時のいつもの解決法、新しいMDBに、動作不安定なMDBからすべてのテーブル・クエリー・フォーム・レポート・マクロ・モジュールをインポートして完了。エラーは解消されました。
ただこの方法をやると今度はこの新しいMDBの動作が妙に重ったるくなっちまうこともあるんすが、今回は大丈夫そうざんす。
たまには、Microsoftフォーラムでこの手のわけわからん現象をビシッと解決してくれる方策を示してほしいもんだなと。
※コメント投稿者のブログIDはブログ作成者のみに通知されます