No.4ベストアンサー
- 回答日時:
追加したボタンをクリックしたときに動くモジュールはどうするつもりですか? 予め追加するボタンの分だけ
Private Sub CommandButton*_Click()
End Sub
を書いておいても、うまくいくかどうか? …です。もう試されましたか?
追加したボタンをクリックしたときに処理を動かすためには、他の回答者さまも述べているように、クラスモジュールを使う必要があるように思います。あまり得手ではないのですが試しにサンプルを書いてみました。
まずユーザーフォーム右下にコマンドボタン1つを配置します。ユーザフォームはボタンを追加するので、少し大きめに作っておくとよいです。このコマンドボタンは「ボタン追加」の意味があります
そして以下をユーザーフォームモジュールシートとユーザフォームシートにそれぞれ貼り付けます。後は
Userform1.Show
でユーザフォームを呼び出して、ボタンをクリックしてみてください
(Office2003で確認済みです)
ユーザーフォームモジュール
Dim myCb() As Class1
Private Sub CommandButton1_Click()
Dim ctrl As Control
Dim cnt As Integer
For Each ctrl In UserForm1.Controls
If TypeName(ctrl) = "CommandButton" Then
cnt = cnt + 1
End If
Next
With Me.Controls.Add("Forms.CommandButton.1")
.Top = cnt * 40
.Left = 20
.Width = 80
.Caption = .Name
End With
Call UserForm_Initialize
End Sub
Private Sub UserForm_Initialize()
Dim cnt, i As Integer
For Each ctrl In UserForm1.Controls
If TypeName(ctrl) = "CommandButton" Then
cnt = cnt + 1
End If
Next
ReDim myCb(1 To cnt)
For i = 1 To cnt
Set myCb(i) = New Class1
Set myCb(i).opt = Me.Controls("CommandButton" & CStr(i))
Next i
End Sub
クラスモジュール(モジュール名:Class1)に貼り付け
Public WithEvents myCb As MSForms.CommandButton
Public Property Set opt(setcb As MSForms.CommandButton)
Set myCb = setcb
End Property
Public Property Get opt() As MSForms.CommandButton
End Property
Sub myCb_Click()
MsgBox myCb.Name & " がクリックされました"
End Sub
これを見て「わからん」なら可視、不可視で実現する方をお薦めしますが…
今回、初めてクラスモジュールというものを使いました。
まだ、わかっていませんが、ぼちぼちやりたいと思います。
コード、ご意見ありがとうございました。
自分だけでは、不可能でした。
ありがとうございました。
No.3
- 回答日時:
私もやってみました。
ラベルの例では
http://sunrise2001.dip.jp/coo/lactic.html
に例があります。
ーー
しかし、質問者は#1のご回答者が、
>追加するボタンが不定ならクラスモジュールを使わないと
イベント処理できませんよ? Click イベントとか
とおっしゃっている、難しさに気づいていないのではないでしょうか。私もそうですが、質問者には荷が重いことをやろうとしているということです。
ラベルのように、実行中に、情報をラベルに表示をさせて、役割を果たせるものは、それで良いが、コマンドボタンは、それにイベント・プロをくっつけてこそ、フォームにそれを作った意味があります。しかし作るのは進んだスキルがいるようですね。
ちなみに、下記では実行が終わったらユザーフォーム1上に何も残っていませんでしょ。
ーー
Private Sub UserForm_Initialize()
Me.Height = 300
For i = 1 To 5
s = "ボタン" & i
With Me.Controls.Add("Forms.CommandButton.1", , True)
.Top = (i - 1) * 40 + 10
.Left = 20
.Width = 50
.Height = 30
.Caption = "ボタン" & i
End With
Next i
End Sub
No.2
- 回答日時:
> もし、ラベルを作成したいとするととかだとどうなるのでしょうか?
bstrProgID に指定する文字列。VBA ヘルプからの引用です。
Forms.CheckBox.1
Forms.ComboBox.1
Forms.CommandButton.1
Forms.Frame.1
Forms.Image.1
Forms.Label.1 <---- ラベル
Forms.ListBox.1
Forms.MultiPage.1
Forms.OptionButton.1
Forms.ScrollBar.1
Forms.SpinButton.1
Forms.TabStrip.1
Forms.TextBox.1
Forms.ToggleButton.1
> Meというのはどういった意味があるのでしょうか?
Me キーワードは簡単に言えばオブジェクトモジュールの代名詞です。
ここでは、Userform モジュールで Me と書いているので、Userform
のことになります。例えば、
Userform1.Caption = "Test"
と書くところを
Me.Caption = "Test"
と書くことができます。
この利点は、前者はモジュールの名前を変更するとコード全体を修正
することになりますが、後者の場合は影響を受けません。
Me キーワードが何の代名詞となるかは、Me キーワードがどこに書か
れているかで決まります。
No.1
- 回答日時:
動的に Userform にボタンを追加するなら、下記のようなコードで
できますけど...
With Me.Controls.Add(bstrProgId:="Forms.CommandButton.1")
.Caption = "TEST"
.Width = 200
.Height = 18
.Top = 10
.Left = 10
End With
でも、追加するボタンが不定ならクラスモジュールを使わないと
イベント処理できませんよ? Click イベントとか。
この回答への補足
回答ありがとうございます。
出来ました。
それで、コードについてもう少し聞きたいのですが、
With Me.Controls.Add(bstrProgId:="Forms.CommandButton.1")
という文の中で"Forms.CommandButton.1"がコマンドボタンを作成するということでしょうか?
もし、ラベルを作成したいとするととかだとどうなるのでしょうか?
試しにLabelに変えただけではだめでした。
あと、Meというのはどういった意味があるのでしょうか?
度々、申し訳ありませんが、よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelシート上のマクロを登録し...
-
Excel ラジオボタンのリセット...
-
EXCELのマクロが 実行時エラー5...
-
エクセルの画面にユーザーフォ...
-
Excelで、ボタンにコメントをつ...
-
VBAでクリアボタンのみ残してシ...
-
InputBox関数でキャンセルボタ...
-
Access VBAでボタンの背景色を...
-
入力済み、選択したセルに連動...
-
パナソニックKX-PW22CLHの電話...
-
【Excel VBA】マクロボタンを表...
-
ユーザーフォームをショートカ...
-
フレーム内のオプションボタン...
-
UPS警告音を止めたい
-
Accessのフォームでタブの色
-
マクロで作ったボタンのサイズ...
-
エクセルでマクロボタンを押す...
-
アクセスのイベントプロシージ...
-
エクセルの×ボタンを消したい
-
エクセルのチェックボックスと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelシート上のマクロを登録し...
-
UPS警告音を止めたい
-
エクセルの画面にユーザーフォ...
-
【Excel VBA】マクロボタンを表...
-
ユーザーフォームをショートカ...
-
Excel ラジオボタンのリセット...
-
フォームコントロールから作っ...
-
エクセルで、オプションボタン...
-
Accessのフォームでタブの色
-
複数シートのボタンに同一の動...
-
マクロを登録しているボタンが...
-
Excelで、ボタンにコメントをつ...
-
マクロで作ったボタンのサイズ...
-
excel スクロールしても常にボ...
-
EXCELの塗りつぶしのボタ...
-
VBAでオプションボタンなどそれ...
-
EXCELのマクロが 実行時エラー5...
-
マクロ初心者です。 msgboxのre...
-
VBAでクリアボタンのみ残してシ...
-
Access VBAでボタンの背景色を...
おすすめ情報