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

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

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

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

Q&A

解決済

1回答

3717閲覧

エクセルVBAで一段上の階層にあるフォルダのアドインファイルがクローズされず残ってしまいます

rainbow_trip

総合スコア14

VBA

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

0グッド

0クリップ

投稿2017/02/28 01:50

VBAビジナーで、勉強中の身です。

複数の端末で使用するマクロがたくさんあるので
アドインファイルにして、一つ上の階層にある「管理者用ファイル」という
フォルダに格納しています。

それぞれ派生したファイルのコマンドボタンをクリックすると
マクロファイルを呼び出して、マクロを実行し、
完了したら、自動的にマクロを閉じておきたいのですが、
マクロが閉じられず、残ってしまいます。

CLOSEメソッドのどこかに問題があるのかと思いますが
ご教示頂けますでしょうか

Sub

1 2 Dim パス名, マクロファイル As String 3 4 If ActiveSheet.Name = ("N") Then 5 パス名 = ThisWorkbook.Path 6 7 Else 8 パス名 = Left(ThisWorkbook.Path, InStrRev(ActiveWorkbook.Path, "\") - 1) 9 End If 10 11 マクロファイル = "\管理者用ファイル\消さないで夜間工程作成マスター2017.xlam" 12 13 On Error Resume Next 14 Workbooks.Open パス名 & マクロファイル, ReadOnly:=True 15 16 Application.ScreenUpdating = False '画面更新不要 17 Application.Run "'消さないで夜間工程作成マスター2017.xlam'!選択されたテキストボックスを表示" 18 19 Workbooks(マクロファイル).Close 20 Exit Sub 21 22 23End Sub 24 25 26コード

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

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

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

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

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

guest

回答1

0

ベストアンサー

Excelアドインファイル

普通のExcelマクロ有効ファイル(xlsm)ではなく敢えてExcelアドインファイル(xlam)として保存してあるのですから、エクセルにアドイン登録して使う方が自然な気がするのですが。。
そこはいろいろなお家事情があるものと思いますので、スルーしてアドバイスさせていただきます。

エラー原因

まず提示いただいたコードからOnErrorの部分をコメントアウトして動かしてみてください。
するとWorkbooks(マクロファイル).Closeの部分で「インデックスが有効範囲にありません」のエラーが発生すると思います。

マクロファイルという変数にはファイル名だけでなく一つ上のフォルダ名も含まれている為、そのままブック名として利用してもそんなブックは見つからないためです。

現状でファイルが閉じない原因はまさにこれだと思います。

ではどうすればよいか?ということで、2つほど対応案をご紹介します。
対応案① マクロファイル変数にはファイル名しか設定しない。
対応案② マクロファイル名でxlamブックを検索せず、開いたブックを閉じる。

対応案①

マクロファイル変数にはファイル名しか設定せず、一つ上のフォルダはパス側に含めることで対応できます。

修正すると以下のような感じになります。

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

対応案②

こちらは開いているブックの中からファイル名で閉じるブックを探すのではなく、自分で開いた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以外の操作もしやすくなるので自分なら案②を選択すると思います。

参考になれば幸いです。

投稿2017/02/28 07:40

編集2017/02/28 07:41
jawa

総合スコア3013

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

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

rainbow_trip

2017/02/28 08:25

とてもわかりやすい解説、また対応策①、対応策②のコード記述をありがとうございます。 おかげさまで対応策②にて、解決しました。 おっしゃるとおりで、ブック名が原因のようでした。 コードもとてもシンプルで見やすくなり、他のコードも同様に修正させていただきました。 ベストアンサーに選ばせていただきます ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問