
コマンドボタンやラベルの自分自身の情報を得る汎用的な方法はないでしょうか。
例えば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も見ています
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
ユーザーフォームで動的(Me.Controls.Add)に作成したコントロールの削除
Visual Basic(VBA)
-
-
4
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
5
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
6
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
7
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
8
ExcelVBAのコントロールの種類の取得方法
Visual Basic(VBA)
-
9
UserForm1.Showでエラーになります。
工学
-
10
Excel VBAで、実行時にsheet上のコマンドボタンのCaptionを変更する。
Excel(エクセル)
-
11
Excelでセル参照したとき、書式も一緒に持ってくるには?
Windows Vista・XP
-
12
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
13
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
14
アクセスVBAのMe!と[ ]
Access(アクセス)
-
15
フォーム上の現在アクティブなコントロールの取得
Access(アクセス)
-
16
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
17
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
18
ドロップダウンリスト 自動表示したい
Excel(エクセル)
-
19
テキストボックスのvalueとtextの違い
Visual Basic(VBA)
-
20
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAで、実行時にsheet上...
-
VBAのコントロールなんかをコレ...
-
EXCEL VBA テキストボックスの...
-
BackColor でてこなかった
-
エクセルVBAでmeに相当するもの...
-
エラー内容が分かりません
-
複数のデータ系列の線の太さを...
-
Powerpointでランダムな数字の...
-
VBAを一度起動するとずっと出て...
-
エクセルでツールバーに「縮小...
-
エクセルで、ハイパーリンクを...
-
フォルダ内の全ブックのシート...
-
ExcelVBAで今開いているユーザ...
-
複数のCSVファイルを横に並べて...
-
VBAでCSVの1行目だけを書き換え...
-
コピーしたファイルのマクロを...
-
マクロを設定したのに、拡張子...
-
【マクロ】宣言は、何のために...
-
エクセルVBA Workbook変数に変...
-
excelファイルに使われているVB...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAで、実行時にsheet上...
-
エクセルVBAでmeに相当するもの...
-
エラー内容が分かりません
-
キーボードでコマンドボタンを...
-
オプションボタン
-
コモンダイアログエラー
-
EXCEL VBA テキストボックスの...
-
エクセル2010のvbaとコマンドボ...
-
VBAのコントロールなんかをコレ...
-
アクセス カンレンダーコント...
-
EXCEL VBA カレンダーコントロ...
-
複数のデータ系列の線の太さを...
-
ExcelVBAで今開いているユーザ...
-
VBAを一度起動するとずっと出て...
-
エクセルでツールバーに「縮小...
-
フォルダ内の全ブックのシート...
-
コピーしたファイルのマクロを...
-
エクセル終了時の保存確認メッ...
-
昨日まで動いていたエクセルの...
-
VBA マクロ実行時エラー’1004Ra...
おすすめ情報