[[20120517123706]] 『VBAユーザーフォームからプリンタの設定を変える』(あや) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAユーザーフォームからプリンタの設定を変える』(あや)

XP Excel2003 Reader X

 VBAのユーザーフォームにAcroPDFでPDFファイルを表示させ
 該当ページを1アップで印刷しようとしています。
 (プリンタの標準設定は、2アップの設定になっています)

 application.dialogs(xldaialogpagesetup).show

 ’ページ設定の画面でオプションボタンを押して、
 ’2アップと 設定を変えて OK

 AcroPDF1.printpages Txt開始ページ,Txt終了ページ

 としています。

 しかし、プリンタ設定が変わっていない状態(2アップ)で印刷されてしまいます。

 希望としては、印刷ダイアログを出さずに
 マクロの中に設定を変える記述が出来れば良いのですが
 マクロの記録を取っても、記録されませんでした。
 (プリンタソフトの設定になってくるのかな)

 簡単に出来る部分ではなさそうなのですが…
 つぎはぎの知識なので^^;
 教えていただけるとありがたいです。

 [[20120427163339]]で質問させてもらっていて、
 1台だけReader Xにして対応しています。

 前回の問題は Reader X を設定できて、無事動いたようでしょうか。

 印刷設定を変更するのは大変なので(というかわからないので)、
 プリンタを切り替えて印刷してはどうでしょうか。

「設定」の「プリンタとFAX」でプリンタの追加で、印刷したいプリンタを再度登録して

 名前(例:PrintPDF)とします。

 PrintPDF を右クリックして印刷設定を選んで印刷したい設定をしておき、
 下記のマクロを使用してどうでしょうか
 (Mook)

 Sub Sample()
    '// 現在の通常使うプリンタを保存
    orgPrinter = vbGetDefaultPrinter()

    '// 登録したプリンタを通常使うプリンタに設定
    vbSetDefaultPrinter "PrintPDF"

  '// --- 今の印刷処理 ----

    '// 変更前のプリンタを通常使うプリンタに戻す
    vbSetDefaultPrinter orgPrinter
 End Sub

 Sub vbSetDefaultPrinter(printerName)
    Dim Locator
    Dim Service
    Dim MesStr

    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    Set Service = Locator.ConnectServer
    For Each ret In Service.ExecQuery("SELECT * FROM Win32_Printer")
        If ret.Name = printerName Then
            ret.setDefaultPrinter
            Exit Sub
        End If
    Next
 End Sub

 Function vbGetDefaultPrinter()
    Dim Locator
    Dim Service
    Dim MesStr

    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    Set Service = Locator.ConnectServer
    For Each ret In Service.ExecQuery("SELECT * FROM Win32_Printer Where Default = True")
        vbGetDefaultPrinter = ret.Name
        Exit Function
    Next
 End Function


 Mookさん ありがとうございます。
 まず、前回の結果報告のみさせてもらいます。

 1台だけ自由なパソコンがあるのでReader Xにアップして、
 メッセージボックスは出さずに印刷ができるようになりました。
 ご面倒おかけましたm(_ _)mありがとうございました。

 ただ、

 do until Txtページ>=500
     AcroPDF1.printpages Txtページ,Txtページ+1
     Txtページ=Txtページ+4
 loop

 のようにすると、ページ指定をしているにもかかわらず
 全ページが印刷されてしまいます。

 こちらは、ページ数を毎行手書きで対応できるので、
 エクセル画面でコピペや数式を使って、ゴリゴリ書きました。
 AcroPDF1.printpages 1,2
 AcroPDF1.printpages 5,6
 ↓
 AcroPDF1.printpages 500,501 といったように。

 環境による壁をなんとか制御できないものかとお助け願いましたが、
 なんともならない部分であったことを痛感しました。
 懲りてませんけど、消耗が激しいです^^;

 また明日、教えて頂いたプリンタの設定を試してみます。

 (あや)


 プリンタを切り替えで、希望の動きになりました。
 Mookさんありがとうございました。

 全体の8割くらい出来上がってきました^^

 (あや)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.