好きなおでんの具材ドラフト会議しましょう

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
--------------------------------------------------------------------------

A 回答 (1件)

こんにちは



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

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

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


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

ありがとうございます。
VBAのコードについてですが,ご教示いただいたように修正すると動きました。

「シートを1ページに印刷」の設定(=自動拡大・縮小)はしていましたが,端末によっては2ページになってしまいました。(改ページの設定でも1ページしていました)
しかし,印刷範囲の設定はしていなかったので,明日,別の端末で試してみます。

お礼日時:2024/09/30 18:34

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

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


おすすめ情報

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