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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
実行時エラー -'-2147417848
-
「コンパイルエラー:プロシー...
-
VBAがブレークモードになっ...
-
VB6+SQL サーバー 2000 で 実行...
-
なぜこんな初歩的なVBAのIf文で...
-
ADODB.Streamを使用してUTF-8を...
-
実行時エラー3001「引数が間違...
-
[Delphi] データセットは閉じて...
-
VBで構造体を使うさ際の64k...
-
マクロについて教えてください...
-
ExcelVBA Range クラスの Page...
-
Excelで下記のようにマクロを作...
-
OLEDB.NETで接続できない
-
Access2000での未定義関数repla...
-
ACCESS フォームサイズ指定で...
-
職場から目的地までの距離集計
-
エラーでつまってます・・・お...
-
DataGridView からの値取得に関...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
【Excel VBA】マクロをボタンに...
-
なぜこんな初歩的なVBAのIf文で...
-
マクロについて教えてください...
-
実行時エラー3001「引数が間違...
-
VBAがブレークモードになっ...
-
ExcelVBA Range クラスの Page...
-
VBSで変数の宣言はできないので...
-
VBS実行時エラー オブジェクト...
-
OLEDB.NETで接続できない
-
プロシージャ名の取得
-
EXCEL VBAマクロ中断でデバッグ...
-
ADODB.Streamを使用してUTF-8を...
-
VBAでのエラー
-
実行時エラー48発生時のDLL特定...
-
Outlook.ApplicationをCreateOb...
-
VB6+SQL サーバー 2000 で 実行...
-
実行時エラー -'-2147417848
-
「コンパイルエラー:プロシー...
おすすめ情報