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

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

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

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

Q&A

解決済

1回答

2770閲覧

VBA PDF出力されたファイルの倍率を変えたい

taka-hoop

総合スコア14

VBA

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

0グッド

0クリップ

投稿2020/07/31 07:26

エクセルファイルからPDF出力されたファイルの画像サイズを整えたいため倍率を変えたいです。
1つのエクセルでPDFが2枚になったり3枚になって出力されてしまうところを全て一枚にまとめたいです。

VBA

1 2Sub EXCELファイルPDF化03() 'フォルダのEXCELファイルの一括変換 3 4 Dim Button, T, I, L As Integer 5 Dim OpenExcelFileName, ExcelFileName, ExcelFilePath, ExFileName As String 6 7 Application.DisplayAlerts = False '確認メッセージを無効化します。 8 9 10 Button = MsgBox("EXCEファイルの一括PDF変を行いますか?", vbYesNo + vbQuestion, "確認") 11 If Button = vbYes Then 12 13 OpenExcelFileName = Application.GetOpenFilename 'ダイアログを表示取り込むフォルダーにあるファイルを選択します。 14 15 If OpenExcelFileName <> "False" Then 16 ExcelFileName = Dir(OpenExcelFileName) '指定したファイルパスからファイル名を代入します。 17 ExcelFilePath = Replace(OpenExcelFileName, ExcelFileName, "") '指定したファイルパスを指定します。(ファイルパスからファイル名を取り除く) 18 19 MsgBox ExcelFilePath & "この選択フォルダからPDFに変換します。" 20 Else 21 MsgBox "キャンセルされました" 22 Exit Sub 'キャンセルでプログラムを終了します。 23 24 End If 25 26 ExFileName = Dir(ExcelFilePath & "*.xls?") '指定したフォルダーから一件目のEXCELファイルを指定します。 27 28 29 Do While ExFileName <> "" '読み込むファイルがなくなるまで繰り返す。 30 31 Workbooks.Open fileName:=ExcelFilePath & ExFileName, ReadOnly:=True, UpdateLinks:=0 'EXCELファイルを読み取り専用で読み込む 32 ExFileName = Left(ExFileName, InStr(ExFileName, ".") - 1) ' ファイル名から拡張子を取り除く(.xls?) 33 34 'ActiveWorkbook の記述はいらなかった 35 'レポートの記述にいらないスペースがあったかも 36 Dim ws As Worksheet 37 38 On Error Resume Next 'エラー無視 39 Set ws = Worksheets("レポート") 40 On Error GoTo 0 'エラー無視解除 41 If ws Is Nothing Then '"レポート"シートが存在しなければ、 42 Worksheets(Array("表紙", "検索", "表示箇所", "行動", "順位")).Select 43 ActiveSheet.ExportAsFixedFormat _ 44 Type:=xlTypePDF, _ 45 fileName:=ExcelFilePath & ExFileName, _ 46 OpenAfterPublish:=True 47 Else 48 ws.ExportAsFixedFormat _ 49 Type:=xlTypePDF, _ 50 fileName:=ExcelFilePath & ExFileName, _ 51 OpenAfterPublish:=True 52 End If 53 54 With ws.PageSetup 55 56 .Zoom = False '倍率をクリア 57 .FitToPagesWide = 1 '横方向に1ページに収める 58 .FitToPagesTall = 1 '縦方向に1ページに収める 59 .CenterHorizontally = True '水平方向に中央配置 60 .TopMargin = Application.CentimetersToPoints(1) '上マージンを1cm 61 .BottomMargin = Application.CentimetersToPoints(1) '下マージンを1cm 62 63            End With 64 65 66 ActiveWindow.Close '読み込んだファイルを閉じます。 67 68 ExFileName = Dir() '次のファイルを指定する。 69 70 Loop 71 72 73 MsgBox "PDFファイルに一括変換しました。" 74 Else 75 MsgBox "処理を中断します" 76 End If 77 78 Application.DisplayAlerts = True '確認メッセージを有効化します。 79 80End Sub 81 82

そのために上記のように記述したところ
実行エラー91 オブジェクト変数またはWithブロック変数が設定されていません
とのエラーが出てしまいます。

文法的な誤りなのか記述箇所が間違っているのかがわからない状態で詰まっております。
どういった風に修正すれば良いかもしくは上記のコード以外に方法があればご教授頂けると幸いです。

宜しくお願い致します。

参考にした記事: https://tonari-it.com/excel-vba-pdf-saveas-close/

OS:macOS Catalina バージョン10.15.3
Excelバージョン: Microsoft Excel for Mac バージョン16.39

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

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

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

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

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

guest

回答1

0

ベストアンサー

ws が Nothing の場合の処理では、ws を更新していないので、このIf ブロックを抜けた後の、With ws.PageSetup でエラーを起こす可能性があります。

With ws.PageSetup のブロックを Else ブロックに含めるか、If ブロックでwsの値を設定するか、どちらかの対処をしてください。

投稿2020/07/31 11:52

YT0014

総合スコア1708

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

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

taka-hoop

2020/08/01 06:45

ご回答ありがとうございます! お返事遅れて大変申し訳ありません With ActiveSheet.PageSetup .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 End With のような記述をif文の前で実行したところ上手く動作致しました! ご返答頂いたやり方とは少し違いますが、大変勉強になりました! ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問