VBAの勉強を始めてみた

タイトルの通りVBAの勉強を始めました。仰々しくなく、シンプルな形で効率化を図ることを目指しています。VBA以外の話題もあるよ(笑)

GUIDを調べる

注:今回の記事は少々推定が含まれます

 

GUIDはプログラム(など)を識別するための世界で唯一の識別子(32桁の16進表記〔128bit〕で表す)です。世界で唯一というくらいですから、世界のどっかで集中管理していると思われがちですが、そうではなく、世界中のプログラマーが専用のソフトでランダムに好き勝手に生成しています。しかしランダムに生成したところで、その組み合わせは128bitという天文学的な数字であり、重複する可能性は限りなく0に近いという性質を利用しています。
こうやってできた、世界で唯一のGUIDがプログラム(など)に埋め込まれており、プログラムが他のプログラム(など)を識別する際に重複することなく識別することができるようになっている訳です。

 

VBAで外部ライブラリのGUIDを取得する。

VBProjectが現在参照している外部ライブラリのGUIDを取得するマクロを実行してみましょう。
----------------------
Sub 外部ライブラリのGUIDを調べる()
'Microsoft Visual Basic for Applications Extensibilityを参照設定して下さい
'「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」にチェックを入れて下さい
'アクティブシートのA~D列に参照中のライブラリの名称、GUID、メジャーバージョン、マイナーバージョンを出力します
'個人用マクロブック以外のアクティブブックを対象にします
Dim myRef As Variant
Dim i As Integer
    i = 1
    Cells(i, 1).Value = "Name"
    Cells(i, 2).Value = "GUID"
    Cells(i, 3).Value = "Major"
    Cells(i, 4).Value = "Minor"
For Each myRef In ActiveWorkbook.VBProject.References
    i = i + 1
    Cells(i, 1).Value = myRef.Name
    Cells(i, 2).Value = myRef.GUID
    Cells(i, 3).Value = myRef.Major
    Cells(i, 4).Value = myRef.Minor
Next
End Sub
----------------------

マクロを実行してSheet1に出力したものが下記です。(4つ出力してみた)

  Name GUID Major Minor
Microsoft Forms 2.0 Object Library MSForms {0D452EE1-E08F-101A-852E-02608C4D0BB4} 2 0
Microsoft ActiveX Data Objects 6.1 Library ADODB {B691E011-1797-432E-907A-4D8C69339129} 6 1
Microsoft Scripting Runtime Scripting {420B2830-E718-11CF-893D-00A0C9054228} 1 0
Microsoft VBScript Regular Expressions 5.5 VBScript_RegExp_55 {3F4DACA7-160D-11D2-A8E9-00104B365C9F} 5 5


前回の外部ライブラリの参照設定を自動で行うマクロは、このGUIDを使用しました。

 

CreateObjectについて(前々回の補足)

CreateObjectの引数には、プログラムID(Name.Object)を指定します。

例えば、こんな感じ
CreateObject("ADODB.Connection")
CreateObject("Scripting.FileSystemObject")
CreateObject("VBScript.RegExp")
CreateObject("MSForms.DataObject") ←これは×

 

MSForms.DataObjectは何ゆえバツなのか・・・?MSForms.DataObjectはレジストリにプログラムIDとして登録されない(登録が必須ではないため、開発者が登録しなかった?)のでプログラムIDで呼び出すことができず、代わりにGUIDで呼び出しするしかありません。
こんな感じ
CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
※GUIDの頭にnew:をつけてね

 

プログラムIDまたはGUIDで呼び出すイメージ

f:id:kouten0430:20171022133710j:plain

注:あくまでイメージですよ・・・。

 

MSForms.DataObjectのGUIDはネットで調べたものです。・・・ひとつ疑問が生まれます。外部ライブラリのGUIDは調べることができますが、外部ライブラリに内包される各オブジェクトのGUIDは自分で調べることができるのでしょうか?
・・・ここから先はEXCELを便利に使って仕事を楽したい(だけ)という当初の趣旨から脱線するので、止めときます。次回からベクトルの向きを少し戻しますヾ(;´・з・`)/

 

こちらを参考にさせていただきました。

thom.hateblo.jp