質問: False '画面更新不要 Application.Run "'消さないで夜間工程作成マスター2017.xlam'!選択されたテキストボックスを表示" Workbooks(マクロファイル).Close Exit Sub End Sub コード ```
回答: Excelアドインファイル 普通のExcelマクロ有効ファイル(xlsm)ではなく敢えてExcelアドインファイル(xlam)として保存してあるのですから、エクセルにアドイン登録して使う方が自然な気がするのですが。。 そこはいろいろなお家事情があるものと思いますので、スルーしてアドバイスさせていただきます。 エラー原因 まず提示いただいたコードからOnErrorの部分をコメントアウトして動かしてみてください。 すると`Workbooks(マクロファイル).Close`の部分で「インデックスが有効範囲にありません」のエラーが発生すると思います。 マクロファイルという変数にはファイル名だけでなく一つ上のフォルダ名も含まれている為、そのままブック名として利用してもそんなブックは見つからないためです。 現状でファイルが閉じない原因はまさにこれだと思います。 ではどうすればよいか?ということで、2つほど対応案をご紹介します。 対応案1 マクロファイル変数にはファイル名しか設定しない。 対応案2 マクロファイル名でxlamブックを検索せず、開いたブックを閉じる。 対応案1 マクロファイル変数にはファイル名しか設定せず、一つ上のフォルダはパス側に含めることで対応できます。 修正すると以下のような感じになります。 ``` Dim パス名, マクロファイル As String If ActiveSheet.Name = ("N") Then パス名 = ThisWorkbook.Path Else パス名 = Left(ThisWorkbook.Path, InStrRev(ActiveWorkbook.Path, "\") - 1) End If 'マクロファイル = "\管理者用ファイル\消さないで夜間工程作成マスター2017.xlam" パス名 = パス名 & "\管理者用ファイル\ マクロファイル = "消さないで夜間工程作成マスター2017.xlam" On Error Resume Next Workbooks.Open パス名 & マクロファイル, ReadOnly:=True Application.ScreenUpdating = False '画面更新不要 Application.Run "'" & マクロファイル & "'!選択されたテキストボックスを表示" Workbooks(マクロファイル).Close Exit Sub ``` 対応案2 こちらは開いているブックの中からファイル名で閉じるブックを探すのではなく、自分で開いたxlamブックを覚えておく方法です。 修正すると以下のような感じになります。 ``` Dim パス名, マクロファイル As String If ActiveSheet.Name = ("N") Then パス名 = ThisWorkbook.Path Else パス名 = Left(ThisWorkbook.Path, InStrRev(ActiveWorkbook.Path, "\") - 1) End If マクロファイル = "\管理者用ファイル\消さないで夜間工程作成マスター2017.xlam" On Error Resume Next 'Workbooks.Open パス名 & マクロファイル, ReadOnly:=True Dim ブック As WorkBook Set ブック = Workbooks.Open(パス名 & マクロファイル, ReadOnly:=True) Application.ScreenUpdating = False '画面更新不要 Application.Run "'" & ブック.Name & "'!選択されたテキストボックスを表示" ブック.Close Exit Sub ``` どちらの案を選択するかは検討していただければいいと思いますが、Close以外の操作もしやすくなるので自分なら案2を選択すると思います。 参考になれば幸いです。