質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

1639閲覧

【VBA】ExcelのPDF化の一括

sh444

総合スコア15

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/09/10 05:54

編集2021/09/10 05:56

この度、Excel2019に変わったのですが下記のコードが使えなくなりました。
拾ってきたコードなので、VBAに関しては初心者です。
こちらのコートが2019版のExcelには利用できないのでしょうか?
ちなみに、PDF化したいExcelの拡張子はxlsmなので、
ExFileName = Dir(ExcelFilePath & ".xls?")
を下記に変更してみました。
ExFileName = Dir(ExcelFilePath & "
.xlsm?")

VBA実行後に、「PDFファイルに一括変換しました」というポップアップは表示されるのですが、PDFは作られておりません。

Sub

1 2 Dim Button, T, I, L As Integer 3 Dim OpenExcelFileName, ExcelFileName, ExcelFilePath, ExFileName As String 4 5 Application.DisplayAlerts = False '確認メッセージを無効化します。 6 7 8 Button = MsgBox("EXCEファイルの一括PDF変を行いますか?", vbYesNo + vbQuestion, "確認") 9 If Button = vbYes Then 10 11 OpenExcelFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") 'ダイアログを表示取り込むフォルダーにあるファイルを選択します。 12 13 If OpenExcelFileName <> "False" Then 14 ExcelFileName = Dir(OpenExcelFileName) '指定したファイルパスからファイル名を代入します。 15 ExcelFilePath = Replace(OpenExcelFileName, ExcelFileName, "") '指定したファイルパスを指定します。(ファイルパスからファイル名を取り除く) 16 17 MsgBox ExcelFilePath & "この選択フォルダからPDFに変換します。" 18 Else 19 MsgBox "キャンセルされました" 20 Exit Sub 'キャンセルでプログラムを終了します。 21 22 End If 23 24 ExFileName = Dir(ExcelFilePath & "*.xls?") '指定したフォルダーから一件目のEXCELファイルを指定します。 25 26 27 Do While ExFileName <> "" '読み込むファイルがなくなるまで繰り返す。 28 29 30 Workbooks.Open FileName:=ExcelFilePath & ExFileName, ReadOnly:=True, UpdateLinks:=0 'EXCELファイルを読み取り専用で読み込む 31 ExFileName = Left(ExFileName, InStr(ExFileName, ".") - 1) ' ファイル名から拡張子を取り除く(.xls?) 32 ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, FileName:=ExcelFilePath & ExFileName '選択したシートをPDF出力 33 34 ActiveWindow.Close '読み込んだファイルを閉じます。 35 36 ExFileName = Dir() '次のファイルを指定する。 37 38 Loop 39 40 MsgBox "PDFファイルに一括変換しました。" 41 Else 42 MsgBox "処理を中断します" 43 End If 44 45 Application.DisplayAlerts = True '確認メッセージを有効化します。 46 47End Sub 48コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ExFileName = Dir(ExcelFilePath & "*.xlsm?")
ここのワイルドカードの?は任意の1文字なので.xlsmを指定したければ?はいらないと思います。
?があるので1件も引っかかっていない可能性があります。

投稿2021/12/31 02:46

vann_2921

総合スコア190

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ExcelからPDFに変換する場合には、ドキュメントの変換にふさわしい.NETプラットフォーム用コンポーネント、Spire.XLS for .NETをおすすめします。これは無料で使用でき、簡単かつ便利な強力なツールとして、変換に対することは潔く解決できます。VBAのコードは以下のようになります、ご参照してください。

Imports

1Namespace Convert 2 Class Program 3 Private Shared Sub Main(args As String()) 4 Dim workbook As New Workbook() 5 workbook.LoadFromFile("test.xlsx", ExcelVersion.Version2010) 6 ' ワークブックに新しいシートを追加する 7 workbook.Worksheets.Add("newsheet") 8 '選択された範囲を新しいシートにコピーする 9 workbook.Worksheets(0).Range("A1:H11").Copy(workbook.Worksheets(1).Range("A1:H11")) 10 '新しいシートをPDFに変換する 11 workbook.Worksheets(1).SaveToPdf("result.pdf", Spire.Xls.FileFormat.PDF) 12 13 End Sub 14 15 End Class 16End Namespace

お助けになると幸いです(笑)

投稿2021/12/31 02:39

yamausag1

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Excel2019の環境がないので調べたところ、以下でPDFができているという話を見つけました。

https://teratail.com/questions/281146

なので、バージョンの問題である可能性は低い気がします。
コードを見る限り,選択したファイルと同じフォルダにPDFファイルができるようですが、その認識であっていますか?

投稿2021/09/10 06:43

編集2021/09/11 01:11
hex309

総合スコア761

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sh444

2021/09/10 06:50

保存先は、同じファイル内でも新規のPDFフォルダの作成でもどちらでも大丈夫です。 1ページのみPDF化ではなく、選択しているタブすべてのPDF化できれば助かります。
hex309

2021/09/10 08:09

私の回答がわかりにくかったようで申し訳ありません。 ご提示頂いたコードは、2019バージョンでも動作するようなので、PDFファイルはできていると考えられます。 そこで、保存先を勘違いされているのでは、と考えて「選択したファイルと同じフォルダにPDFファイルができるようですが、その認識であっていますか?」と書かせていただきました。 PDFファイルができないことは、間違いないのですね。 PDFファイルが作成できるかどうか、次のコードで確認できますか? Private Sub PDFTest() Dim ExcelFilePath As String Dim ExFileName As String ExcelFilePath = ThisWorkbook.Path ExFileName = "\" & ThisWorkbook.Name ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ExcelFilePath & ExFileName '選択したシートをPDF出力 End Sub このコードは、コードを記述下ブックと同じフォルダに、同じファイル名(拡張子が含まれてしまいますが、そこは勘弁を)でPDFファイルが作成できるか確認してみてください。 実際にPDFファイル作成する部分は、ActiveWorkbookがThisWorkbooknなっただけなので、これでPDFが出力されれば、PDFを作ること自体はできる、と考えられるかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問