EXCEL VBA です
印刷しようとするプリンターがカラー印刷に対応出来しているか
確認する方法は無いでしょうか。
よろしくお願いします。
GetDeviceCaps APIでBITSPIXELを引数に指定して
戻り値で判断してみてはいかがでしょう。
ななしさん有難うございます。
早速、サンプルを作ってみました。
VB6.0 ですと プリンターのハンドルをPrinter.hdcで渡せば
上手く調べることが出来ました。
EXCEL VBA で調べたいのですが、
Sub test1()
Const BITSPIXEL = 12
Dim ret As Long
Dim lnghPrinter As Long
Dim ActivePrinterName As String
ActivePrinterName = Mid$(Application.ActivePrinter, 1, _
InStr(1, Application.ActivePrinter, " on ") - 1)
ret = OpenPrinter(ActivePrinterName, _
lnghPrinter, _
ByVal vbNullString)
Debug.Print GetDeviceCaps(lnghPrinter, BITSPIXEL) '<-- ここ
ret = ClosePrinter(lnghPrinter)
End Sub
最悪、VB6.0でACTIVEX.DLLを作成すればなんとか成りそうですが
出来れば、EXCELの中だけで何とかしたいと思います。
GetDeviceCaps でどうすれば良いかご教示をお願いいたします。
> プリンターのハンドルをPrinter.hdcで渡せば
プリンタのハンドルというと語弊があるかも。
デバイスコンテキストハンドル、ですよね。
> GetDeviceCaps でどうすれば良いかご教示をお願いいたします。
CreateDC APIを使ってみるとか。
魔界の仮面弁士さん有難うございました。
WinXP では上手く動きましたが
WinMEでは、カラープリンターでも、モノクロプリンターでも
CreateDCで1が戻ります。
どちらのOSもデバイスコンテキストハンドルは取得できています。
Sub test()
Const BITSPIXEL = 12
Dim ret As Long
Dim lnghPrinter As Long
Dim ActivePrinterName As String
Dim devm As DEVMODE
Dim intPos As Integer
devm.dmSize = LenB(devm)
intPos = InStr(1, Application.ActivePrinter, " on ")
If intPos > 0 Then
ActivePrinterName = Mid$(Application.ActivePrinter, 1, intPos - 1)
End If
If intPos = 0 Then
intPos = InStr(1, Application.ActivePrinter, " の ")
If intPos > 0 Then
ActivePrinterName = Mid$(Application.ActivePrinter, intPos + 3)
Else
MsgBox ("ありえねぇ〜")
Exit Sub
End If
End If
lnghPrinter = CreateDC("WINSPOOL", ActivePrinterName, vbNullString, devm)
Debug.Print GetDeviceCaps(lnghPrinter, BITSPIXEL)
ret = DeleteDC(lnghPrinter)
End Sub
http://vbvbvb.com/jp/gtips/0301/gSetPrinterDmOrientation.html
プリンタのデバイス構造体の
dmColor(int) にフラグがセットされると思います。
上記URLのサンプルを改造ではうまくいきました。
OS依存、ドライバー依存の保障はできないかもしれませんね。
クラゲさん 有難うございました。
早速試してみます。
ツイート | ![]() |