質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

4回答

3808閲覧

VBA コマンド作成

Yoshikun_0945

総合スコア224

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/08/04 04:08

VBA【Excel】において、Label・commandボタンなどのコマンドをフォーム上に作成するときに、コードで作成することできますか?

ネットで調べても情報が出てきませんでした。

また、コマンドをコードで削除する方法もあったら教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

作成はこんな感じにすればできます。

VBA

1Set label1 = Me.Controls.Add("Forms.Label.1", "label1") 2label1.Left = 100 3label1.Top = 20 4label1.Caption = "生成されたラベル"

削除は試してみたんですけどできないですね。
もう少し調べてみて方法がわかったら追記します。

追記
上記の方法で作成したものについては、以下の方法で削除することができました。

VBA

1Me.Controls.Remove "label1"

デザイン時からあるコントロールについては今の所方法が見つかっていません。

投稿2017/08/04 04:35

編集2017/08/04 05:04
ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。
なぜ、追加したり削除したりする必要があるのか不明なのですが、一般的には表示/非表示で対応します。

VBA

1[ボタンやラベルのコントロール名].visible=True

作成時はFalseで非表示にしておき、必要な時にTrueとしてやれば良いので。

仕様によりますが、フォーム自体を表示/非表示にもできますので、動的にコントロールを追加/削除するよりは敷居が低くて済みます。

投稿2017/08/08 03:37

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

既にほかの方々からもアドバイスがある通り、ラベルやボタンを動的に作成すること自体は簡単です。

でもラベルは表示するだけでよさそうですが、ボタンは作成したら当然クリックイベントを処理したいですよね。
ここが面倒なところです。

以下のサイトが参考になると思いますが、動的に作成したボタンのクリックイベントをとるためには、独自にクラスを作成してあげる必要があります。
⇒参考サイト

以下のサンプルではユーザークラス(MyButton)とUserForm1を用意し、UserForm1の起動時に動的にボタンを10個生成するようになっています。
各ボタンの処理はボタン名で判別してMyButtonクラス内で処理しています。

MyButtonクラスモジュール

' コマンドボタンの実態をクラスモジュールに作成しておく Public WithEvents button As CommandButton ' クリックイベント発生時の動作 Private Sub button_Click() Select Case button.Name Case "btn1" Call btn01_Click Case "btn2" Call btn02_Click Case "btn10" Call btn10_Click End Select End Sub Sub btn01_Click() MsgBox "01" End Sub Sub btn02_Click() MsgBox "02" End Sub Sub btn10_Click() MsgBox "10" End Sub

UserForm1フォームモジュール

Dim newBtn() As New MyButton '動的ボタン(配列) Private Sub UserForm_Activate() With UserForm1 For i = 1 To 10 ReDim Preserve newBtn(i) 'ボタン作成 Set btn = .Controls.Add("Forms.CommandButton.1", "btn" & CStr(i)) With btn '位置調整 .Top = 5 + 20 * (Int((i - 1) / 2) Mod 5) .Left = 5 + 100 * (((i - 1) Mod 2)) 'ボタンサイズ .Height = 20 .Width = 100 'ボタン名 .Caption = "btn" & CStr(i) End With Set newBtn(i).button = btn ' <---- 追加 Next End With End Sub

参考になれば幸いです。

投稿2017/08/08 02:29

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

できます。

VBA フォーム コントロール追加 をキーワードにして Google 検索すれば、目的のコードが見つかるかと思います。

投稿2017/08/04 04:26

tukuroku

総合スコア234

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問