Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : その他)
Wordの印刷画面にある「1ページ/枚」をExcel VBAで操作する方法は?
投稿日時: 20/07/14 10:51:55
投稿者: Alice87

Microsoft Excel for Office 365を使用しています。
 
Word VBAでPDF化する時に使う「CubePDF」のハンドルが取得できず苦慮している為、Excel VBAでWordの印刷画面の左下にある「1ページ/枚」の設定ができないかと思っています。
(WordはA3の用紙サイズですが、A4におさまるようにしたい為、「1ページ/枚」でA4を選択しPDF化するのが目的です。)
 
どなたかアイデアをお持ちの方がいらっしゃいましたら書き込んでいただけると幸いです。
 
宜しくお願い致します。

回答
投稿日時: 20/07/14 11:26:28
投稿者: sk

引用:
Wordの印刷画面の左下にある「1ページ/枚」の設定

引用:
WordはA3の用紙サイズですが、A4におさまるようにしたい

Word.Application オブジェクトや Word.Document オブジェクトなどの
PrintOut メソッドを呼び出す際に、引数 PrintZoomPaperWidth と
PrintZoomPaperHeight のそれぞれに A4 用紙の幅/高さを示す
twip 単位の数値(整数)を渡すようになさればよろしいでしょう。

投稿日時: 20/07/21 14:42:14
投稿者: Alice87

sk様
 
コメントを下さってから時間があいてしまいましたが、書込みありがとうございます。
 
sk様のアドバイスに則り下記のようにコードを作成したのですが、「1ページ/枚」でA4設定にならず、また「appWord.ActiveDocument.PrintOut」が入っている為、設定では表示が不要のPDFにする為のソフトが別ウィンドウで表示され、これを閉じるコードも必要になってきました。
 
そこで、いろいろと調べたところ下記コードを使うとWordの印刷画面が表示される為、これを表示させた後に画面左下の「1ページ/枚」の設定ができないか調べているところです。
appWord.CommandBars.ExecuteMso "PrintPreviewAndPrint" 'Wordの印刷設定画面表示
 
もし、この方法でのVBAコードの書き方をご存知でしたら、ご教示いただけると幸いです。
 
 Set appWord = CreateObject("Word.Application")
 
With appWord
 .Documents.Open myFile
  .Visible = True
                              
   If appWord.ActiveDocument.PageSetup.PaperSize <> 7 Then '用紙サイズがA4でなかったら(7はA4を表している)
          origin_Height = appWord.ActiveDocument.PageSetup.Pageheight
          origin_width = appWord.ActiveDocument.PageSetup.Pagewidth
     appWord.ActiveDocument.PrintOut PrintZoomPaperHeight:=origin_Height * 0.75
          appWord.ActiveDocument.PrintOut PrintZoomPaperWidth:=origin_width * 0.75
      end if
   
  .ActivePrinter = "CubePDF" 'cubePDFで印刷
  .ActiveDocument.PrintOut
end with

回答
投稿日時: 20/07/21 16:08:20
投稿者: sk

引用:
下記のようにコードを作成したのですが、「1ページ/枚」でA4設定にならず

(標準モジュール)
----------------------------------------------------------
Sub PrintDocument()
 
  Dim strFile As String
  Dim wrdApp As Object
  Dim wrdDoc As Object
   
  strFile = "C:\FolderName\FileName.docx"
   
  Set wrdApp = CreateObject("Word.Application")
  With wrdApp
    .Visible = True
    Set wrdDoc = .Documents.Open(strFile)
    .ActivePrinter = "CubePDF"
  End With
   
  With wrdDoc
    If .PageSetup.PaperSize = 7 Then
      .PrintOut
    Else
      .PrintOut PrintZoomPaperWidth:=11907, _
                PrintZoomPaperHeight:=16839
    End If
  End With
   
  wrdDoc.Close False
  Set wrdDoc = Nothing
  wrdApp.Quit
  Set wrdApp = Nothing
 
End Sub
----------------------------------------------------------
 
PrintOut メソッドは文字通り「プリントアウトさせる命令」であって、
何度も呼び出すものではありません。

投稿日時: 20/07/22 18:34:47
投稿者: Alice87

sk様
 
時間があいての書込みにも関わらず、具体的なコードを記載して下さり本当にありがとうございます。
 
sk様のアドバイスどおりに修正したところ、自分が行いたかった動作が正常に行われました\(^o^)/。
 
>PrintOut メソッドは文字通り「プリントアウトさせる命令」であって、
>何度も呼び出すものではありません。
→コードの書き方の根本を正しく理解していなかったので、マクロの記録を元にコピペしたり不要そうなところを削ったりしていたので、余計な記述を残してしまっていました。
 
諦めかけていたので、心から感謝です。
繰返しになりますが、誠にありがとうございました。