こんにちは。SI部の高橋です。
前回の「単純作業は自動化しよう(VBA編(2))」で、アドインを使って、メニュー表示とそのメニューからVBAの実行の説明をしました。
今回は以下のようなフォームを作成します。
この各項目に値を入力して実行ボタンを押下することで、VBA編(1)、(2)でご紹介したテンプレートからのファイル作成を実行させます。
フォームを作成する手順
作成したフォームをメニューから出力させるまでの手順を説明します。
Visual Basicを開く
作成したアドインを開く
開発⇒Visual Basicを選択し、Visual Basicを開きます。
※開発タブがないときは「単純作業は自動化しよう(VBA編(1))」を参考に、
開発タブを表示させてください。
ユーザフォームを追加
メニュ⇒挿入より、ユーザフォームを追加を選択する
以下のようにフォームが追加されます
部品を追加
フォームに部品を追加していきます。
コントロールとフォームの各部品を番号で紐づけましたので、その通りに追加してください。
コントロールを選択し、フォーム上で張り付けることができます。
各部品の設定
1.FORM
フォーム名を変更する。
フォームを選択し、プロパティでCaptionの値を変えて名前を変更します。
2.オブジェクト名の修正
部品を選択すると、プロパティでオブジェクト名が修正できるので修正します。
VBA内で各部品を指定する際にデフォルトだと識別しづらいため修正をお勧めします。
今回の各部品のオブジェクト名は以下になります。
3.処理追加
各ボタンで行う処理を追加します。
処理を追加したいボタンをWクリックすることで、処理が空のSubプロシージャが作成されます。
3-1.雛形ファイル情報の参照ボタン
ファイル選択(.xls)を行う
Private Sub HinagataSanshouButton_Click() HinagataPathTextBox.Value = Application.GetOpenFilename("EXCEL Files (*.xls), *.xls", 1, "ファイル選択", "選択", False) End Sub
3-2.作成ファイル情報の参照ボタン
作成先出力フォルダの選択を行う
Private Sub SakuseiSanshouButton_Click() With Application.FileDialog(msoFileDialogFolderPicker) .Show SakuseiPathTextBox.Value = .SelectedItems(1) End With End Sub
3-3.実行ボタン
各部品のオブジェクト名に修正した処理
Private Sub JikouButton_Click() 'ファイル数カウント Dim fileCount As Integer '作成ファイル名 Dim makeFile As String fileCount = 1 '作成ファイル数分、雛形をコピーする Do While fileCount <= SakuseiSuuTextBox.Value '作成ファイル名 makeFile = SakuseiPathTextBox.Value & "\" & SakuseiFileMeiTextBox.Value & fileCount & ".xls" '雛形をコピーして、新しいファイルを作成 FileCopy HinagataPathTextBox.Value & "\" & HinagataTextBox.Value, makeFile '新しく作成したファイルを開く Workbooks.Open Filename:=makeFile, ReadOnly:=False '新しく作成したファイルのシート名をエクセル名にする(拡張子なしファイル名) ActiveWorkbook.Worksheets(1).Name = Mid(SakuseiSheetMeiTextBox & fileCount, 1, 30) '保存して閉じる ActiveWorkbook.Close savechanges:=True 'ファイル数カウントを増やす fileCount = fileCount + 1 Loop End Sub
実行例
これでフォームからVBAを実行する準備が整いましたので実際に動かしてみましょう。
1.自動化メニューから「雛形コピーと名前変更FORM」を選択
2.各フォームに値を入力し、実行ボタンを押下
3.ファイルが作成される
最後に
VBA編(1)〜(3)を通して、フォームコントロールを利用してのアドイン作成ができるようになりました。
このようにフォームを利用したアドインにすることで、一時的にだけではなく、継続した作業の効率化に一役買ってもらえるのではないでしょうか。