Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12332 / 13645 ツリー ←次へ | 前へ→

【10960】印刷ジョブの数 でん 04/2/19(木) 17:20 質問
【10987】Re:印刷ジョブの数 kein 04/2/22(日) 0:31 発言
【11016】Re:印刷ジョブの数 でん 04/2/24(火) 14:16 お礼
【11062】Re:印刷ジョブの数 ichinose 04/2/25(水) 23:49 発言
【11063】Re:追伸というか質問です ichinose 04/2/25(水) 23:58 質問

【10960】印刷ジョブの数
質問  でん  - 04/2/19(木) 17:20 -

引用なし
パスワード
   こんにちは。

印刷をしたいプリンタに、印刷ジョブがいくつあるのか調べる事
は出来るのでしょうか?

とても沢山の大きな情報を複数部出力します。
1部毎に出力が完了したか判別したいのです。
1部出力し終われば、次の1部を出力・・・。
という事がしたいです。

分かりにくいかもしれませんが、御教授宜しくお願い致します。

【10987】Re:印刷ジョブの数
発言  kein  - 04/2/22(日) 0:31 -

引用なし
パスワード
   ↓このへんを参考にして下さい。
http://www.vbvbvb.com/jp/gtips/0351/gSetPrinterSetState.html

【11016】Re:印刷ジョブの数
お礼  でん  - 04/2/24(火) 14:16 -

引用なし
パスワード
   kein さん、ありがとうございます。

御返事遅くなりました。申し訳ありません。

>↓このへんを参考にして下さい。
>http://www.vbvbvb.com/jp/gtips/0351/gSetPrinterSetState.html

lngWin32apiResultCode = _
  SetPrinter(lngPrinterHandle, _
        lngPrinterInfo0Level, _
        ByVal vbNullString, _
        lngPrinterControlCommand)

ってとこで、設定しているのは分かるんですが。
どれがオブジェクトの数やら今のところさっぱり・・・。
レベル高いですね(^_^;)
勉強します。

【11062】Re:印刷ジョブの数
発言  ichinose  - 04/2/25(水) 23:49 -

引用なし
パスワード
   でん さん、kein さん、こんばんは。
ジョブ数だけならこんな方法はいかがですか?
以下の仕様は、アクティブシートのA列にプリンター名、B列にジョブ数を書き込む例です。
標準モジュール(Module1)に
'=============================================================
Sub main()
  Dim pr_name
  Dim jbcount
  If open_printer = True Then
    idx = 1
    pr_name = get_printer_name(True)
    Do While pr_name <> ""
     jbcount = get_printer_job_count(pr_name)
     If VarType(jbcount) <> vbBoolean Then
       Cells(idx, 1).Value = pr_name
       Cells(idx, 2).Value = get_printer_job_count(pr_name)
       End If
     idx = idx + 1
     pr_name = get_printer_name()
     Loop
    Call close_printer
    End If
End Sub

標準モジュール(Module2)に
'=======================================================
' プリンター名i/oプロシジャーパック
'=======================================================
Dim fol
Dim folds
Dim pr_array() As String
Dim pr_idx()
'=======================================================
Function open_printer() As Boolean
'プリンター名をpr_arrayに、FolderitemのIDをpr_idx()にセット
'  output open_printer true 正常終了
'             false 異常終了
  On Error GoTo err_open_printer
  Dim myshell
  open_printer = True
  Erase pr_array
  Erase pr_idx
  Set myshell = CreateObject("shell.application")
  Set fol = myshell.NameSpace(4)
  Set folds = fol.items
  idx = 0: jdx = 1
  Do While idx <= folds.Count - 1
    Set fold = folds.Item(idx)
    If Not fold.Name Like "プリンタ*" Then
     ReDim Preserve pr_array(1 To jdx)
     pr_array(jdx) = fold.Name
     ReDim Preserve pr_idx(1 To jdx)
     pr_idx(jdx) = idx
     jdx = jdx + 1
     End If
    idx = idx + 1
    Loop
ret_open_printer:
  Set myshell = Nothing
  On Error GoTo 0
  Exit Function
err_open_printer:
  MsgBox Error$(Err.Number)
  open_printer = False
  Resume ret_open_printer
End Function
'=======================================================
Function get_printer_name(Optional first As Boolean = False)
' プリンター名を取り出す(dir関数に使い方が似てる?)
' input  first : true  最初のプリンタ名
'          false 次のプリンタ名
' output get_printer_name : プリンタ名
  On Error Resume Next
  Static idx
  If first = True Then
    idx = 1
    End If
  get_printer_name = ""
  If idx <= UBound(pr_array()) Then
    get_printer_name = pr_array(idx)
    idx = idx + 1
    End If
   On Error GoTo 0
End Function
'=======================================================
Function get_printer_job_count(pr_nm)
'指定されたプリンタ名に該当するプリンタのジョブ数を取得する
'input pr_nm : プリンタ名
'output get_printer_job_count 数値:正常ジョブ数 false:失敗
  On Error Resume Next
  Dim id
  id = WorksheetFunction.Match(pr_nm, pr_array(), 0)
  If Err.Number = 0 Then
    get_printer_job_count = fol.GetDetailsOf(folds.Item(pr_idx(id)), 1)
    If Err.Number <> 0 Then
     get_printer_job_count = False
     End If
   Else
    get_printer_job_count = False
    End If
  On Error GoTo 0
End Function
'=======================================================
Sub close_printer()
'プリンタ名i/oの終了
  On Error Resume Next
  Erase pr_array
  Erase pr_idx
  Set fol = Nothing
  Set folds = Nothing
  On Error GoTo 0
End Sub


前に作ってあったものに追加したコードなので余計なコードも入っていますが、

確認後に改良して下さい。

【11063】Re:追伸というか質問です
質問  ichinose  - 04/2/25(水) 23:58 -

引用なし
パスワード
   でんさんの最初の投稿に、

「1部出力し終われば、次の1部を出力・・・。
という事がしたいです。」

とありました。
これって、印刷ジョブ数をチェックして例えば、0になったらとか1だけだったら
次の印刷開始・・、のようなロジックですか?

でも・・・、別のタスクが印刷していたら、ジョブ数って減らないですよね?
その時は、ずっと待機するってことですか?
ちょっと気になったので・・・。

12332 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free