プリンタの一覧を取得してリストボックスに表示
今日の職場での勉強会テーマ。備忘録としてここに残しておく。
テーマ:プリンタの一覧を取得して、リストボックスに表示する。
参照設定
プリンタの一覧を取得するために、参照設定を行う。
「Microsoft Shell Controls And Automation」
いつものように今回も、勉強会では2チームに分かれてマクロを作成。
AddItemで項目作成
Aチームは、複数あるプリンタ名を一つずつ取得して、リストボックスに追加する方法を採用した。
Private Sub UserForm_Initialize() Dim ShellApp As Shell32.Shell Set ShellApp = New Shell32.Shell Dim PrinterName As Variant For Each PrinterName In ShellApp.Namespace(ssfPRINTERS).Items ListBox1.AddItem PrinterName Next End Sub
リスト用配列を作成
Bチームは、リストにセットするための配列をまず作成。
Function GetPrinterList() As Variant Dim ShellApp As Shell32.Shell Set ShellApp = New Shell32.Shell Dim TempSeq() As Variant ReDim TempSeq(0) Dim i As Long i = 0 Dim PrinterName As Variant For Each PrinterName In ShellApp.Namespace(ssfPRINTERS).Items TempSeq(i) = PrinterName i = i + 1 ReDim Preserve TempSeq(i) Next ReDim Preserve TempSeq(i - 1) GetPrinterList = TempSeq End Function
下ごしらえは長くなったが、その分UserForm_Initializeがすっきりする。
Private Sub UserForm_Initialize() ListBox1.List = GetPrinterList End Sub
AチームとBチーム、どちらの方式でも良いが、好みはBチームかな。
それと勉強会では、
ShellApp.Namespace(4).Items
としていたが、「4」が何を指しているか、知らないと分からない。勿論素直に「そういうもんだ」と丸暗記して使用しても良いのだけど、「ssfPRINTERS」の方が何をしているか理解しやすいと思う。
参考まで。