• ベストアンサー

WINDOWS2000でのプリンタの選択について

todo36の回答

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

> VB5だからだめなのかな? Service Packで修正されたそうです。

参考URL:
http://www.microsoft.com/JAPAN/support/kb/articles/J041/2/94.asp
kirara_pika
質問者

お礼

ありがとうございます。 EXEにして実行すると問題なく指定したプリンタから出力されるようです。 動作テスト中の段階でうまく切り替わらなくて違うプリンタから出たんで、ずーっと悩んでました。

関連するQ&A

  • 全てのプリンター名を取得したい

    エクセルで全てのプリンターのプリンター名・ドライバー名・ポート名を取得する コードを実行したいのですが Sub Sample() Dim prtLoop As Printer For Each prtLoop In Application.Printers With prtLoop Debug.Print "Device name: " & .DeviceName Debug.Print "Driver name: " & .DriverName Debug.Print "Port: " & .Port End With Next prtLoop End Sub これをそのまま貼り付けて実行しようとすると、 「prtLoop As Printer」が、ユーザー定義型は定義されていません。 になります。 何に参照設定すればいいのかわからないので、 とりあえず Dim prtLoop As Object にしたのですが、 今度は For Each prtLoop In Application.Printers で 実行時エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。 になります。 どうすればいいか教えてください。

  • エクセルVBAのプリンタ制御で困っています

    エクセル2003を使用しています。 質問が少し長くなってしまうことをご容赦下さい。 行いたいことは、Sheet1での印刷を禁止し、Sheet2での印刷はネットワーク上のどのプリンタでも許可するということです。 これを行う為に、次のコードを書きました。 Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "Sheet1" Then Cancel = True MsgBox "印刷は禁止されています。" End If End Sub これで良いと思っていたのですが、次の問題が発生してしまいました。 このコードが実行され、印刷禁止のメッセージがでた後でSheet2に移動し、 その後Sheet2の印刷ダイアログで現在アクティブになっているPrinter1からPrinter2に変更してプロパティボタンを押すと、 何故か従前にアクティブだったPrinter1のプロパティが呼ばれてしまいます。 印刷の都合上Printer2のプロパティを変更する必要があるのですが、 Sheet1で印刷禁止を出されてしまうとPrinter2のプロパティを変更することができません。 発生頻度は少ないと思いますが、出来れば回避したいと思っています。 この現象は私の環境でのみ発生してしまう現象なのか? ということも含めて何か回避策をお教え頂けないでしょうか。 何方か助けていただければ幸いです。 宜しくお願いいたします。

  • アクティブなプリンターでサポートされている用紙名

    http://support.microsoft.com/kb/229718/ja で「アクティブなプリンターでサポートされている用紙名の一覧を取得するマクロ」を見つけたので自分の環境で実行してみました。 OS:Windows XP SP3 アプリケーション: エクセル2002(SP3) 結果はメッセージボックスが表示されるのですが、用紙名のリストが数文字ずつ少なり、リストの最後は「 ) 」の一文字だけになります。またプリンタードライバーがリストする用紙の種類よりも少なくなっています。文字数がなくなったのだと思いますが・・・・・ active printerを取得→そのプリンタードライバを開く→ドライバーが持っている用紙の数を取得→For~Nextでテキストに追加→メッセージボックスで表示しているだろうことはわかるのですが、得られる結果(用紙名の文字数が減少する)がわかりません。 どこをどのように直せば用紙名(できれば「サイズ」「用紙名の番号」も)取得できるでしょうか? さらに言えば、メッセージボックスでなくワークシートのセルに書き出したいです。 お知恵をお貸しください。 該当のコードは以下のとおりです。 Option Explicit Private Declare Function OpenPrinter Lib "winspool.drv" Alias _ "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, _ ByVal pDefault As Long) As Long Private Declare Function ClosePrinter Lib "winspool.drv" ( _ ByVal hPrinter As Long) As Long Private Declare Function DeviceCapabilities Lib "winspool.drv" _ Alias "DeviceCapabilitiesA" (ByVal lpsDeviceName As String, _ ByVal lpPort As String, ByVal iIndex As Long, lpOutput As Any, _ ByVal dev As Long) As Long Private Const DC_PAPERNAMES = 16 ' Value obtained from wingdi.h Sub GetPaperList() ' Display a message box with the name of the active printer and a list ' of papers it supports. Dim lPaperCount As Long Dim lCounter As Long Dim hPrinter As Long Dim sDeviceName As String Dim sDevicePort As String Dim sPaperNamesList As String Dim sNextString As String Dim sTextString As String Dim iNumPaper() As Integer GetPrinterNameAndPort sDeviceName, sDevicePort If OpenPrinter(sDeviceName, hPrinter, 0) <> 0 Then ' Get count of paper names supported by active printer. lPaperCount = DeviceCapabilities(sDeviceName, _ sDevicePort, _ DC_PAPERNAMES, _ ByVal vbNullString, 0) ReDim iNumPaper(1 To lPaperCount) sPaperNamesList = String(64 * lPaperCount, 0) ' Get paper names supported by active printer. lPaperCount = DeviceCapabilities(sDeviceName, _ sDevicePort, _ DC_PAPERNAMES, _ ByVal sPaperNamesList, 0) ' List available paper names. sTextString = "Paper available for " & ActivePrinter For lCounter = 1 To lPaperCount ' Get a paper name. sNextString = Mid(sPaperNamesList, _ 64 * (lCounter - 1) + 1, 64) sNextString = Left(sNextString, _ InStr(1, sNextString, Chr(0)) - 1) ' Have one paper name. sNextString = String(6 - Len(CStr(iNumPaper(lCounter))), _ " ") & sNextString ' Add paper name to text string for message box. sTextString = sTextString & Chr(13) & sNextString Next lCounter ClosePrinter (hPrinter) ' Show paper names in message box. MsgBox sTextString Else MsgBox ActivePrinter & " <Unavailable>" End If End Sub Private Sub GetPrinterNameAndPort(printerName As String, _ printerPort As String) ' ActivePrinter yields a name of the form "Printer XYZ on LPT1" while the ' DeviceCapabilities function requires a printer name and port. ' ' Out: ' printerName Printer name derived from ActivePrinter property ' printerPort Printer port derived from ActivePrinter property Dim sString As String Const searchText As String = " on " sString = ActivePrinter printerName = Left(sString, InStr(1, sString, searchText) - 1) printerPort = Right(sString, _ Len(sString) - Len(printerName) - Len(searchText)) End Sub ※support.microsoft.comのサンプルコードなのに・・・・

  • EXCEL2007 VBAでのプリンタ切り替えについて

    いつもお世話になっております。 EXCELで帳票出力をする場合にプリンタを切り替えて(通常使うプリンタを変更して) 行おうと、いろいろ調べまして下記のようなプログラムを作成して実行しました。 Dim OldPrinter As String OldPrinter = Application.ActivePrinter With CreateObject("WScript.Network") .SetDefaultPrinter "EPSON LP-6100" End With ~~~~印刷処理~~~~ Application.ActivePrinter = OldPrinter WSHによるデフォルトプリンタの切り替えはうまく行くのですが、その後に もともとの通常使うプリンタに戻す処理がうまくいかず、プリンタが切り替わったまま になってしまいます。 いろいろと調べましたが、わかりませんでした。 参考になるサイトなどでも構いませんのでお願いいたします。

  • printers コレクションについて

    任意のプリンターに出力するロジックを考え中です。 現在LANでつながった各コンピュータに接続されているプリンターを指定して 印刷しようと思い、以下のコードでオブジェクトを検索してみました。 ----------------------------------- Private Sub printerclick_Click() Dim X As Printer For Each X In Printers Debug.Print X.DeviceName Next End Sub ------------------------------------- 検索結果は --------------------------------- FAX EPSON LP-1900 ALPS MD-5500 \\FREEZA\Canon LaserShot A304G2 LIPS3 \\FRONT\EPSON LP-1900 \\XIAOLONG2000\EPSON PM-3500C ------------------------------------ でした。 プリンターを指定する為に set printer=printers(n) を記述したのですが、この(n)は検索結果に表示された上から順に0~5なのでしょうか。このインデックスで迷っています。

  • プリンタ マクロ Ne○○

    エクセルマクロで「プリンター名 on Ne○○」○○の数字をマクロで調べることは可能でしょうか。 他のサイトで調べてみました。 Sub Saaample() Dim tempShell As Object Dim tempObj As Object Dim intRow As Integer Set tempShell = CreateObject("Shell.Application") intRow = 1 For Each tempObj In tempShell.Namespace(4).Items If intRow > 1 Then Cells(intRow, 1) = tempObj.Name End If intRow = intRow + 1 Next Set tempShell = Nothing End Sub で実行するとプリンター名は取得できるのですが「Ne○○」まではできませんでした。 プリンターの増減で「Ne○○」が変わってしまうのでその都度修正するのですが 調べ方がわからず上か下の数字に変更して対処してます。                    宜しくお願いいたします。

  • プリンタの印刷ジョブを削除したい。

    プリンタの印刷ジョブを削除したい。 現在、VB.NET(Visual Studio 2008)で開発を行っています。 SetPrinter関数を使用して、印刷ジョブを全て削除したいのですがSetPrinterに失敗してしまいます。 GetLastErrorの戻り値は「5」でアクセス拒否のようです。 SetPrinterの前にOpenPrinterは成功しており、プリンタの印刷ジョブの情報は取得できています。 なお、同環境でVB6.0で同様のプログラムを作成し実行したところジョブの削除ができました。 類似した現象・解決方法等ご存知でしたら教えてください。 開発環境はWindowsXP、Visual Studio 2008です。 以下、ソースの抜粋です。 '宣言 Private Const DEF_INIT_BUFFER_PERFORM As Integer = 100 Public Const STANDARD_RIGHTS_REQUIRED = &HF0000 Public Const PRINTER_ACCESS_ADMINISTER = &H4 Public Const PRINTER_ACCESS_USE = &H8 Public Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or _ PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE) Public Structure PRINTER_DEFAULTS Public pDatatype As IntPtr Public pDevMode As IntPtr Public DesiredAccess As Integer End Structure <DllImport("winspool.drv", CharSet:=CharSet.Auto, SetLastError:=True)> _ Private Shared Function OpenPrinter( _ ByVal pPrinterName As String, _ ByRef hPrinter As IntPtr, _ ByVal pDefault As PRINTER_DEFAULTS _ ) As Boolean End Function <DllImport("winspool.drv", CharSet:=CharSet.Auto, SetLastError:=True)> _ Private Shared Function SetPrinter( _ ByVal hPrinter As IntPtr, _ ByVal Level As Long, _ ByVal pDefault As IntPtr, _ ByVal Command As Long _ ) As Boolean End Function '実行部 Dim pd As New PRINTER_DEFAULTS pd.DesiredAccess = PRINTER_ALL_ACCESS Dim printerHandle As IntPtr Dim ret As Boolean = OpenPrinter("プリンタ名", printerHandle, pd) Dim err As Integer = Marshal.GetLastWin32Error() 'Falseが返る ret = SetPrinter(printerHandle, CLng(0), IntPtr.Zero, CLng(3)) '5が返る err = Marshal.GetLastWin32Error()

  • VB 2005 プリンタ選択

    PrintDialog1の画面で選択したプリンタより印刷ができません。プリンタ選択で設定した値を設定したらいいと思うのですが、その方法が分かりません。どなたか教えて頂きたいのですが。ちなみに下記コードで動作させています Dim Ret As DialogResult Dim a As Integer PrintDialog1.PrinterSettings = New Printing.PrinterSettings PrintDialog1.AllowSelection = True Ret = PrintDialog1.ShowDialog() If Ret = Windows.Forms.DialogResult.OK Then PrintForm1.PrinterSettings.DefaultPageSettings.Landscape = True PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.FullWindow) End If

  • REALbasicについて質問です。

    今日プログラミングをはじめた超初心者です。 全然わからないので教えていただきたいのですが Sub Action () dim x as string dim y as integer x = editField1.text y = val(x) if y = 0 then msgbox "ゼロだよん。" else msgbox "ゼロじゃないよん。" end if End Sub というプログラムを実行してみたのですがeditField1のところがおかしいらしく動いてくれません。どのようにしたらよろしいでしょうか?

  • ドットプリンタでバーコードの印刷

    こんにちは。いつもお世話になっています。 現在、ドットプリンタにバーコードの印刷を試みていますが、 数値のままの表記になってしまい、うまくいきません。 他の方の質問・回答も検索し、いろいろ試したのですが 状況に変わりがなかったので改めて質問を書かせていただきました。 現在使用しているプリンタは、NECのMultiImpactです。 (VB6.0で作業しています。) 実際に現在組んでいるコードは下記のようなものです。 Public Sub AA()   ~略~   Printer.FontName = "OCR-B 10cpi"   Printer.FontSize = 12   Call Prt_set(10, 200, strNo) '※1   Printer.Font.Charset = 0   Printer.Font = "Code39"   Call Prt_set(280, 240, "*123456*")  '※2   Printer.Font.Charset = 128   Printer.FontName = "OCR-B 10cpi"   Call Prt_set(280, 500, strC) '※3   ~略~ End Sub '指定された位置に印字する Public Sub Prt_set(i As Integer, j As Integer, Moji As String)    Printer.CurrentY = i    Printer.CurrentX = j    Printer.Print Moji End Sub 実行すると、 ※1と※3の文字は正常に出力されますが、※2はそのまま"*123456*"数値(文字列?)で印刷されてしまいます。 初心者のため、見苦しいコードになっているかもしれませんが、どなたかなにか教えていただけないでしょうか。 よろしくお願いします。