アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル2019でPDFファイル名に枝番号をつけたい。
アクティブワークシートを印刷した後の処理として、PDFでファイル名を今日の日付で保存させるマクロを利用してますが、同日にあらためて、同作業をするとPDFのファイルが上書き保存になってしまうので、例えば、同日保存で一回目が20230606.pdfなら2回目
はファイル名は、20230606(1).pdfで3回目なら、20230606(2).pdfのようにするには、コードをどう書き換えたらよいでしょうか?
以下、コードです。宜しくお願いします。
Sub PDF()
'
' pdf Macro
    ActiveSheet.PrintOut
    Const Folder As String = "C\Users\House\Desktop"
    Dim fname As String
    Dim fpath As String
    fname = Format(Date, "yyyymmdd") & ".pdf"
    fpath = Folder & "\" & fname
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fpath, Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
   
End Sub

A 回答 (4件)

>保存できない。

または、保存中にエラーが…と言う内容のエラーメッセージがでました。なぜなのでしょうか。
あなたから提示されたパス名をそのまま使用していました。

Const Folder As String = "C\Users\House\Desktop"

Const Folder As String = "C:\Users\House\Desktop"
に変えてください。(C\ ではなく C:\ にします)
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございました。完璧です。お教え頂いた通りにしたら、動きました。

お礼日時:2023/06/07 21:03

横から失礼します。


以下のようにしてください。
Sub PDF()
'
' pdf Macro
ActiveSheet.PrintOut
Const Folder As String = "C\Users\House\Desktop"
Dim fname As String
Dim fpath As String
Dim i As Long
Const ext = ".pdf"
i = 0
fname = Format(Date, "yyyymmdd")
fpath = Folder & "\" & fname & ext
i = 0
While Dir(fpath) <> ""
i = i + 1
fpath = Folder & "\" & fname & Format(i, "(#)") & ext
Wend
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fpath, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

End Sub
--------------------------------------------
fujillinさんの通りに書いただけですが、1か所
fpath = Folder & fname & Format(i, "(#)") & ext

fpath = Folder & "\" & fname & Format(i, "(#)") & ext
に変えています。
    • good
    • 0
この回答へのお礼

ありがとうございます。早速、貼り付けてみたところ、保存できない。または、保存中にエラーが…と言う内容のエラーメッセージがでました。なぜなのでしょうか。

お礼日時:2023/06/07 18:27

No1です。



>何か間違えているのか、上書きされてしまいます
どうやって保存しているのか不明ですが・・・
ループを抜けてきた際の変数 fpath にファイルのフルパスが入るはずですけれど?

MsgBox あるいは Debug.Print などで内容を確かめてみて下さい。
    • good
    • 0
この回答へのお礼

ありがとうございます。なに分、VBAは初心者でfpathで保存の仕方、コードが間違えているのかなと思います。恥ずかしいです。

お礼日時:2023/06/07 08:33

こんばんは



>コードをどう書き換えたらよいでしょうか?
保存する前に、ファイル名のファイルが存在するかをDIR関数で調べ、存在したら連番を付して、存在しないファイル名が見つかるまで繰り返せば良いでしょう。

多少、修正してこんな感じでできると思います。

Dim fname As String
Dim fpath As String
Dim i As Long
Const Folder = "C\Users\House\Desktop\"
Const ext = ".pdf"

fname = Format(Date, "yyyymmdd")
fpath = Folder & "\" & fname & ext
i = 0
While Dir(fpath) <> ""
i = i + 1
fpath = Folder & fname & Format(i, "(#)") & ext
Wend

' ここで fpath で保存する
    • good
    • 1
この回答へのお礼

ありがとうございます。何か間違えているのか、上書きされてしまいます。コードの書き方がまずいのでしょうか?

お礼日時:2023/06/06 22:53

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

このQ&Aを見た人はこんなQ&Aも見ています