重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim a As Integer, b As Integer
a = TextBox1.Top
b = TextBox1.Left
ComboBox1.Top = a
ComboBox1.Left = b

End Sub
こんなのを複数のTextBoxに書かなくてもよい方法はないでしょーか

A 回答 (1件)

こんにちは



シート上にActiveXのTextBoxを設置している場合として回答しています。

処理の内容を一般化して、別のサブルーチンにまとめることは可能だと思いますが、イベント発生時に呼び出されるルーチンの名称はオブジェクト名になっているので、最低限のコード記載は必要と考えられます。

TextBoxの数にもよりますが、一般化したとして、
 Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  Call Ippann(Application.Caller)
 End Sub
といった、3行のコードをコピペで作成するのが簡単かと思います。

それが大変な数である場合は、「VBAで上記のコードをセットする」ということも考えられます。
シート上のTextBoxを調べて、それぞれに対応するイベント処理のコードを設定するという考えです。
以下あたりをご参考までに
https://hake.hatenablog.com/entry/20170812/p1
https://excelappwithvba.web.fc2.com/generating_r …
https://excelwork.info/excel/codemoduleproperty/

とは言え、それなりに面倒と思いますので、全く別の方式になってはしまいますが、以下の様な方法が比較的簡単ではないかと想像します。
 ・TextBoxの代わりに、FormControlのButton等を利用する
 ・(セル位置を把握するので)Text入力にはButton隣のセルを利用する
とうような考えです。
このButtonの場合は、クリック時の処理を自由に登録できるので、上記のようにオブジェクト名に拘束されることがありません。
ですので、最初にButtonに一般化した処理を登録しておいて、その後、コピーして複製を作成すれば、全部のButtonでクリック時に同じ処理が呼び出されるようになります。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2020/05/04 18:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す