• ベストアンサー
  • 暇なときにでも

エクセルVBAで最高画質印刷

エクセルVBAでプリントを綺麗にさせたい場合、わたしのプリンターでは .PrintQuality = 1200 を指定しています。 しかし、印刷品質はプリンターによると思いますので、他のプリンタを使う端末で作動させた場合、1200dpiが使えないものなら.PrintQuality = 1200ではエラーになると思います。 こういった場合(どんなプリンターかわからない場合)、そのプリンターの最高画質で印刷させるためにはVBAをどんなふうに記述すればいいでしょうか?

共感・応援の気持ちを伝えよう!

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.2

こんにちは。KenKen_SP です。 下記コードをそれぞれの場所にコピー&ペーストして下さい。 ご希望どおり動くと思いますが、テストする時間がなかったので、 いきなり重要なファイルでは試さなさないで下さい。 '◆場所:ThisWorkbook ------------------------------------------------ Option Explicit '印刷クオリティー調整 Private Sub Workbook_BeforePrint(Cancel As Boolean)   Dim sPrinter As String   Dim lResmode As Long      On Error GoTo ErrorHandler      'アクティブプリンタ名取得   sPrinter = GetActivePrinter()   If sPrinter <> vbNullString Then     'アクティブプリンタの最高解像度取得     lResmode = GetHighResMode(sPrinter)   End If   '解像度が取得できたときのみ変更   If lResmode <> 0 Then     ActiveSheet.PageSetup.PrintQuality = lResmode   End If   Exit Sub    ErrorHandler: End Sub '----------------------------------------ここまで ThisWorkbook-------- '◆場所:標準モジュール ---------------------------------------------- Option Explicit 'プリンタデバイスドライバの能力を取得する Private Declare Function DeviceCapabilities Lib "winspool.drv" _   Alias "DeviceCapabilitiesA" ( _   ByVal pDevice As String, _   ByVal pPort As String, _   ByVal fwCapability As Long, _   pOutput As Any, _   pDevMode As Any _ ) As Long 'fwCapability定数 Private Const DC_ENUMRESOLUTONS = 13 '使用可能な解像度リスト 'プリンタの最高印刷解像度を取得 Public Function GetHighResMode(strPrinterName) As Long   Dim lngApiResultCode As Long   Dim lngResMode()   As Long      '関数初期化   GetHighResMode = 0   '使用可能な解像度モード数(Long)*2 = バッファサイズ   lngApiResultCode = _     DeviceCapabilities( _       strPrinterName, vbNullString, _       DC_ENUMRESOLUTONS, _       ByVal vbNullString, _       ByVal vbNullString _     )   If lngApiResultCode <> 0 Then     '解像度取得     ReDim lngResMode(lngApiResultCode * 2 - 1)     lngApiResultCode = _       DeviceCapabilities( _         strPrinterName, _         vbNullString, _         DC_ENUMRESOLUTONS, _         lngResMode(0), _         ByVal vbNullString _       )     If lngApiResultCode <> 0 Then       '最高解像度を返す       GetHighResMode = Application _       .WorksheetFunction.Max(lngResMode)     End If   End If End Function 'アクティブプリンタ名を返す(不要文字カット) Public Function GetActivePrinter() As String   Dim sPrinterName As String   Dim iSplitPos  As Integer      GetActivePrinter = vbNullString   sPrinterName = Application.ActivePrinter   iSplitPos = InStr(1, sPrinterName, " on")   If iSplitPos > 0 Then     GetActivePrinter = Left$(sPrinterName, iSplitPos - 1)   Else     iSplitPos = InStr(1, sPrinterName, "の")     If iSplitPos > 0 Then       GetActivePrinter = Mid$(sPrinterName, iSplitPos + 2)     End If   End If    End Function '--------------------------------------ここまで 標準モジュール--------

共感・感謝の気持ちを伝えよう!

質問者からのお礼

うっひゃぁ~! ほんとに大掛かりなコードですねえ! こうなると、もう何がなんだかわかりませんが、何度もありがとうございました。 このままコピペしてためしたら、ばっちりOKでした。

その他の回答 (1)

  • 回答No.1

こんにちは。KenKen_SP です。 > そのプリンターの最高画質で印刷させるためにはVBAをどんなふう > に記述すればいいでしょうか? Win32 API の DocumentProperties あたりを使うと可能ですが、複雑 で大掛かりなコードになります。プリンタ制御って結構難しい部類で すね。技術資料が少ないのです。 On Error ステートメントで逃げるのはダメですか? 下記のコードは、ThisWorkbook に貼り付けて下さい。 '印刷クオリティー調整(場所:ThisWorkbook) Private Sub Workbook_BeforePrint(Cancel As Boolean)   On Error Resume Next   ActiveSheet.PageSetup.PrintQuality = 1200   '実行時エラーが発生した場合   If Err.Number > 0 Then     ActiveSheet.PageSetup.PrintQuality = 600   End If   On Error GoTo 0 End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

KenKen_SPさん、いつもお世話様です。 プリンタ制御って大変なんですね。 そんな大掛かりなコードになるなら、上記のやりかたで十分です。 ありがとうございました。

関連するQ&A

  • エクセルVBAでの画像印刷について。

    エクセルVBAにて、JPG画像ファイルを印刷するにはどのように記述すればいいのでしょうか? JPG画像ファイルをフルパスで指定して印刷できればベストです。 宜しくお願い致します。

  • VBA PDFでの印刷について

    エクセルで印刷する時に、PDF(アクロバット)にて印刷をさせるVBAを教えて下さい。 印刷を押す⇒PDFでの印刷といった感じにしたのです。 通常時のプリンタ指定は違うプリンタになっています。

  • 常に最高画質dpiで印刷するには(EW-452)

    ほぼ10年前のhpのプリンタからEW-452に買い替えたところ、写真も、ウェブページも印刷画質が悪くなりました。最大dpi自体はEW-452の方が高いようなので、設定に問題があるのではと思っています。hpは最大dpiという設定が容易にできて、常にそれを使っていました。EW-452ではレベルとかきれいとかでししか設定できず最大dpiにどうしたらできるのかわかりません。常にどんなサイズでも最大dpiで印刷できる設定はないのでしょうか。 また、写真ではフチなしだと画質レベル3までですが、ありにするとレベル4にできますが、画像自体が小さいので意味がありません。この意味不明な設定もなくしたいです。 ※OKWAVEより補足:「EPSON社製品」についての質問です。

  • 高画質での印刷

    パソコンでサイトのページを印刷するときに、品質を高画質にすると「別のプリンター設定と競合するため、高画質は変更されました。」と出て、高画質で印刷が出来ません。 A4普通紙で印刷しています。 「下書き」「標準」「写真」は選択が出来ます。 1ヶ月ほど前までは、普通に印刷出来ていました。 パソコン・プリンター共に1台ずつで使用しています。 パソコン:Dynabook T75 PT75TWP-BWA プリンター:brother DCP-J963N パソコンの問題なのか、プリンターの問題なのかも分かりません。 あまり詳しくないので、分かりやすく教えていただけると助かります。 よろしくお願いいたします。 ※OKWaveより補足:「ブラザー製品」についての質問です。

  • 印刷面が広く高画質プリントできるCD-R

    印刷面が広くて、なるべく高画質でプリントできるCD-RもしくはCD-RWを教えて下さい。 よくある艶消しマットなものは少し苦手です。 信頼あるメーカーでお願いいたします。 それとDVDになりますが、maxellで艶アリ画質のものがありましたが印刷の品質は如何なものでしょうか? プリンターはEPSONのEP-703Aです。

  • プリンタの写真印刷画質

    キャノンのプリンタ(iP4830)が壊れたので、同程度の単機能モデルのiP7230に買い換えようと思い、某大手電気店に行きましたら、写真画質ならエプソンの方がいいと、同じような単機能モデルのEP-306を奨められました。エプソンは使ったことがありませんが、写真好きの人にはエプソンユーザが多いという話は聞いたことがあります。実際問題としてどうなのでしょうか。写真印刷をされている方のご意見をお聞きしたい。 ちなみに仕様としては、iP7230は5色独立で最高解像度は9600×2400dpi,EP-306のそれは6色、5760×1440dpi、です。

  • エクセルのマクロとVBAについて

    まだあまり多用していないのですが、エクセルでは使っていくアイコンを指定することで(それを利用することで)、マクロを組みそれがエクセルのVBAで記述されるということですが、その逆エクセルのVBAで記述したプログラムを動作に対応したアイコン等の流れで示すことは出来るのでしょうか?もしあったらどのような方法でしょう?

  • EXCELマクロPrintQuality

    マクロで、印刷の設定をするのに解像度を300に設定するのに .PrintQuality = 300 というのを使っていました。このたび、プリンタを買い換えたところ、「.PrintQuality = 300」がエラーになってしまいました。 どうも、プリンタのドライバのせいか、プログラムで解像度を変更することができないようです。 また、手動で、EXCELを開き、ファイル→ページ設定→ページ→印刷品質が変更できないのです。(以前のプリンタは変更できた)このことも関係あるのかもしれませんが、ドライバを変更することはできないので、なんとか解像度をPrintQuality以外を使用して300に固定したいのです。 ご存知の方、教えてください。よろしくお願いします。

  • エクセルVBA カレントモジュールの印刷

    VBAエクセル2002使用です。 カレントモジュールは通常、 subとかIfとかの定型文は青色、 ’以下は緑色 その他は黒 となっていますが、ファイル目メニューから印刷すると全部黒色でしかプリントアウトできません。(プリンターはカラーです) 設定画面を探しても見当たらないのですが、カラー印刷できるのでしょうか? よろしくお願いします。

  • 高画質での印刷方法をお知らせください

    「ブラザー製品」についての質問です。 DCP595CN、およびDCP-J968Nを併用して利用しています。 DCP-J968Nで印刷するときに、印刷表示を高画質に変更すると 「別のプリンター設定と競合するために印刷品質は高画質から 変更されました」と表示されます。 DCP-J968Nでの、高画質での印刷方法をお知らせください。 よろしくお願いします。 ※OKWAVEより補足:「ブラザー製品」についての質問です。