コマンドボタンやラベルの自分自身の情報を得る汎用的な方法はないでしょうか。
例えばCommandButton1のCaptionを表示する場合、以下のようにコーディングしています。
Private Sub CommandButton1_Click()
MsgBox CommandButton1.Caption
End Sub
CommandButton1.Captionと書いておりますが、CommandButton1と書かずに自分自身を指定する方法はないでしょうか?
遥か昔マッキントッシュのハイパーカードでは、自分自身の名称を得る時に「name of me」で可能でしたが、このmeに相当するものはエクセルではどのようになるのでしょうか?
よろしくお願い申し上げます。
No.2ベストアンサー
- 回答日時:
こんばんは。
> MsgBox CommandButton1.Caption
いったい、どこのボタンか判別がつきにくいです。コマンドボタンやラベルは、いくつか種類のものがあるからです。
>コマンドボタンやラベルの自分自身の情報を得る汎用的な方法はないでしょうか。
コントロールツールの場合は、ありません。
必要なら、インスタンスを設けるしかないと思いますが、あまり実務的ではありませんね。ただ、通常、入力の際には、インテリセンスがありますから、その入力自体の問題はないと思いますが。
#1 さんのActiveControl は、UserFormだけのものだと思います。
コントロールツールの場合:
'----------------------------------------------------
'標準モジュール
Private myCol As Collection
Sub Auto_Open()
Call myButtonClass_Setting
End Sub
Sub myButtonClass_Setting()
Dim objOLE As Object
Dim i As Integer
Dim myClass As Class1
Set myCol = New Collection
For Each objOLE In ThisWorkbook.Worksheets("Sheet1").OLEObjects
If TypeOf objOLE.Object Is MSForms.CommandButton Then
Set myClass = New Class1
Set myClass.myBtn = objOLE.Object
myCol.Add myClass
End If
Next
End Sub
'Class1
Public WithEvents myBtn As MSForms.CommandButton
Private Sub myBtn_Click()
MsgBox myBtn.Caption
End Sub
'----------------------------------------------------
'なお、フォーム・ツールですと、Application.Caller が使えます。
'標準モジュール
Sub MyFormButton_Click()
MsgBox ActiveSheet.Shapes(Application.Caller).Name
End Sub
'----------------------------------------------------
回答ありがとうございます。
シートにボタンをつけています。
簡単にできる方法を探していたのですが、かなり面倒ですね。
その都度、ボタン名、ラベル名を書く方が簡単なようですね。
エクセルはボタンやラベルにコードを設定できてハイパーカードに良く似ていると思っていましたが、そこまでオブジェクト化されていないようですね。
大昔68030の時代マックでエクセル(VBAではありませんでした)とハイパーカードを良く利用していました。
No.3
- 回答日時:
こんにちは。
> CommandButton1と書かずに自分自身を指定する方法はないでしょうか?
Me キーワードはモジュール(主に Form、Class、Sheet)自信の代替として
使用します。コントロールのレベルで Me に相当するようなキーワードは
VB には用意されていないと思います。
私見ですが、その必要性を感じません。なぜなら、コードの可読性が著しく
損なわれそうな気がするからです。
ご質問の背景として考えられそうな点から回答すると...
▼コントロールの名前を入力するのが面倒
コントロールの名前を CB1 とでも短いものにすれば良いのでは?
あるいは、例えば Com まで入力してから、[Ctrl] + [Space] で VBE の
入力補完機能を使えば手間は省けますよ。
▼プロシージャに汎用性を持たせたい(共通化したい)
サブプロシージャを設けて、引数で渡せば良いのでは?
Private Sub CommandButton1_Click()
Call Test(CommandButton1)
End Sub
Private Sub CommandButton2_Click()
Call Test(CommandButton2)
End Sub
' // サブプロシージャ
Private Sub Test(ByVal Cb As MSForms.CommandButton)
MsgBox Cb.Caption
End Sub
ご参考までに。
回答ありがとうございます。
実は既にサブモジュールは使っております。
ただし呼び出し側でCaptionをストリングに取り出してサブモジュールに渡していました。
回答していただいた方法の方が、よりすっきりしますね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- PHP 記述のおかしいところを教えて下さい。 1 2023/02/03 11:25
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- 英語 I'd rather you stopped sending me ★a text★ ??? 1 2022/12/28 17:06
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
ちょっと先の未来クイズ第6問
2025年1月2日と1月3日に行われる、第101回箱根駅伝(東京箱根間往復大学駅伝競走)で、上位3位に入賞するチームはどこでしょう?
-
自分独自の健康法はある?
こうしていると調子がいい!みたいな自分独自の健康法、こだわりはありますか?
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
フォーム上の現在アクティブなコントロールの取得
Access(アクセス)
-
-
4
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
5
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
6
アクセスVBAのMe!と[ ]
Access(アクセス)
-
7
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
8
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
9
With~EndWithの省略部分と引数指定について
Visual Basic(VBA)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
テキストボックスのvalueとtextの違い
Visual Basic(VBA)
-
12
UserForm1.Showでエラーになります。
工学
-
13
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
14
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
15
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
16
ユーザーフォーム スクロールバー 非表示にしたい
Excel(エクセル)
-
17
Excel VBA Application.caller エラー2023について
Visual Basic(VBA)
-
18
リストビューをスクロールさせるには
Visual Basic(VBA)
-
19
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
20
コマンドボタンのEnterイベント後に、フォーカスを移動したい。
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAで、実行時にsheet上...
-
エクセルVBAでmeに相当するもの...
-
EXCEL VBA テキストボックスの...
-
オプションボタン
-
昨日まで動いていたエクセルの...
-
ExcelVBAで今開いているユーザ...
-
複数のデータ系列の線の太さを...
-
cellsで特定の離れた範囲を選択...
-
マクロを消すマクロは不可能?
-
VBA マクロ実行時エラー’1004Ra...
-
すでに開いているブックのマク...
-
excelインポート時の「実行時エ...
-
エクセルVBA Workbook変数に変...
-
Excelが勝手にシート移動してし...
-
フォルダ内の全ブックのシート...
-
別のパソコンでエクセルのマク...
-
エクセルでツールバーに「縮小...
-
Excelマクロ ファイル名が変わ...
-
複数のCSVファイルを横に並べて...
-
VB2010でExcelの行をコピーして...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAで、実行時にsheet上...
-
エラー内容が分かりません
-
エクセルVBAでmeに相当するもの...
-
オプションボタン
-
EXCEL VBA テキストボックスの...
-
コモンダイアログエラー
-
ワードVBAで画像を挿入
-
キーボードでコマンドボタンを...
-
エクセル2010のvbaとコマンドボ...
-
複数のデータ系列の線の太さを...
-
ExcelVBAで今開いているユーザ...
-
エクセルでツールバーに「縮小...
-
VBAを一度起動するとずっと出て...
-
コピーしたファイルのマクロを...
-
フォルダ内の全ブックのシート...
-
Powerpointでランダムな数字の...
-
VBA マクロ実行時エラー’1004Ra...
-
昨日まで動いていたエクセルの...
-
ファイル名を今日の日付、時刻...
-
cellsで特定の離れた範囲を選択...
おすすめ情報