• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelVBAでユーザーフォームのイベント対応)

ExcelVBAでユーザーフォームのイベント対応

このQ&Aのポイント
  • ExcelVBAを使用して、ユーザーフォーム上のComboBoxにマウスポインターを当てた際に、選択された項目に応じて説明の文字を表示する方法について教えてください。
  • ComboBox1からComboBox6までの各ComboBoxに対して同じコードを書く必要があるのか、もっと簡単な方法があるのか教えてください。
  • コード内の変数Button、Shift、X、Yの意味と役割について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.1

>これをもっと簡単に書くことはできないでしょうか? 別のプロシージャに共通部分を抜き出すのが一般的です。 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座標。

mocodne
質問者

お礼

ありがとうございました!とても勉強になりました。

その他の回答 (2)

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.3

クラスモジュールを理解できるなら、こちらのページが参考になります。 https://blog.goo.ne.jp/pc_college/e/9ca2b0c452e9e691cad1dbd2783868cf 電卓のボタン(CommandButtonコントール)をクラス定義し、Clickイベントを使って押されたボタンのTextを返しています。 CommandButtonコントールをComboBoxコントロールに、ClickイベントをMouseMoveイベントに置き換えればOKです。

mocodne
質問者

お礼

ありがとうございます。クラスモジュールとは初めて聞きました。勉強してみます。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

> 下記のコードの変数(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

mocodne
質問者

お礼

ありがとうございました。勉強になりました。

関連するQ&A