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で質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Accessにインポートした複数のテーブルを表示させる方法が分かりません。 1 2023/01/30 20:22
- Access(アクセス) アクセス 意図せずサブプロシージャを移動してしまうのを止めたい 1 2022/09/02 09:19
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Access(アクセス) マイクロソフト アクセス2021のフォームビュー作成でレイアウトを帳票形式から単票形式にあとから変更 1 2023/03/03 10:56
- Access(アクセス) access レポート 請求書について 2 2022/07/04 22:52
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- Excel(エクセル) エクセルのマクロ設定 1 2023/04/05 19:37
- Visual Basic(VBA) VB.net フォーム 親子 1 2022/07/04 19:00
- AJAX 入力フォームの値をQRコードで入力できるようにしたい。 6 2023/03/29 08:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelシート上のマクロを登録し...
-
エクセルの画面にユーザーフォ...
-
Excelで、ボタンにコメントをつ...
-
マクロで作ったボタンのサイズ...
-
複数シートのボタンに同一の動...
-
UPS警告音を止めたい
-
エクセルでグループボックスを...
-
【Excel VBA】マクロボタンを表...
-
EXCELのマクロが 実行時エラー5...
-
ユーザーフォームをショートカ...
-
入力済み、選択したセルに連動...
-
エクセルVBAオプションボタンの...
-
Accessのフォームでタブの色
-
エクセルでマクロボタンを押す...
-
excel スクロールしても常にボ...
-
エクセルVBA フォームへ動...
-
マクロ初心者です。 msgboxのre...
-
日報の休日ボタン(トグルボタ...
-
APEXをパソコンでしようとゲー...
-
Access VBAでボタンの背景色を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelシート上のマクロを登録し...
-
エクセルの画面にユーザーフォ...
-
【Excel VBA】マクロボタンを表...
-
UPS警告音を止めたい
-
Excel ラジオボタンのリセット...
-
Excelで、ボタンにコメントをつ...
-
複数シートのボタンに同一の動...
-
フォームコントロールから作っ...
-
ユーザーフォームをショートカ...
-
マクロで作ったボタンのサイズ...
-
エクセルで、オプションボタン...
-
EXCELのマクロが 実行時エラー5...
-
EXCELの塗りつぶしのボタ...
-
エクセルでマクロボタンを押す...
-
excel スクロールしても常にボ...
-
Accessのフォームでタブの色
-
入力済み、選択したセルに連動...
-
マクロ初心者です。 msgboxのre...
-
Access VBAでボタンの背景色を...
-
VBAでクリアボタンのみ残してシ...
おすすめ情報