
VBAなのですがよろしくお願いします。
下記のようなActiveDirectoryにアクセスしてユーザーを検索しユーザーオブジェクトの”FullName”プロパティを表示させるスクリプトを実行させた時、FullNameプロパティが設定されているユーザーは問題なく表示されるのですが、Administratorなどのシステムに初めから登録されているユーザーの場合FullNameプロパティが登録されていないようで『Active Directoryプロパティがキャッシュに見つかりません』とエラーで止まってしまいます。
そこで、FullNameプロパティの有無を判別してif等で処理を分けたいのですが、プロパティの有無を確認する関数がわかりません。そういった関数はあるのでしょうか? 無い場合は何か他に回避策は考えられるでしょうか?
※administratorにFullNameプロパティを登録する等、ActiveDirectory側はあまりいじりたくありません。
--------- 検索するVBA -------------
Sub ADユーザー検索()
Dim SearchStr
SearchUser = "検索するユーザー" 'administratorだとエラーになる
Const ADS_SCOPE_SUBTREE = 2
Dim objConnection
Dim objCommand
Dim objRecordSet
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = _
"SELECT AdsPath FROM 'LDAP://dc=my,dc=domain' WHERE objectCategory='user' And (sAMAccountName='*" + SearchUser + "*' Or Name='*" + SearchUser + "*')"
Set objRecordSet = objCommand.Execute
Dim objUser
If objRecordSet.EOF = False Then
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
Set objUser = GetObject(objRecordSet.Fields("AdsPath").Value)
Debug.Print objUser.FullName 'administratorだとここでエラーになる
objRecordSet.MoveNext
Loop
End If
End Sub
----------------------------
長くなりましたがよろしくお願いします。
No.1ベストアンサー
- 回答日時:
> FullNameプロパティの有無を判別してif等で処理を分けたいのですが、
> プロパティの有無を確認する関数がわかりません。
Active Directory は良く知りませんが、取得できないならできないで
一般的なエラートラップを組み込めば良いのでは?
Do Until objRecordSet.EOF
Set objUser = GetObject(objRecordSet.Fields("AdsPath").Value)
If objUser Is Nothing Then
Debug.Print "例外処理"
Else
Debug.Print objUser.FullName
End If
objRecordSet.MoveNext
Loop
とか、On Error ステートメントで
Do Until objRecordSet.EOF
On Error Resume Next
Set objUser = GetObject(objRecordSet.Fields("AdsPath").Value)
If Err Then
Debug.Print "例外処理"
Else
Debug.Print objUser.FullName
End If
On Error Goto 0
objRecordSet.MoveNext
Loop
とか。コードの内容まではみてませんが...
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAがブレークモードになっ...
-
実行時エラー 438になった時の...
-
EXCEL/VBAで、自分のPCだけエラ...
-
【マクロ】エラー【#DIV/0!】が...
-
Debug.exe実行時にWinMainCRTSt...
-
マクロでのActiveSheet.Pasteで...
-
VBAでピボットテーブルの作成(...
-
VBAでのエラー
-
Do While中のVBAアプリケーショ...
-
Invalid procedure call or arg...
-
Access:結果は出るがエラー
-
実行時エラー48発生時のDLL特定...
-
SQL実行エラー
-
Outlook.ApplicationをCreateOb...
-
Excelで下記のようにマクロを作...
-
アクセス 実行時エラー3265
-
ASPの初歩的な質問です
-
VBAのコードがエラーになっ...
-
トランスポートレベルのエラー
-
デバッグ時はOK、デバッグ無し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBAがブレークモードになっ...
-
【マクロ】エラー【#DIV/0!】が...
-
実行時エラー -'-2147417848
-
実行時エラー3001「引数が間違...
-
実行時エラー48発生時のDLL特定...
-
【Excel VBA】マクロをボタンに...
-
マクロについて教えてください...
-
なぜこんな初歩的なVBAのIf文で...
-
VB6+SQL サーバー 2000 で 実行...
-
OLEDB.NETで接続できない
-
EXCEL/VBAで、自分のPCだけエラ...
-
ExcelVBA Range クラスの Page...
-
Invalid procedure call or arg...
-
VBAでのエラー
-
AccessVBAでExcelを起動し、罫...
-
[Delphi] データセットは閉じて...
-
VBAで実行時エラー'424' オブジ...
-
なぜエラーになるのでしょうか...
-
ADODB.Streamを使用してUTF-8を...
おすすめ情報