- ベストアンサー
エクセルファイルのPDF保存マクロ
お世話になります。 エクセル2007を使用しています。コマンドボタンを押すとMsg BOXを出現させ「PDF形式で保存しますか?」と表示し「はい」を押すとエクセルファイルをPDFファイル形式に自動で保存しようと考えています。 紙の大きさはB4サイズでPDFファイルに保存させたいです。 保存先はデスクトップのフォルダ「購買分」と言う所に保存します。 保存の名称に関してはエクセルファイルのC1には「2014年2月」と表示されており「購買分2014年2月」と自動で保存してくれる様にしたいです。 この様なマクロはエクセルで組むことが出来るのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ちょっと強引かもしれませんが,とりあえず保存できる方法として Sub Sample() If Range("C1").Value <> "" Then Dim Fn As String Fn = Format(Range("C1"), "yyyy年m月") & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:="C:\Users\ユーザー名\Desktop\購入分" & Fn Else MsgBox "セルC1にファイル名が入力されていません。", vbExclamation End If End Sub 最初の通常保存時には使用できない文字を入力する場合、エラーメッセージを発生させてVBAを止める部分を消せば、保存できました。
その他の回答 (2)
- ryo_ky
- ベストアンサー率47% (112/237)
先ずNet上で見つけたマクロを解釈してみますと Sub Sample() With Range("C1") If .Value <> "" Then If InStr(.Value, "\") > 0 Or _ InStr(.Value, "/") > 0 Or _ InStr(.Value, ":") > 0 Or _ InStr(.Value, "*") > 0 Or _ InStr(.Value, "?") > 0 Or _ InStr(.Value, """") > 0 Or _ InStr(.Value, "<") > 0 Or _ InStr(.Value, ">") > 0 Or _ InStr(.Value, "|") > 0 Then MsgBox "セルC1にファイル名に使えない文字(\/:*?" & """" & "<>|)が含まれています。", vbExclamation ファイル名(C1のセル)に「\、/、:、*、?、""、<、>、|」が入っている場合はメッセージを表示させて、マクロを終了させるという意味になります。 Else ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:="C:\Users\ユーザー名\Desktop\" & .Value & ".pdf" ファイル名に上記の文字が入っていない場合,C1.valueの名前でpdf形式で保存します。 End If Else MsgBox "セルC1にファイル名が入力されていません。", vbExclamation End If End With End Sub あるサイトでこの様なVBAが見つかりました。これで出来るかと思いましたがC1の日付の表示が「2014/2/16」となっているため「セルC1にファイル名に使えない文字(\/:*?" & """" & "<>|)が含まれています。」と表示され保存できません。 書式形式を変更しても上手くいきませんでした。どうすれば良いでしょうか? 書式ではなく、そのセルの値の属性が何であるかが重要だと思います。 仮に文字だとすれば、2014/2/16.pdfを作ろうとしますので、これは最初のIF構文中の「/」が入っているので保存できない、という解釈になります。 ところで、保存したいファイル名は「購入分2014年2月」であるので ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:="C:\Users\ユーザー名\Desktop\" & .Value & ".pdf" を Dim Fn as String Fn = Format(Range("C1"), "yyyy年m月") & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:="C:\Users\ユーザー名\Desktop\購入分" & Fn に変えてみて下さい。多分できると思います。 補足ですが、ユーザー名は自分のアカウント名を入力してくださいね。
お礼
ありがとうございました、無事に解決しました。この度は私の為に時間を割いていただきありがとうございました。
補足
保存しようとしたら「セルC1にファイル名に使えない文字(\/:*?" & """" & "<>|)が含まれています」と表示され、該当するフォルダに保存出来ませんでした。 C1セルの年月はカレンダーから選択する仕様になっており、セルの書式設定が「〇〇〇〇年〇〇月」となってます。C1セルを標準の文字に設定すると2014年2月17日は「41687」と言う文字になりますね。
- ryo_ky
- ベストアンサー率47% (112/237)
2010で同じような事ができていますので、おそらくできると思います。 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ フォルダのパスとファイル名 & ".pdf", Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= False ファイル名の部分はRange(C1)で指定すれば良いと思います。
お礼
ありがとうございました、無事に解決しました。この度は私の為に時間を割いていただきありがとうございました。
補足
Sub Sample() With Range("C1") If .Value <> "" Then If InStr(.Value, "\") > 0 Or _ InStr(.Value, "/") > 0 Or _ InStr(.Value, ":") > 0 Or _ InStr(.Value, "*") > 0 Or _ InStr(.Value, "?") > 0 Or _ InStr(.Value, """") > 0 Or _ InStr(.Value, "<") > 0 Or _ InStr(.Value, ">") > 0 Or _ InStr(.Value, "|") > 0 Then MsgBox "セルC1にファイル名に使えない文字(\/:*?" & """" & "<>|)が含まれています。", vbExclamation Else ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:="C:\Users\ユーザー名\Desktop\" & .Value & ".pdf" '引数Filenameには保存したい場所を指定してください(このコードではデスクトップに保存しています)。 End If Else MsgBox "セルC1にファイル名が入力されていません。", vbExclamation End If End With End Sub あるサイトでこの様なVBAが見つかりました。これで出来るかと思いましたがC1の日付の表示が「2014/2/16」となっているため「セルC1にファイル名に使えない文字(\/:*?" & """" & "<>|)が含まれています。」と表示され保存できません。 書式形式を変更しても上手くいきませんでした。どうすれば良いでしょうか?
お礼
ありがとうございました、無事に解決しました。この度は私の為に時間を割いていただきありがとうございました。