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

Excelのマクロの不具合について教えてください。
マクロを連続して実行すると一部のマクロがエラーが出て実行できません。
解決方法を教えてください。
マクロ
Sub 審査結果3()
Application.Run "行調整"
Application.Run "青紙日付"
Application.Run "審査結果"
Application.Run "シート移動"
If Worksheets("審査").Range("S19") = "計画変更" Then
Application.Run "審査資料計変"
End If
Application.Run "上書き保存表示無し"
End Sub
があります。このマクロを実行すると上から順番にマクロが実行されます。
しかし、途中マクロ「Application.Run "審査資料計変"」にエラーが出てこのマクロだけ実行できません。
コードは
Sub 審査資料計変()
Dim TargetFile As String
Dim fPath As String, fName As String
Dim newfName As String

newfName = ThisWorkbook.Sheets("審査").Range("S22").Value & ".pdf"
newfName = NGNarrowToWide(newfName)

''メッセージを表示し、実施確認する。
If MsgBox(newfName & vbCrLf & vbCrLf & "審査資料(計変)を作成しますか。", vbExclamation + vbOKCancel) <> vbOK Then Exit Sub

' ファイルのパスを指定
fPath = ThisWorkbook.Path

' ダイアログを表示してファイルを選択
TargetFile = Application.GetOpenFilename("PDFファイル ,*.pdf", , "ファイルを選択", , False)

If TargetFile = "False" Then Exit Sub

' ファイル名を変更
If TargetFile = fPath & "\" & newfName Then
MsgBox "同名ファイルを選択しています"
Exit Sub
End If

If Not Dir(fPath & "\" & newfName) <> "" Then
Name TargetFile As fPath & "\" & newfName
Else
Dim rc As Integer
rc = MsgBox("既に存在する名前です" & vbCrLf & "はいを押すと既存ファイルは削除され" & vbCrLf & "リネームファイルに置き換えられます", 52, "置き換え確認")
If rc = vbYes Then
Application.DisplayAlerts = False
Kill fPath & "\" & newfName
Name TargetFile As fPath & "\" & newfName
Application.DisplayAlerts = True
Else
MsgBox "処理を中止しました"
End If
End If
End Sub
Public Function NGNarrowToWide(ByVal stg As String) As String
stg = Replace(Replace(Replace(Replace(stg, "\", "¥"), "/", "/"), ":", ":"), "*", "*")
stg = Replace(Replace(Replace(Replace(stg, "?", "?"), "<", "<"), ">", ">"), "|", "|")
stg = Replace(stg, """", Chr(&H8168))
NGNarrowToWide = stg
End Function
になっており、画像のようなエラーメッセージが出て、
コードの内「Name TargetFile As fPath & "\" & newfName」の部分が黄色くなっております。
このマクロの前の「Application.Run "審査結果"」のマクロを実行したPDFファイルを
Application.Run "審査資料計変"マクロを使用してファイル名を変更するようになっております。
解決方法を教えてください。
よろしくお願いします。

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

  • うーん・・・

    画像が送れませんでした。画像のエラーは
    実行時エラー’75’:
    パス名が無効です。 と表示されます。

    又、If Not Dir(fPath & "\" & newfName) <> "" Then
    Name TargetFile As fPath & "\" & newfName
    Else
    Dim rc As Integer
    のコードにエラーが出ております。
    尚、Application.Run "審査資料計変"を単独で実行すると上手く実行できます。
    連続してマクロを実行し、PDFファイルを作成し、そのファイルの名前を変更するようになっておりますので、変更するファイルが存在しない、となっているのでしょうか。
    解決方法をよろしくお願いします。

      補足日時:2023/07/04 10:36
  • うーん・・・

    いつも回答ありがとうございます。
    ご指示の通り、
    If Not Dir(fPath & "\" & newfName) <> "" Then
    Debug.Print TargetFile
    Debug.Print fPath & "\" & newfName
    Exit Sub '処理を中止し終了
    Name TargetFile As fPath & "\" & newfName
    を設定しましたが
    エラーのメッセージボックスが開かず、そのまま、ブックがクローズしてしまい。
    ファイル名も変更されておりませんでした。
    もう一つの
    あと・・・
    と記載がありますが、どのような事でしょうか?
    全く理解できなくて申し訳ありません、
    よろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/07/04 12:21
  • pdfファイルを作成するマクロです
    Sub 審査結果()
    Application.ScreenUpdating = False
    Call output_pdf(ThisWorkbook.Path, "審査", Worksheets("審査").Range("Z1").Text)
    Application.ScreenUpdating = True
    ActiveWorkbook.Save
    With CreateObject("Forms.TextBox.1")
    .MultiLine = True
    .Text = Worksheets("審査").Cells(15, "E").Value
    .SelStart = 0
    .SelLength = .TextLength
    .Copy
    End With

      補足日時:2023/07/04 12:33
  • Call 電子管理システム
    Application.Quit
    With ThisWorkbook
    .Saved = True
    End With
    End Sub
    Sub output_pdf(PA As String, sh_name As String, f_Name As String)
    On Error GoTo SaveError
    Worksheets(sh_name).Activate
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:=PA & "\" & f_Name & ".pdf"
    Exit Sub
    SaveError:

      補足日時:2023/07/04 12:33
  • うーん・・・

    MsgBox ("保存先パス、対象シート名、保存ファイル名が適切ではありません")
    Application.ScreenUpdating = True
    Application.Quit
    End Sub

    文字数の関係上 3つに分けてお送りしました、。
    よろしくお願いします。

      補足日時:2023/07/04 12:34
  • うーん・・・

    ご連絡ありがとうございました。
    ご指示の通りにコードを設定しましたら
    多分画像が送る事が出来ないと思いますので、最初に Microsoftexcel 「ok」と出て
    それを「ok」をクリックすると「Microsoftexcel」¥審査資料(計変).pdf「ok」と出てます。
    okをクリックするとファイル変更されずにクローズされます。
    ちなみにマクロ審査結果で作成したファイル「23068847-1 【担当者】 質疑書№1.pdfのファイルを
    マクロ「"審査資料計変"
    」を実行して
    Worksheets("審査").Range("S19") に表示されている「審査資料(計変)」に変更るるように
    しています。
    よろしくお願いします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/07/04 13:24
  • うーん・・・

    何度もありがとうございます。
    ご指示の通りに設定しましたが、やはり「Stop」を設定した状態と同じになります。
    Sub 審査結果3()とSub 審査資料計変()は同じブックにあります。
    又、ThisWorkbookは 一番最初のフォルダは○○邸新築工事となっており、
    その下のサブフォルダに
    「検査時必要図書(正本)」「返却用(副本)」の2つのフォルダがあります。
    ThisWorkbookは「検査時必要図書(正本)」の中にあり、又、マクロ審査結果で作成し、変更しようとしているpdfファイルも「検査時必要図書(正本)」の中にあります。
    本当に何度も申し訳ありません。
    何卒、よろしくお願いします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2023/07/04 14:34
  • うーん・・・

    何度も申し訳ありません。
    ご指示のコードを
    ''メッセージを表示し、実施確認する。
    If MsgBox(newfName & vbCrLf & vbCrLf & "審査資料(計変)を作成しますか。", vbExclamation + vbOKCancel) <> vbOK Then Exit Sub

    On Error GoTo 0 '追加
    ' ファイルのパスを指定
    fPath = ThisWorkbook.Path
    設定しましたが、やはり、最初に Microsoftexcel 「ok」と出て
    それを「ok」をクリックすると「Microsoftexcel」¥審査資料(計変).pdf「ok」と出てます。
    Sub 審査資料計変()を単独に実行した場合は、上手く行きます。
    よろしくお願いします。

    No.4の回答に寄せられた補足コメントです。 補足日時:2023/07/04 16:15
  • うーん・・・

    何度もありがとうございます。
    ご指示の通りにコードを設定しましたら
    最初に Microsoftexcel 「ok」と出てその後も
    Microsoftexcel 「ok」と出ています。
    よろしくお願いします。

    No.5の回答に寄せられた補足コメントです。 補足日時:2023/07/04 16:37
  • うーん・・・

    何度もありがとうございました。
    fPath = ActiveWorkbook.Path
    に変更しましたら、先ほどとおなじ、2回メッセージが出てしまいます。
    今回の補足でもう補足が出来なくなりますので、改めて質問をさせて頂きます。
    よろしくお願いします。

    No.6の回答に寄せられた補足コメントです。 補足日時:2023/07/04 17:38

A 回答 (7件)

Sub 審査結果()で Application.Quit ね~

    • good
    • 0
この回答へのお礼

色々とありがとうございました。
もう少し考えて、再度、質問をさせて頂きます。
今後ともよろしくお願いいたします。

お礼日時:2023/07/04 17:59

#1の


fPath = ActiveWorkbook.Path
は試しましたか
fPath = ActiveWorkbook.Path の時 表示はどうなりますか
この回答への補足あり
    • good
    • 0

そうですか・・エラーにならないのですね


では
MsgBox TargetFile
MsgBox fPath & "\" & newfName
Stop

MsgBox TargetFile
MsgBox fPath
Stop
では どのように表示されますか
この回答への補足あり
    • good
    • 0

>ご指示の通りに設定しましたが、やはり「Stop」を設定した状態と同じになります。



これは単独でSub 審査資料計変()を実行した場合も同じと言う意味ですか

最初に Microsoftexcel 「ok」と出て
それを「ok」をクリックすると「Microsoftexcel」¥審査資料(計変).pdf「ok」と出てます。

------
' ファイルのパスを指定
fPath = ThisWorkbook.Path が取得できていない?

追加してみてください

On Error GoTo 0 '追加
' ファイルのパスを指定
fPath = ThisWorkbook.Path
この回答への補足あり
    • good
    • 0

Sub 審査結果3()とSub 審査資料計変()は同じブックにあるのですよね?


Application.Run "審査資料計変" 

Call 審査資料計変 としてみてください

ちなみにThisWorkbookはどこにあるのかな・・・
単独で実行した時のメッセージボックスの表示は?
この回答への補足あり
    • good
    • 0

今一度VBEを開きイミディエイトウィンドウに表示されている


値を確認してみてください
もしくは

Exit Sub '処理を中止し終了

Stopに変えるか

Debug.Print TargetFile
Debug.Print fPath & "\" & newfName
Exit Sub '処理を中止し終了

MsgBox TargetFile
MsgBox fPath & "\" & newfName
Stop

にして確認してください

補足のコードについては分かりませんが

>と記載がありますが、どのような事でしょうか?
>全く理解できなくて申し訳ありません、

https://oshiete.goo.ne.jp/qa/13519233.html
の事でした
この回答への補足あり
    • good
    • 0

ご質問者様の処理は複数の継ぎ合わせVBAで構成され関数やブックも継ぎ合わせですね



全体の構成、処理手順は回答者には想像できません

従って解決方法は自身でデバッグする事です

とは言え 回答者として可能性を考えるに

>Application.Run "審査資料計変"を単独で実行すると上手く実行できます。
これは、Application.Runでなくプロシージャを単体で実行と言う事ですか

Application.Runを使用していると言う事は
fPath = ThisWorkbook.Path は希望の処理でない可能性があります
fPath = ActiveWorkbook.Path とするべきかも知れませんが違うかも知れませんね

自身でもう少し原因を調べる方法ですが
VBEでブレイクポイントなどで変数を確認出来ますが・・
と言っても分からないのでしょうから 
エラーの出る場所を下記のように
3行書き足しイミディエイトウィンドウに出力された文字列を確認してください Debug.Printをmsgboxとして表示することもできるかと

If Not Dir(fPath & "\" & newfName) <> "" Then
Debug.Print TargetFile
Debug.Print fPath & "\" & newfName
Exit Sub '処理を中止し終了
Name TargetFile As fPath & "\" & newfName

出力されたパスを確認してください

あと・・・
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "PDFファイル(.pdf)", "*.pdf"
.InitialFileName = ThisWorkbook.Path
If .Show Then
TargetFile = .SelectedItems(1)
Else
Exit Sub
End If
End With
にしないのかな・・・
この回答への補足あり
    • good
    • 0

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