会社で資産管理台帳をAccessで簡単に作ったのですが、この程本運用にするとのお達しがあり、運用する前の最終機能の改善を別の方が行っています。
WEBデザインをメインになさっていた方なので、自分の作ったフォームビューがデザイン一新されており、びっくりしたのと同時に、「餅は餅屋」なんだなぁと感じつつ、自分のデザインセンスのなさに悲しくなりました。
それはさておき、資産管理ということで、資産管理シールなるものを張りたいと庶務の方からリクエストがあったので、テプラのPCリンク機能を使って流し込み印刷機能を強化していたときの話。
「テプラ印刷ボタンを作ったはいいが、テプラが接続されていないときに印刷ボタンが非表示か、グレーアウトさせたい。VBAでプリンタがオンラインかオフラインかを知る方法はないか?」
暇だったので調べてみたところ、ちょっと苦労しましたが、以下の記事を見つけました。
http://hanatyan.sakura.ne.jp/patio/read.cgi?no=258
http://hanatyan.sakura.ne.jp/dotnet/Prt13.htm
On Error Resume Next
Dim objWMIService As Object
Dim colItems As Object
Dim objItem As Object
Dim strComputer As String
Dim strOSType As String
Text1.Text = ""
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer", , 48)
For Each objItem In colItems
Text1.Text = Text1.Text & "Name: " & objItem.Name & vbCrLf
If objItem.Default = True Then
Text1.Text = Text1.Text & "通常使うプリンターです" & vbCrLf
Else
Text1.Text = Text1.Text & "通常使うプリンターではありません" & vbCrLf
End If
If objItem.WorkOffline = True Then
Text1.Text = Text1.Text & "オフライン" & vbCrLf
Else
Text1.Text = Text1.Text & "準備完了" & vbCrLf
End If
Text1.Text = Text1.Text & "場 所 : " & objItem.PortName & vbCrLf
Text1.Text = Text1.Text & "PrinterStatus: " & objItem.PrinterStatus & vbCrLf
Text1.Text = Text1.Text & String$(60, "-") & vbCrLf
Next
非常にエクセレントなプログラムだと思ってしまいましたが、肝は、
objWMIService.ExecQuery("Select * from Win32_Printer", , 48)
としているところで、プリンター情報を引っこ抜いてきているところでしょう。
ここさえ押さえれば、あとは如何様にも料理できますね。
私が確認した環境は、XP on Access 2003ですが、きっと他バージョンでも普通に動いてくれるでしょう。
0 件のコメント:
コメントを投稿