電子書籍の厳選無料作品が豊富!

office365を使っている者です。
以前,この掲示板でExcel VBAで連続でPDFを作製し,それらを結合した状態でPDFで出力するコードを以下のとおり教えていただいた者です。
結合する前のデータ1件につき1ページでPDFが作成されるように設定を加えたいと思い,質問させていただきます。

--------------------------------------------------------------
Sub 連続PDF作成()
Dim stK, stY, stD
Dim startN, endN, i As Long
Const AA = "A1:H40" ' ← コピー(転記)対象のセル範囲
Const fileName = "hoge" ' ← 作成するPDFファイル名

Set stK = Worksheets("回答")
Set stY = Worksheets("様式")
startN = stK.Range("I2").Value
endN = stK.Range("I3").Value
If Application.CountBlank(stK.Range("I2:I3")) > 0 Or _
Not (IsNumeric(startN) And IsNumeric(endN)) Then _
MsgBox "無効な入力です": Exit Sub


Application.ScreenUpdating = False
Application.DisplayAlerts = False
stY.Copy
With ActiveWorkbook
Set stD = ActiveSheet
For i = startN To endN
stK.Range("A5").Value = stK.Cells(i + 9, 1).Value
stD.Copy after:=.Worksheets(.Worksheets.Count)
.Worksheets(.Worksheets.Count).Range(AA).Value = stY.Range(AA).Value
Next i

stD.Delete
.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\" & fileName
.Close False
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
------------------------------------------------------------------------

「様式」シートの内容を新しいシートとしてコピーして,値だけにして,それを順番に結合していくという内容になっています。「様式」シート1件のデータ(変数 i でコントロールしています)につき1ページでPDFを作成したいのですが,上のコードだと端末の環境によっては2ページになってしまうことがあります。
そこで,以下のようにPageSetupのコードを「stD.Copy after:=.Worksheets(.Worksheets.Count)
.Worksheets(.Worksheets.Count).Range(AA).Value = stY.Range(AA).Value」と「Next i」の間に入れてみたのですが,デバックで止まってしまいます。(実行時エラー「438」です)
どのようにすれば,問題なく動くようになるのかご教示願います。
---------------------------------------------------------------------
.Worksheets(.Worksheets.Count).Range(AA).Value = stY.Range(AA).Value

.Worksheets(.Worksheets.Count).PageSetup
.Worksheets(.Worksheets.Count).Zoom = False '拡大/縮小の指定を無しにする
.Worksheets(.Worksheets.Count).FitToPagesWide = 1 '1ページに収める(横)
.Worksheets(.Worksheets.Count).FitToPagesTall = 1 '1ページに収める(縦)
.Worksheets(.Worksheets.Count).CenterHorizontally = True '真ん中に配置(横)
.Worksheets(.Worksheets.Count).CenterVertically = True '真ん中に配置(縦)

Next i
--------------------------------------------------------------------------

  • 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
  • 今の自分の気分スタンプを選ぼう!
あと4000文字

A 回答 (1件)

こんにちは



原因はプリンターの差異や、デフォルトの環境設定の違いなどと推測されます。

ご提示のように毎回個別に印刷設定する方法でも可能とは思いますが、設定情報はシートの情報として記憶されていますので、シートをコピーした際にも引き継がれます。

ですので、事前に「様式」シートの印刷設定で
 ・印刷範囲を「A1:H40」に設定
 ・「シートを1ページに印刷」に設定(=自動拡大・縮小)
に手動で設定しておけば済むのではないでしょうか?


なお、ご提示のコードのエラーの原因は、ご提示では、
 >worksheet.Zoom ~~
等となっていますけれど、正しくは
 worksheet.PageSetup.Zoom ~~
です。(他の属性設定も同様)
このため「プロパティがありません」のエラーになると推測されます。
https://learn.microsoft.com/ja-jp/office/vba/api …
    • good
    • 0

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