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

エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。
おそれいります。こちらで数々のエクセルVBAを教えていただいておりますが、最近、ご教授頂いたマクロで、ファイル名を日付けにして、PDFにして保存するということをしています。更に同じ日付け名が2つ以上、作った場合には日付けに枝番がつくようにもしています。(上書きにならないようにするため 例:20230630(1).pdf)
このファイル名を日付けをやめて、ワークシートのセルの値(文字列)に変更しようと、コードを触ってみたのですが、VBA初心者の私には、結局、分からずじまいでした。
すみませんが、以下のVBAコード日付けからセル値に変更していただけないでしょうか?
宜しくご教授お願い致します。

Sub PDF()
'
' pdf Macro
  ActiveSheet.PrintOut
  Const Folder As String = "C:¥Users¥Home¥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

A 回答 (6件)

>私はセルを標準にして、2023年6月23日と言う文字(数字も入ってますが)で入れていました。


もし、「2023年6月23日」 と 表示されたままの文字をそのまま使いたいなら、
fname = Range("H3").Value
ではなく、
fname = Range("H3").Text
とすれば、みたままの状態の文字になります。
(fname=2023年6月23日 となります)
    • good
    • 1
この回答へのお礼

ありがとうございます。全て解決いたしました。長々とお付き合い頂きありがとうございました。
tatsumaru77様のおかげで、さらに、VBAの勉強に拍車がかりそうです。感謝申し上げます。

お礼日時:2023/07/01 16:13

>ありがとうございます。

文字です。

¥/:*?”等の文字は含んでいないと解釈しました。
H3の内容が、あなたが期待したものか確認するために、
fname = Range("H3").Value
の次の行へ
MsgBox ("fname=" & fname)
を追加して実行してみてください。

もし、H3にABCが設定されていれば
fname=ABC
のようにメッセージボックスに表示されるはずです。
H3に設定した内容が表示されるか確認していただけませんでしょうか。

追伸:
こちらでH3に AB/C を設定し、実行すると、
実行時エラー1004
ドキュメントを保存できませんでした。ドキュメントが開いているか、保存時にエラーが発生した可能性があります。
のエラーが発生することを確認しています。
この場合、/の文字があるために、このエラーが発生しています。

従って、エラーが発生する要因としては、
①使用してはいけない文字をH3に設定している。(/の文字を設定)
②H3に設定した文字がfnameに反映されていない。
(他のシートのH3に内容がfname反映されている)
のどちらかです。
    • good
    • 0
この回答へのお礼

ありがとうございます。ABCでうまくいきました。実際は、色々な文字が、はいります。たとえば、普通の文字を入れるパターン、または、不特定の日付けを入れるパターンもあり、私はセルを標準にして、2023年6月23日と言う文字(数字も入ってますが)で入れていました。よく見ると数式バーには、2023スラッシュ6 スラッシュ 23となっており、やはり、おっしゃる通り、禁止文字があるからだと考えます。申し訳ありません。
ちなみに、禁止文字を使うことは、VBAでは、不可能ですね!ありがとうございます

お礼日時:2023/07/01 15:46

>ご指示頂いた内容を書き換えましたが、実行時エラーがでてしまいます。



H3セルの内容は、具体的にどのような値が設定されていますか。
ファイル名として¥/:*?”等の文字は使えません。
使えない文字をファイル名として設定していませんでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。文字です。

お礼日時:2023/06/30 23:40

>ご指示頂いた内容を書き換えましたが、実行時エラーがでてしまいます。



エラーは、どのようなエラーでしょうか。どの行で発生していますか。
前提として
①H3のセルがあるシートと印刷するシートは、同じシートであること。
②上記のシートを表示した状態(上記のシートがアクティブシート)
でマクロを実行すること。

が必須です。①②の条件は守られていますか。
    • good
    • 0
この回答へのお礼

何度も、お付き合い頂き感謝致します。エラーは、
実行時エラー1004
ドキュメントを保存できませんでした。ドキュメントが開いているか、保存時にエラーが発生した可能性があります。
と、でます。
①は、PDFに変換された画面を印刷しています。
日付けを名前にしていた場合は、印刷はできていました。
②エクセルのワークシート上では、アクティブな状態だと、私は思っているのですが、ちがうのでしょうか?

結局、①②が守られていないのですかね?ただ、日付けの場合は、実行できていたので、セルの値を名前にすることは、単にゴード内容を触るだけでいい、私の無知な判断が、間違いなのかもしれません。

お礼日時:2023/06/30 23:38

fname = Format(Date, "yyyymmdd") 



fname = Range("H3").Value
に変えてください。
    • good
    • 0
この回答へのお礼

早速、ありがとうございます。ご指示頂いた内容を書き換えましたが、実行時エラーがでてしまいます。

お礼日時:2023/06/30 22:56

セルはどのセルですか?


セルの内容が"ABC"の場合、
ABC.pdf
ABC(1).pdf
ABC(2).pdf
のようにファイルが作成されれば良いのでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
はい、そうです。
たとえばセルH3に、文字ABCが、入力された状態でマクロを実行すると、ABC.pdfと保存され、プリントアウトする仕組みになっています。再度、マクロを実行すると.ABC(1).pdfとなります。
宜しくお願い致します。

お礼日時:2023/06/30 22:38

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

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


このQ&Aを見た人がよく見るQ&A