[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『自動保存で上書きされないようにしたい』(96)
「指定した保存先にPDF形式・ファイル名を日付で保存する」マクロを作っています。
同じ日に実行するとPDFファイルが上書きされてしまうのを防ぎたいです。
得意先名をVLOOKUPで呼び出して表示させているのですが、「得意先名 日付」なら被らないはずなので、そういったファイル名には出来ませんでしょうか?
もしくは、上書きしますか?と表示が出てファイル名が変更出来たり、ファイル名が「日付_1」となったり…というような上書きされないように出来ませんでしょうか?
どうぞよろしくお願いいたします。
Sub PDF()
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"\\保存先\" & Format(Date, "yyyymmdd"), Quality:=xlQualityStandard, _
IncludeDocProperties:=True,IgnorePrintAreas:=False,OpenAfterPublish:=True
End Sub
< 使用 Excel:Excel2019、使用 OS:Windows10 >
>Filename:= "\\保存先\" & Format(Date, "yyyymmdd"),
Filename:= "\\保存先\" & Activesheet.Range("A1").Value & Format(Date, "yyyymmdd") & ".pdf"
> Format(Date, "yyyymmdd")
日付だけではなく、日時にする、というのではだめですか?
Format(Date, "yyyymmddhhmmss")
>ファイル名が「日付_1」となったり
"日付_" & i
などとして、ループで存在しないファイル名になるまでループする、 という方法も。 (OK) 2020/08/29(土) 18:41
私がこんな風に、といった疑問一つ一つをわかりやすく教えていただきましてありがとうございます。
得意先名+日時で整理やデータ添付等が大変やりやすいPDFとして保存が出来ました。
.
Sub PDF()
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"\\保存先\" & ActiveSheet.Range("A1").Value & "様" & " " & Format(Now, "yyyymmddhhmm"), Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
End Sub
.
.
.
.
後学のために教えていただけたら嬉しいのですが、もしループ処理をする場合どういった形にしたらよいでしょうか?
簡単なループ処理しかわからないなりに一応考えてはみたのですが、PDFの保存自体のループ処理となってしまい、「日付_1」〜「日付_101」まで、保存を101回繰り返すことになってしまいました。
どうぞよろしくお願いいたします。
.
Sub PDF()
Dim i As Long
For i = 1 to 100 + 1
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"\\保存先\" & Format(Date, "yyyymmdd") & "_" & i , Quality:=xlQualityStandard, _
IncludeDocProperties:=True,IgnorePrintAreas:=False,OpenAfterPublish:=True
Next i
End Sub
(96) 2020/08/31(月) 15:44
こんな感じです。参考まで。
Sub PDF_2()
Dim i As Long Dim myfol As String Dim sredate As String Dim mysavepath As String Dim saveflag As Boolean myfol = "\\保存先" '保存先フォルダ strdate = Format(Date, "yyyymmdd") '日付 mysavepath = myfol & "\" & strdate & ".pdf" '保存パス If Dir(mysavepath) <> "" Then '保存パスが存在したら saveflag = False 'フラグを立てFALSEを代入 i = 0 'カウンタの初期化 Do Until saveflg = True ’フラグがFALSEの間はループする i = i + 1 'カウントアップ mysavepath = myfol & "\" & strdate & "_" & Format(i, "00") & ".pdf" ’保存パスの再指定 If Dir(mysavepath) <> "" Then ' 保存パスが存在したら saveflag = False 'フラグをFALSEにする Else '保存パスが存在しなかったら saveflg = True'フラグをTRUEにする/ループを抜ける End If Loop 'ループ End If 'PDF保存実行 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=mysavepath, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True End Sub (OK) 2020/08/31(月) 18:17
> Dim sredate As String
↓の間違いでした。
Dim strdate As String (OK) 2020/08/31(月) 18:19
なんかボロボロでした。さらに修正2カ所です。
1
Do Until saveflg = True ’フラグがFALSEの間はループする ↓ Do Until saveflag = True ’フラグがFALSEの間はループする
2
Else '保存パスが存在しなかったら saveflg = True'フラグをTRUEにする/ループを抜ける ↓ Else '保存パスが存在しなかったら saveflag = True'フラグをTRUEにする/ループを抜ける (OK) 2020/08/31(月) 18:28
修正後のコードです。
Sub PDF_2()
Dim i As Long Dim myfol As String Dim strdate As String Dim mysavepath As String Dim saveflag As Boolean myfol = "\\保存先" '保存先フォルダ strdate = Format(Date, "yyyymmdd") '日付 mysavepath = myfol & "\" & strdate & ".pdf" '保存パス If Dir(mysavepath) <> "" Then '保存パスが存在したら saveflag = False 'フラグを立てFALSEを代入 i = 0 'カウンタの初期化 Do Until saveflag = True 'フラグがFALSEの間はループする i = i + 1 'カウントアップ mysavepath = myfol & "\" & strdate & "_" & Format(i, "00") & ".pdf" '保存パスの再指定 If Dir(mysavepath) <> "" Then ' 保存パスが存在したら saveflag = False 'フラグをFALSEにする Else '保存パスが存在しなかったら saveflag = True 'フラグをTRUEにする/ループを抜ける End If Loop 'ループ End If 'PDF保存実行 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=mysavepath, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True End Sub (OK) 2020/08/31(月) 18:35
>もしくは、上書きしますか?と表示が出てファイル名が変更出来たり、
これは PDF_2の応用で行けます。
Sub PDF_3()
Dim myfol As String Dim karistrname As String Dim strname As String Dim iptmsg As String Dim iptname As String Dim mysavepath As String Dim saveflag As Boolean 'myfol = "\\保存先" '保存先フォルダ karistrname = Format(Date, "yyyymmdd") '日付 mysavepath = myfol & "\" & karistrname & ".pdf" '保存パス If Dir(mysavepath) <> "" Then '保存パスが存在したら iptname = karistrname iptmsg = iptname & "は存在します。他の名前を指定してください。" saveflag = False 'フラグを立てFALSEを代入 Do Until saveflag = True 'フラグがFALSEの間はループする strname = Application.InputBox(prompt:=iptmsg, Default:=karistrname, Type:=2) If strname = "" Then MsgBox "ブランクにより中止。" Exit Sub ElseIf strname = "False" Then MsgBox "×かキャンセルにより中止。" Exit Sub Else '続行 End If mysavepath = myfol & "\" & strname & ".pdf" '保存パスの再指定 If Dir(mysavepath) <> "" Then ' 保存パスが存在したら saveflag = False 'フラグをFALSEにする iptname = iptname & "/" & strname iptmsg = iptname & "は存在します。他の名前を指定してください。" Else '保存パスが存在しなかったら saveflag = True 'フラグをTRUEにする/ループを抜ける End If Loop 'ループ Else mysavepath = myfol & "\" & karistrname & ".pdf" '保存パスの決定 End If 'PDF保存実行 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=mysavepath, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True End Sub (OK) 2020/08/31(月) 19:56
またもや修正。
> 'myfol = "\\保存先" '保存先フォルダ
↓に修正してください。
myfol = "\\保存先" '保存先フォルダ
(OK) 2020/08/31(月) 19:58
大変丁寧な説明で、2パターンもありがとうございます。
ファイル名があるかどうかをみて、あったらこうする、無かったらこうする…if関数のようですね。
ちょっと初心者には難しかったので、少しずついじってみたり、調べたりして勉強させていただきます。
とても分かりやすく丁寧にお答えいただき、ありがとうございました!
(96) 2020/09/01(火) 14:09
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.