VBAでListBox、ComboBox、Frameのマウスホイールをオンにする方法
VBA は、ListBox、ComboBox、Frame、および UserForm のマウス ホイールをサポートしていません。 SonVuDev の VBA 用 MouseWheel は、たった 1 つの .bas ファイルと 2 行のコードで解決し、Excel、Access、Word、PowerPoint で実行できます。
この記事は現在、ベトナム語と英語でのみ利用可能です。英語版を表示しています。
Excel、Access、Word、または PowerPoint で VBA マクロを作成しているときに、ListBox / ComboBox / Frame マウス ホイールではなくキーでスクロールすることがわかりますか? これはソフトウェアのバグではなく、VBA の過去の制限です。 SonVuDev の
MouseWheel for VBA は、1 .bas ファイルと 2 行のコード だけでこの問題を解決します。 MSForms ライブラリは不要で、任意の VBA ホスト上で実行でき、64 ビットと 32 ビットの両方の Office をサポートします。
VBA はマウス ホイールでスクロールできないのはなぜですか?
VBA は .NET や WinForms ではありません。VBA は古いプログラミング言語であり、Office に深く統合されています。 ListBox、ComboBox、Frame などのコントロールには、WM_MOUSEWHEEL イベントをキャッチするために使用できるメッセージ ループがありません。 スクロールすると、Windows はそのメッセージを親ウィンドウ (ユーザー フォーム) に送信しますが、VBA はそのメッセージを子コントロールに転送しません。
結果: スクロール バーを手でドラッグするか、矢印キーを使用する必要があります。リストが長い場合は非常に不便です。
VBA でマウス ホイールをオンにする方法
- ダウンロードSonVuDev からの MouseWheel.bas
- ファイル .ba のインポート s を VBA プロジェクトに追加します (Alt+F11 → File → Import File)。
- イベント
UserForm_Initializeに、次の 2 行を追加します。Call MouseWheelEnable(Me)Call MouseWheelConfigure(Me, 3, True) - フォームの実行 - マウス ホイールは機能します。
機能
- MSForms への依存性はありません: 続き rol 型はダック タイピングによって検出され、追加の参照は必要ありません。
- すべてのホスト VBA をサポートします: Excel、Access、Word、PowerPoint、VB6。
- 64 ビットと 32 ビットをサポートします: VBA7 (Office 64 ビット) と VBA6 (Office 32 ビット) の両方run.
- 調整可能なスクロール速度:
MouseWheelConfigureを使用して設定します ロールごとにスクロールされる行数。 - 自己修復: フックのインストールが失敗した場合、ツールは再試行します。スタック状態はありません。
- 安全なフック解除: コントロールを離れるかフォームを閉じると、フックはきれいに削除されます。
- オプションDiagnostics:
EnableDebugまたはMWLogをオンにして、アクティビティ ログを表示します。 - プラットフォーム機能レポート:
IsWheelSupportedおよびPlatformNameは、現在のシステムがそれをサポートしているかどうかを示します。行。 - エンド ユーザーはマウス ホイールの使用に慣れており、スクロール バーの使用を望んでいません。
- UX を向上させたいと考えています。
結論
MouseWheel for VBA は、コンパクトで依存関係のない、統合が容易なソリューションです。 VBA を作成していて、フォームをマウスでスクロールできるようにしたい場合、これは適切なツールです。