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

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

ただいまの
回答率

90.53%

  • VBA

    2260questions

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

  • Excel

    1901questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,550

rainbow_trip

score 8

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

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

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

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

    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

    Application.ScreenUpdating = False '画面更新不要
    Application.Run "'消さないで夜間工程作成マスター2017.xlam'!選択されたテキストボックスを表示"

    Workbooks(マクロファイル).Close
    Exit Sub


End Sub


コード
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

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 17:25

    とてもわかりやすい解説、また対応策①、対応策②のコード記述をありがとうございます。
    おかげさまで対応策②にて、解決しました。
    おっしゃるとおりで、ブック名が原因のようでした。

    コードもとてもシンプルで見やすくなり、他のコードも同様に修正させていただきました。

    ベストアンサーに選ばせていただきます
    ありがとうございました

    キャンセル

同じタグがついた質問を見る

  • VBA

    2260questions

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

  • Excel

    1901questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

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