2014-06-11
Excel VBA覚書 ファイルの所有者を取得する
このブログのアクセスって明らかに平日が多い。
記載した技術情報が役に立ってくれれば幸いなのだが・・・
さて、ファイルの所有者ってとってこれんのか?って話。
とってこれるみたい。
Kameya blog「VBScriptでフォルダ・ファイルの所有者の確認を行う」を参考に、ExcelVBAで作成してみた。
'----------------------------------------------------- ' ファイルの所有者を取得する ' 引数 :ファイルパス(File Only) '----------------------------------------------------- Private Function GetOwner(fpath As String) As String Dim WMIService As Object Dim objSet As Object Dim obj As Object Dim buf As String 'ちゃんと渡してよ!って抜ける If Len(fpath) = 0 Then Exit Function Set WMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") buf = "" 'TODO 本当はちゃんとエスケープしないとダメ Set objSet = WMIService.ExecQuery("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting='" _ & Replace(fpath, "\", "\\") _ & "'} WHERE AssocClass=Win32_LogicalFileOwner ResultRole=Owner") For Each obj In objSet buf = buf & obj.AccountName & "," Next If Len(buf) > 0 Then GetOwner = Left(buf, Len(buf) - 1) End If Set obj = Nothing Set objSet = Nothing Set WMIService = Nothing End Function
参照したサイトだと記載されていなかったのだが、¥マークは二重にしないといけない。
(常識?いや、CとかC++とかC#とか・・・ならともかく、VB書いてるときは頭がBasicモードになってしまい、忘れてしまうのだ。)
フォルダの所有者を確認するときは、WHERE句が変わるはず。