PR
ユーザーフォームマクロの実行

【Excel_VBA】ユーザーフォームの初期値をVBAで変更する

VBAでユーザーフォームの初期値を変更するコードを紹介します。

初期値の設定はVBE上でプロパティのCaptionを変更、もしくはユーザーフォームのInitializeプロシージャで指定することで対応可能ですが、今回は初期値を変数で変更し、ユーザーフォーム起動時の初期値を変更する場合について取り扱います。

(今回の事例)ユーザーフォームに表示されるラベルのキャプションの初期値を変更する

まず、UserForm1を起動するマクロをModuleで作成します。

Sub ユーザーフォーム起動()

UserForm1.Show

End Sub

次にユーザーフォームを起動するマクロを実行するボタンを作成します。

次にユーザーフォームを作成します。

次にユーザーフォーム起動時に実行するUserForm_Initializeのコードを編集します。

UserForm_Initializeのコードです。ユーザーフォーム起動時にLabel1のキャプション(text_Label1:変数)を表示します。

Private Sub UserForm_Initialize()

'初期のコードは「text_i = 1」この下のコードが書き換えられる
text_i = 1

text_Label1 = "Label_" & text_i

Label1.Caption = text_Label1

End Sub

次にコマンドボタンをクリックした時に実行するマクロを編集します。

コマンドボタンクリック時に実行するコードです。このマクロを実行すると先ほど作成したイニシャライズのコードの中身(今回は4行目)を書き換えます。今回の事例では変更前のキャプションの数値に1を足した値をキャプションの初期値に変更することになります。

Private Sub CommandButton1_Click()

Dim VBComp As VBComponent
Dim codeMod As VBIDE.CodeModule

Set VBComp = ThisWorkbook.VBProject.VBComponents("UserForm1")
Set codeMod = VBComp.CodeModule

'何行目のコードを書き換えるか指定
lineNum = 4

'「text_mod」に書き換えたいコードを代入する
i = Mid(Label1.Caption, 7) + 1
text_mod = "text_i =" & i

'「UserForm1」の「lineNum」列目のコードを「text_mod」の内容に書き換える
codeMod.ReplaceLine lineNum, text_mod

'ユーザーフォームを閉じる
Unload UserForm1

End Sub

ユーザーフォームを起動してコマンドボタンをクリックするとイニシャライズのコード(4行目)が変更され、ユーザーフォーム起動時にLabel1のキャプションが変更されます。

今回のマクロ実行に当たってはマクロのツール参照設定で「Microsoft XML. v6.0」と「Microsoft Visual Basic for Applications Extensibility 5.3」をそれぞれ参照可能にしておいてください。参照にチェックを入れていないとマクロ実行時に参照先が無く、エラーとなってしまいます。

以上です。

ユーザーフォームを使用して別のファイルと連携したマクロ処理を行う場合、マクロの運用を行っていくと参照先のファイルが移動されたりファイル名が変更されたりとコードの内容をその都度変更していくことになります。セルに記入された値を取得して表示することで対応は可能ですが、ユーザーフォーム以外を編集して欲しくない場合、この事例の応用でユーザーフォーム上で完結させることができます。

コメント