- ベストアンサー
ExcelVBAでユーザーフォームのイベント対応
- ExcelVBAを使用して、ユーザーフォーム上のComboBoxにマウスポインターを当てた際に、選択された項目に応じて説明の文字を表示する方法について教えてください。
- ComboBox1からComboBox6までの各ComboBoxに対して同じコードを書く必要があるのか、もっと簡単な方法があるのか教えてください。
- コード内の変数Button、Shift、X、Yの意味と役割について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>これをもっと簡単に書くことはできないでしょうか? 別のプロシージャに共通部分を抜き出すのが一般的です。 ComboBox型変数にコンボボックスを格納できる事を知っていれば、後は他の共通プロシージャと同じです。 以下に例を挙げます。 ・各ボタンに設定するイベントプロシージャ。ComboBox6まで同様に設定。 Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Call OutputLabel(Me.ComboBox1) End Sub ・共通プロシージャ。ComboBox型変数で受ける。 Private Sub OutputLabel(ComboB As ComboBox) If ComboB.Value = "名称" Then Exit Sub Me.Label123.Caption = ComboB.Value & Range(ComboB.ControlSource).Offset(0, 9).Value End Sub >変数(Button、Shift、X、Y)の意味と役割 検索すればすぐに出てきますが https://docs.microsoft.com/ja-jp/office/vba/api/excel.chart.mousemove button:押されたマウスボタン。1なら左、2なら右ボタンが押されている。 Shift:Shift、Ctrl、およびAltキーが押されているか。1ならShiftキー、2ならCtrlキー、4ならAltキーが押されている。 X:マウスポインターのx座標。 Y:マウスポインターのy座標。
その他の回答 (2)
- masnoske
- ベストアンサー率35% (67/190)
クラスモジュールを理解できるなら、こちらのページが参考になります。 https://blog.goo.ne.jp/pc_college/e/9ca2b0c452e9e691cad1dbd2783868cf 電卓のボタン(CommandButtonコントール)をクラス定義し、Clickイベントを使って押されたボタンのTextを返しています。 CommandButtonコントールをComboBoxコントロールに、ClickイベントをMouseMoveイベントに置き換えればOKです。
お礼
ありがとうございます。クラスモジュールとは初めて聞きました。勉強してみます。
- kkkkkm
- ベストアンサー率66% (1719/2589)
> 下記のコードの変数(Button、Shift、X、Y)の意味と役割は何でしょうか? 下記サイトを参考にしてください。 https://officedic.com/excel-vba-userform-mousemove-event/ > これをもっと簡単に書くことはできないでしょうか 簡単になっていないような感じですが一つの案として Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If Me.ComboBox1.Value = "名称" Then Exit Sub Call Test("ComboBox", 1) End Sub Private Sub ComboBox2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If Me.ComboBox2.Value = "名称" Then Exit Sub Call Test("ComboBox", 2) End Sub Function Test(ByVal CtrName As String, ByVal CtrNo As Integer) Me.Label23.Caption = Me.Controls(CtrName & CtrNo).Value & Range(Me.Controls(CtrName & CtrNo).ControlSource).Offset(, 9).Value End Function
お礼
ありがとうございました。勉強になりました。
お礼
ありがとうございました!とても勉強になりました。