[[20231113141051]] 『「自動保存で上書きされないようにしたい」[96] 』(するめ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『「自動保存で上書きされないようにしたい」[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 >


>エクセルと同じフォルダにPDFを出力したいです。
>myfol = "\\保存先" '保存先フォルダ
"\\保存先"を
ThisWorkbook.Path にしたらどうでしょう。
(マクロ苦手) 2023/11/13(月) 15:49:55

>保存先をActivWorkbook.Pathにして実行
Activ"e"Workbookと名前が間違っているから「そんな保存先はないよ」と怒られているのでは?

(エリス) 2023/11/13(月) 18:57:56


マクロ苦手様
コメントありがとうございます。
>ThisWorkbook.Path にしたらどうでしょう。
試してみましたが、同様のエラーになります。

エリス様
コメントありがとうございます。
>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.