• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelでDeviceCapabilitie)

ExcelでDeviceCapabilitiesを使用して用紙番号を取得する方法

このQ&Aのポイント
  • ExcelでAPIを使用して、用紙番号を取得する方法について教えてください。
  • Excel2007(OS Win7)上では取得できるのですが、Excel2000(OS WinXP)上ではエラーが発生します。
  • GetPrinterNameAndPortで、バージョンによって『 on 』と『の』が使い分けられますが、どちらでも取得できません。アドバイスをお願いします。

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

●Excelで用紙番号取得 http://okwave.jp/qa/q6399905.html の方の [ANo.2] に対する [補足] を拝見いたしました。 >バッファ確保の所で、 >『インデックスが有効ではありません』 >と出ます。 とのことですが、当該箇所が ReDim bytPaper(64 - 1, lngPaperCount - 1) になりますよね?  私の環境(Windows XP Pro SP3 & Excel 2003)では問題なく動くようです。 --------------------------------------------------------  ところで、問題なく動く場合は、VBE で Numbertest を ステップ イン デバッグ していくと、「lngPaperCount」の値は、 lngPaperCount = DeviceCapabilities(strDeviceName, strDevicePort, DC_PAPERNAMES, ByVal vbNullString, ByVal vbNullString) のところで「0」から "求めたい数値" に変化するようです。  ところが、GetPrinterNameAndPort で適正な値が取得できなかった場合は、同じところで「0」から「-1」に変ります。  つまり、 ReDim bytPaper(64 - 1, -1 - 1) となりますので、 実行時エラー '9': インデックスが有効範囲にありません。 となります。 --------------------------------------------------------  さて、前置きが長くなりましたが、 >GetPrinterNameAndPortで、『 on 』と『 の 』が >バージョンによって変えてもダメでした。 とのことですが、そもそも「ActivePrinter」の値が バージョン によってどう変るのかを、よくご覧になった方がよさそうです。  ちなみに、私の環境では、 ActivePrinter : "Canon iP4700 series on Ne03:" となるのですが、 ●[XL2000]ActivePrinterで取得した文字列が以前のバージョンと異なる http://support.microsoft.com/kb/414210/ja によると、Excel 2000 では ActivePrinter : "Ne03: の Canon iP4700 series" となるのではないかと思われます。  つまり、 >『 on 』と『 の 』がバージョンによって変え るだけではなくて、 <プリンタ名> on <ポート名> と <ポート名> の <プリンタ名> とを使い分けなければならない、ということになろうかと存じますが、いかがでしょうか? Private Sub GetPrinterNameAndPort(printerName As String, printerPort As String)  Dim sString As String  sString = ActivePrinter  If InStr(1, sString, " on ") > 0 Then   printerName = Left(sString, InStr(1, sString, " on ") - 1)   printerPort = Right(sString, Len(sString) - Len(printerName) - Len(" on "))  Else   printerName = Right(sString, Len(sString) - Len(printerName) - Len(" の "))   printerPort = Left(sString, InStr(1, sString, " の ") - 1)  End If End Sub

abuhiro
質問者

補足

非常に詳しいアドバイスありがとうございます。 現在、外出中なので、テスト出来ませんが、帰宅したら即試したいと思います。 ずっと悩んでいましたが、ようやく光が見えました。 本当にありがとうございます。 テスト結果をまたレポ致します。

すると、全ての回答が全文表示されます。

関連するQ&A