[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『「自動保存で上書きされないようにしたい」[96] について』(するめ)
投稿
[[20200829163928]] 『自動保存で上書きされないようにしたい』(96)
について...
こちらの回答にある下記のマクロを使い、保存先をActivWorkbook.Pathにして実行したら、PDF保存実行にて実行エラー1004 ドキュメントを保存できませんでした。ドキュメントが開いているか、保存時にエラーが発生した可能性があります。となってしまいました。
保存先をデスクトップに指定した時はうまくいきました。
会社ごとにエクセルを利用したいため、特定のフォルダにPDF保存するのではなく、エクセルと同じフォルダにPDFを出力したいです。
どのようにすればよいでしょうか。
教えていただきたいです。
よろしくお願いいたします。
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
< 使用 Excel:Excel2021、使用 OS:Windows11 >
(エリス) 2023/11/13(月) 18:57:56
エリス様
コメントありがとうございます。
>Activ"e"Workbookと名前が間違っているから「そんな保存先はないよ」と怒られているのでは?
申し訳ございません、コメントの入力ミスでした。ActiveWorkbookと入力でエラーになります。
(するめ) 2023/11/14(火) 13:12:06
エラー発生時点での次の変数の値はどうなっていますか?
1. saveflag 2. i 3. mysavepath (※ myfolより上流はカットして頂いて結構です。)
(半平太) 2023/11/14(火) 13:40:33
>1. saveflag =False
> 2. i
=0
> 3. mysavepath (※ myfolより上流はカットして頂いて結構です。)
=〜\20231114.pdf
上記のようになっております。
よろしくお願いいたします。
(するめ) 2023/11/14(火) 15:10:35
saveflagがFalseであるなら「保存パスが存在していない」のに「PDF保存実行」したと言うことでしょう。
そもそも、ここの処理がおかしい。そんなPDFファイルの存在を条件にするのはリーズナブルではないしょう。 ↓ > mysavepath = myfol & "\" & strdate & ".pdf" '保存パス > If Dir(mysavepath) <> "" Then '保存パスが存在したら
保存フォルダの存在を確認したのち、空いているファイル名で保存する、と言うのが流れだと思います。 つまり、こんな感じじゃないですか?(実地テストしておりません 悪しからず) ↓ 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") '日付
If Dir(myfol, vbDirectory) <> "" Then '保存フォルダが存在したら
saveflag = False 'フラグを初期化 i = 0 'カウンタの初期化
Do Until saveflag = True 'フラグがFALSEの間はループする i = i + 1 'カウントアップ
mysavepath = myfol & "\" & strdate & "_" & Format(i, "00") & ".pdf" '保存パスの指定
If Dir(mysavepath) = "" Then ' 既存でなければ保存 saveflag = True 'フラグをTRUEにする(ループを抜ける準備)
'PDF保存実行 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=mysavepath, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True End If Loop 'ループ Else MsgBox myfol & "のフォルダは存在しません。" End If End Sub
(半平太) 2023/11/14(火) 16:51:33
コメントいただいたものを実行したところ、ActiveWorkbook.Pathのフォルダは存在しませんとなります。
保存先をActiveWorkbook.Pathにしたので、そんなフォルダはないってことだと思うのですが‥
私がやりたいことはExcelと同一フォルダ内にPDFを出力したいです。
その際にファイル名が同じだと上書き保存になってしまうため、連番にして保存をするのが投稿したVBAだと思い実行したのですが、業務上会社ごとにエクセルを作成したいので保存先をActiveWorkbook.Pathにしたところエラーになるため質問をしました。
「保存パスが存在していない」のに「PDF保存実行」をしているということは
保存先をActiveWorkbookにすることはできないということでしょうか?
(するめ) 2023/11/15(水) 13:59:19
追加で申し訳ございません。
保存先をデスクトップにしても同様にエラーとなりました。
(するめ) 2023/11/15(水) 14:06:00
ちょっとよく分からないのですが、 保存先はこれですよね? ↓ myfol = "\\保存先" '保存先フォルダ
いつから、ActiveWorkbook.Path になったんですか?
取り敢えず、プログラムの冒頭に以下のコードを書き足し、どんなPathになるのか確認してください。
Sub PDF_2() MsgBox "#" & ThisWorkbook.Path & "#" ’←確認用 Dim i As Long
※もし、まともなフォルダ名がでているなら、 こう変更してテストしてください。 ↓ myfol = ThisWorkbook.Path
(半平太) 2023/11/15(水) 14:22:09
まちがえました。m(__)m
ThisWorkbook.Pathではなく、ActiveWorkbook.Path に読み替えてください。
(半平太) 2023/11/15(水) 14:35:59
ダブルクォーテーションを消したらきちんと実行されました!
文字列になってしまっていたためうまく動作してなかったのですね‥
何度もお付き合いいただきありがとうございました。
また、マクロ苦手様はすでに指摘してださっていたにも関わらず、私がダブルクォーテーションを取らずに実行しておりました‥。大変申し訳ございませんでした。
ご回答いただいたみなさまありがとうございました。
(するめ) 2023/11/15(水) 16:17:40
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.