プロが教えるわが家の防犯対策術!

マクロを実行した時に、マクロの保存先によって実行されないという問題を解決する方法を教えてください。
マクロ
Sub データ変更()
Dim f_Path As String
Dim tmp As String

f_Path = ActiveWorkbook.Path & "\"
tmp = Dir(f_Path & "*.erirct")
If tmp = "" Then Exit Sub
Application.Workbooks.OpenXML _
Filename:=f_Path & tmp, _
LoadOption:=xlXmlLoadImportToList
If Len(Dir(f_Path & "FDデータ.xlsx")) > 0 Then
Kill f_Path & "FDデータ.xlsx"
End If

ActiveWorkbook.SaveAs Filename:=f_Path & "FDデータ.xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
End Sub
が有ります。マクロを実行すると拡張子「.erirct」のファイルを「.xlsx」に変更出来ます。
しかし、マクロの保存先によって実行されないという問題があり、元々マクロがあるブッを違うファイル名で保存をし、その新しいブックを開いてマクロを実行してもマクロが実行されません。
元々のファイルと新しい名前で保存したファイルとは別々のフォルダで作業を行います。
新しい名前で保存したファイルでも上記のマクロを実行出来る方法を教えてください。
よろしくお願いします。

質問者からの補足コメント

  • うーん・・・

    回答ありがとう御座います。
    上手く説明が出来ずに申し分けありません。
    貴者のおっしゃるとおり
    実行時の状態に依存するコードでは無く
    マクロのあるブックがどこにあってもマクロが実行出来るように設定をしたいです。
    解決方法をよろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/02/11 11:50

A 回答 (1件)

こんにちは



>マクロを実行してもマクロが実行されません。
どのようなトリガーで実行しているのか不明ですが、実行できているのではないでしょうか?
最初の方の Exit Sub で終了しているだけであろうと想像します。

ご提示のコードは、実行時の状態に依存するコードになっていますので、それが質問者様の意図と違うのではないでしょうか?
(どのようにしたいのか不明なので、なさりたいように記述するとしか書けませんが・・)
要は、「ActiveWorkbook」を基準に実行するようになっているので、
・実行時の ActiveWorkbook がどのブックになっているのか
(普通であれば、ThisWorkbookと一致しますが、トリガーによっては異なる)
・ActiveWorkbook のディレクトリがどこか
に依存します。

質問文の雰囲気からすると、固定アドレスで良さそうなので、ベタで記述しておけば良さそうに思われます。
そうすれば、マクロのあるブックがどこにあっても対象ディレクトリを固定できます。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!