![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
エクセルは2019です。
シート上にLabel1~Label120を配置してあります。
クリックされたLabelを認識したいのですが、
Private Sub Label1_Click()
Call Label_Click処理(1)
End Sub
これをLabelの数だけ並べるのを避けたい。
フォーム上にコントロールを配置場合のサンプルは複数散見されますが、シート上に配置した場合の例は見つけられませんでした。
どなたかアドバイスをいただけませんでしょうか。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
No3です。
>想像以上に面倒な処理が必要なことを理解しました。
>Labelの数だけ、イベント処理プログラムを記述することにします。
ん?
どうしてもActiveXでなければならない理由がある場合は仕方がないですが、フォームコントロールのラベルをシート上に配置するのでも良ければ(見た目や機能は、ほぼ同じはずです)、No3の前半の方法であれば複雑ではない
と思いますけれど?
ちなみに、こちらの方法であれば、コントロールのラベルに限らず、シート上の図形(=四角や楕円など)のオブジェクトでも使用することが可能です。
(図形の方が、立体的なボタンなどを作りやすいので・・)
仮に、イベント処理を個別に記述してゆく方法をとるにしても、(記述内容が同じなので)「マクロの記述自体をマクロで行う」という方法もないことではありません。
No.4
- 回答日時:
No.2です。
私が書いたコードってどっちだろう?
昔の事で記憶が置き去りにされたか?
>ちなみにシート上に配置するフォームコントロールの方です。
ではなく、ActiveXなんだろうか???
No.3
- 回答日時:
こんにちは
シート上のラベルといっても、「フォームコントロール」と「ActiveXオブジェクト」とがあって、どちらを使うかによって扱いが変わります。
フォームコントロールの場合は比較的簡単ですが、ActiveXオブジェクトの場合はそれなりに面倒です。
ご提示の、
>Private Sub Label1_Click() ~~
は、ActiveXオブジェクトのように見受けられますけれど・・・
・フォームコントロールの場合
Application.Callerで呼び出し元を取得できますので、これを利用すれば宜しいでしょう。
例えば、以下の処理を標準モジュールに作成しておきます。
Sub hoge()
Dim sp
Set sp = ActiveSheet.Shapes(Application.Caller)
MsgBox sp.Name
End Sub
ラベルを1個作成した段階で、マクロの登録で上記hogeを登録します。
(こうしておくことで、後は、コピペでマクロ登録済みのラベルを作成できます)
上記であれば、クリックした際に、そのラベルの名称が表示されます。
・ActiveXオブジェクトの場合
こちらの場合は、イベント処理を個別にしか設定できないようですので少々面倒です。
以下のページの中ほどにシート上に配置した場合の例がでていますので、ご参考になればと。
クラスでイベントを定義しておいて、そのクラスオブジェクトに設定する仕組みのようです。
(内容は確認していませんが、悪しからず)
https://gabekore.org/vba-control-array
想像以上に面倒な処理が必要なことを理解しました。
私のレベルでは理解が困難と思われますので、泥臭く、質問文に記したようにLabelの数だけ、イベント処理プログラムを記述することにします。
アドバイスありがとうございました。
No.2
- 回答日時:
15年程前にExcel2002で作成した、チェックボックスをクリックしたら配置している行を塗りつぶすコードです。
参考にならなければ蹴飛ばしてください。
ちなみにシート上に配置するフォームコントロールの方です。
・標準モジュールに
Private myCom(30) As New Class1
Private i As Integer
Sub try()
Dim objCom As Object
Dim r As Range
Set r = Worksheets("Sheet1").Range("A3:I3")
i = 0
For Each objCom In ActiveSheet.OLEObjects
If objCom.Name Like "CheckBox*" Then
objCom.Object = False
Set myCom(i).comC = objCom.Object
Set myCom(i).rC = r.Offset(i)
i = i + 1
End If
Next
End Sub
Sub try2()
Dim j As Integer
Application.ScreenUpdating = False
For j = 0 To i - 1
myCom(j).comC = False
myCom(j).rC.Interior.ColorIndex = -4142
Set myCom(j).comC = Nothing
Set myCom(j).rC = Nothing
Next
Application.ScreenUpdating = True
End Sub
------------------
tryは事前準備、try2は後処理でマクロからの実行でも良いですしボタンなどに組み付けても宜しいかと。
次がメインでクラスモジュールを追加し名前はデフォルトでClass1のまま。
・クラスモジュールに
Public WithEvents comC As MSForms.CheckBox
Public rC As Range
Private Sub comC_Click()
If comC.Value Then
rC.Interior.ColorIndex = 16
Else
rC.Interior.ColorIndex = -4142
End If
End Sub
古いコードでごめんなさい。
![「エクセルのシート上に配置されたLabel」の回答画像2](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/8/543105175_61df9119dc9a7/M.png)
希望していたのは、ユーザーフォームは使用せずにシートに直接Labelを多数配置した場合の、クリックイベント確認を簡単な記述で済ませられないかと考えていました。
諦めて、Labelの数だけ処理プログラムを記述することにします。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- PHP 掲示板を作成しておりアップロードファイルとメッセージを並べたいので、アドバイスお願い致します 2 2023/07/17 21:01
- その他(プログラミング・Web制作) seleniumbasic chrome操作について 1 2023/03/29 15:40
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- PHP アップロードファイルの数に応じてCSSを動的に変更したいのですが、方法がわかりません 3 2023/07/23 21:59
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP ワードプレスプラグイン MW WP formについて(aria-labelを追加したい) 1 2023/06/05 17:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
モジュールの最大数はいくつな...
-
グラフのX,Y座標を取得したい
-
Excel VBA 定義されたプロージ...
-
大量の標準モジュールを解放す...
-
AddressOf と同じ機能を持った...
-
Perlでモジュールをインストー...
-
標準モジュールを削除したい。(...
-
エクセルVBAでシートモジュール...
-
Excel VBA 標準モジュール内で...
-
EXECEL VBA コマンドボタンか...
-
VBのフォームモジュールと標準...
-
VBAのモジュールについて教えて...
-
Excel VBA 『Call』で呼び出す...
-
VBでグローバル変数を宣言するには
-
VRMは何の略
-
VBA This Workbookモジュール...
-
VBAProjectのモジュ...
-
pythonでファイル移動できません。
-
本当にPublicな変数(配列で)
-
【ExcelVBA】commandButtonをク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
VBでグローバル変数を宣言するには
-
エクセルVBAでシートモジュール...
-
'Range'メソッドは失敗しました
-
グラフのX,Y座標を取得したい
-
VBA This Workbookモジュール...
-
Excel VBA 『Call』で呼び出す...
-
【vba】フォームに書いてあ...
-
VBAで旧字体を異字体に一括で変...
-
Excel VBAで、ユーザーフォーム...
-
モジュールとクラスの違いって...
-
Excelで時刻になったら知らせて...
-
Access VBA標準モジュールにつ...
-
Excel VBA 定義されたプロージ...
-
標準モジュールを削除したい。(...
-
モジュールとは何ですか
-
ベースモジュールって?
-
モジュールの最大数はいくつな...
おすすめ情報