エクセルで複数のファイルを開いて入力作業をするとき、ユーザーフォームが表示されているとエクセルシートがユーザーフォームで隠れてしまい作業がやりにくいことがあります。
ユーザーフォームの閉じるボタンを押せば済むのですが毎回行うのは煩わしいので、ファイルを検索するときはユーザーフォームが自動で開いて、検索したファイルを操作するときはユーザーフォームが自動で閉じるようにしてみたいと思います。
今回は、下のようなフォルダ構成で「ファイル検索.xlsm」のマクロ実行ファイルから「フォルダ」の中にある「企画書A.xlsx」「企画書B.xlsx」「企画書C.xlsx」エクセルファイルを開いて作業することを想定してマクロを組んでいきます。

以前のブログ「ユーザーフォームでファイルの検索をする」で「ファイル検索.xlsm」のマクロ有効ブックの作成を行いました、今回はこれを参考にしてマクロを組みたいので↓次のリンク↓をクリックして内容を確認してから次に進むことをお勧めします。

クリック ⇒ ユーザーフォームでファイルの検索をする
ユーザーフォームの「検索開始」のボタンのコード変更
先ずは、マクロ実行するブック (ファイル検索.xlsm) を開いて「開発」タブ →「Visual Basic」でVBE (Visual Basic Editor) の画面を表示します。

VBAProjectの「UserForm1」を選択し「コードの表示」ボタンを押してコードウインドウを表示し、次のコードをコピーして書き換えます。
コードの変更は「UserForm1.Show vbModeless」と「UserForm1.Hide」の2箇所になります。
Private Sub CommandButton1_Click()
Dim name As String
name = UserForm1.TextBox1.Text
Dim ブック As Workbook
Dim Flag As Boolean
For Each ブック In Workbooks '検索したファイルが開いているか調べます。
If ブック.name = name & ".xlsx" Then Flag = True
Next ブック
If Flag = True Then '検索したファイルが開いていた場合の処理。
MsgBox "「" & name & "」" & "のファイルは既に開いているので最前面に表示します。"
Workbooks(name & ".xlsx").Activate '開いていたファイルを最前面に表示します。
UserForm1.Hide '入力したデータを残したまま一時的にユーザーフォーム非表示にします。
'Unload UserForm1 'ユーザーフォームを閉じます。
Exit Sub
Else '検索したファイルが開いていない場合はファイルを開きます。
If Dir(ThisWorkbook.Path & "\フォルダ\" & name & ".xlsx") <> "" Then 'ファイルがフォルダ内にあるか調べます。
Workbooks.Open Filename:=ThisWorkbook.Path & "\フォルダ\" & name & ".xlsx" 'ファイルを開きます。
UserForm1.Hide '入力したデータを残したまま一時的にユーザーフォーム非表示にします。
'Unload UserForm1 'ユーザーフォームを閉じます。
Else 'ファイルがフォルダ内に無いときはメッセージを表示します。
UserForm1.Hide '入力したデータを残したまま一時的にユーザーフォーム非表示にします。
'Unload UserForm1 'ユーザーフォームを閉じます。
MsgBox "ファイルはフォルダ内にありません。"
UserForm1.Show vbModeless 'ユーザーフォームをモードレスで表示します。
End If
End If
End Sub
ThisWorkbookにコードを書き込む
次に、ファイルを検索するときはユーザーフォームが自動で開いて、検索したファイルを操作するときはユーザーフォームが自動で閉じる設定をします。

VBAProjectの「ThisWorkbook」をダブルクリックしてコードウィンドウを開き、次のコードをコピーして貼り付けます。
Private Sub Workbook_Activate() 'ワークブックがアクティブになったときの処理
UserForm1.Show vbModeless 'ユーザーフォームをモードレスで表示します。
End Sub
Private Sub Workbook_Deactivate() 'ワークブックが非アクティブになったときの処理
UserForm1.Hide '入力したデータを残したまま一時的にユーザーフォーム非表示にします。
'Unload UserForm1 'ユーザーフォームを閉じます。
End Sub
複数のファイルを開いて作業をするときは、ユーザーフォームをモードレス「vbModeless」で表示すると、ユーザーフォームの表示/非表示の切り替えが上手くいくようです。
「UserForm1.Hide」にするとユーザーフォームのテキストボックスに入力した値を残したまま、次回もユーザーフォームが表示されます。「Unload UserForm1」にするとテキストボックスに入力した値が消去されて、次回は表示されないようになります。
シートモジュールにコードを書き込む
最後にVBAProjectの「Sheet1」をダブルクリックしてコードウインドウを表示し、次のコードをコピーして書き換えます。これはセルをクリックした時にユーザーフォームを表示するための設定です。

こちらのブログ記事でユーザーフォームを表示するための設定方法を詳しく解説しているので参考にしてみてください。↓
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
UserForm1.Show vbModeless
End Sub
これで下のように複数のファイル「ファイル検索.xlsm」「企画書A.xlsx」「企画書B.xlsx」「企画書C.xlsx」を開いて作業するとき、「ファイル検索.xlsm」を開いたときはユーザーフォームが表示され「企画書A.xlsx」「企画書B.xlsx」「企画書C.xlsx」を開いたときはユーザーフォームが閉じようになりました。

