VBAでWMIの使い方について
WMIは、Windows Management Instrumentation の略になります。
マイクロソフトが実装したWindowsシステムを管理するためのインターフェイスです。
WMIは、Windows管理技術の中核を担っていて、ローカルコンピュータとリモートコンピュータの両方の管理に使用できます。
・・・
これは非常に難しく、筆者では詳しく説明することがきません。
Microsoftでは以下のように説明されています。、
WMIは、ローカルコンピュータとリモートコンピュータの両方の管理に使用できます。
WMIは、プログラミング言語やスクリプト言語で日常的な管理タスクを実行するための一貫したアプローチを提供します。
たとえば、次のようなことが可能です。
・特定の日時にプロセスを実行するようにスケジュールを設定できます。
・コンピュータをリモートで再起動できます。
・ローカルコンピュータまたはリモートコンピュータにインストールされているアプリケーションのリストを取得できます。
・ローカルコンピュータまたはリモートコンピュータ上のWindowsイベントログを照会できます。
本稿では、VBAでのWMIの使い方の概要と、頻繁に使われそうなものの一部のVBAの実際のサンプルコードを提示します。
また、プロパティ値の取得のみを扱い、メソッドについてはほぼ触れていません。
本稿は自身の覚え書きとして、実際に使用する時に少しでも参考になれば良いだろうという趣旨です。
WMIの詳細については、以下のサイトに詳しく書かれていますので、是非ご覧ください。
WMIを調べるときの推奨サイト
http://www.wmifun.net/
http://www.wmifun.net/library/
膨大な数が掲載されていますので、とても紹介できませんし、その意味もありません。
以下では具体的な使い方について説明し、上記サイトを補足する形でVBAを掲載します。
VBAでのWMI使用方法
事前バインディング
Dim WMI As New WbemScripting.SWbemLocator
Dim WMI As Object
Set WMI = New WbemScripting.SWbemLocator
With New WbemScripting.SWbemLocator
'・・・
End With
遅延(実行時)バインディング
Dim WMI As Object
Set WMI = CreateObject("WbemScripting.SWbemLocator")
With CreateObject("WbemScripting.SWbemLocator")
'・・・
End With
VBA使用例
Dim WMI As Object
Set WMI = CreateObject("WbemScripting.SWbemLocator")
Dim oService As Object
Set oService = WMI.ConnectServer
Dim oClassSet As Object
Set oClassSet = oService.ExecQuery("SELECT * FROM Win32_Printer")
Dim oClass As Object
For Each oClass In oClassSet
Debug.Print "プリンタ名前:" & oClass.Caption
Debug.Print "ドライバー名:" & oClass.DriverName
Debug.Print "プリンタのポート:" & oClass.PortName
Debug.Print "デフォルトプリンタ:" & oClass.Default
Debug.Print ""
Next
Set oClass = Nothing
Set oClassSet = Nothing
Set oService = Nothing
Set WMI = Nothing
イミディエイトにプリンター情報が出力されます。
順にオブジェクト変数に入れて、細部を確認しやすいVBAにしています。
また、使いまわすことも多くなるはずです。
この場合は、遅延(実行時)バインディンクの方が使いやすいでしょう。
かつ、よりVBAコードは短い方が便利だと思いますので、
以下のように適宜Withを使うとVBAが簡潔になります。
Dim oClass As Object
With CreateObject("WbemScripting.SWbemLocator").ConnectServer
For Each oClass In .ExecQuery("SELECT * FROM Win32_Printer")
Debug.Print "プリンタ名前:" & oClass.Caption
Debug.Print "ドライバー名:" & oClass.DriverName
Debug.Print "プリンタのポート:" & oClass.PortName
Debug.Print "デフォルトプリンタ:" & oClass.Default
Debug.Print ""
Next
End With
以下のように極めて短いVBAコードで済みます。
With CreateObject("WbemScripting.SWbemLocator").ConnectServer.ExecQuery("Select
* From Win32_Processor")
Debug.Print .ItemIndex(0).Name
End With
プロセッサ名を出力しています。
Withも省略して1ステートメントにもできますが、さすがに横に長くなりすぎてしまいますし、ここはWithを使ったほうが良いでしょう。
WMIにはどんなものがあるのか
・Query文字列
・プロパティ名
これらが分かれば良いだけになります。
Query文字列のFromの後ろがWMIクラスになります。
つまり、クラスさえわかれば先のサイト(WMI Fun !!)を見ればプロパティが掲載されているのでVBAで使う事が出来ます。
WMIには、膨大な数がありますので、その一覧から調べることは困難でしょう。
ほんの一部ですが、良く使われる有名なものとして以下があります。
Win32_Process | プロセスの一覧。 |
Win32_NetworkAdapterConfiguration | ネットワーク アダプターの一覧。 |
Win32_OperatingSystem | オペレーティング システム(OS)の情報 |
Win32_Printer | プリンターの一覧 |
Win32_ComputerSystem | PCのメーカ、型番等の情報 |
Win32_Processor | CPUの情報 |
Win32_LogicalDisk | ディスクの空き容量等の情報 |
Win32_NetworkAdapter | ネットワーク アダプターの一覧 |
Win32_PnPEntity | プラグ アンド プレイ デバイスの一覧 |
Win32_Service | サービスの一覧 |
Win32_UserAccount | ユーザー アカウントの一覧 |
Win32_Product | MSI でインストールされた製品一覧 |
Win32_ScheduledJob | スケジュールされたジョブの一覧 |
Win32_BIOS | BIOSの情報 |
それぞれに多数のプロパティ・メソッドがありますので、それらは使用するときに個別に調べてください。
以下については、Win32_とは異質のものになりますの、使い方も違ってきます。
StdRegProv | システム レジストリと対話するメソッドを含みます。 ユーザーのアクセス許可の確認 レジストリの作成、列挙、および削除の実行 名前を付けた値の作成、列挙、および削除 データ値の読み取り、書き込み、および削除 以下にサンプルが掲載されています。 http://officetanaka.net/excel/vba/tips/tips88.htm |
CIM_DataFile | CimWin32.dllに実装されたクラスをサポートします。 フォルダ内のファイル名やファイル情報の一覧を取得できます。 SQLにドライブやフォルダをWhereで指定します。 以下にサンプルが掲載されています。 https://www.moug.net/tech/exvba/0060092.html |
どちらも、VBAでそんなに必要性があるとは思えませんが、一応情報として掲載しておきます。
同じテーマ「マクロVBA技術解説」の記事
VBAで電光掲示板を作成
ユーザーに絶対に停止させたくない場合のVBA設定
列幅・行高をDPI取得しピクセルで指定する
VBAでWMIの使い方について
アクティブシート以外のWindowを設定できるWorksheetView
LSetとユーザー定義型のコピー(100桁の足し算)
省略可能なVariant引数の参照不可をラップ関数で利用
ブックのいろいろな開き方(GetObject,参照設定,アドイン)
入力規則への貼り付けを禁止する
Select Caseでの短絡評価(ショートサーキット)の使い方
RangeオブジェクトのFor EachとAreasについて
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.ブック・シートの選択(Select,Activate)|VBA入門
10.条件分岐(Select Case)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- VBAでWMIの使い方について
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。