2016-08-29 21 views
0

私は全く新しいので、いくつかのVBAプログラミングに問題があります。 Word/Excelでマクロ/ vbaアプリケーションを作成するタスクが与えられました。これは、姓、名字|電話番号|部署| Active Directoryのマネージャ。 私は最後の日にインターネットを検索してきましたが、実際には何も私のために働いていません。 現在のユーザー名/姓、電子メールなどを取得するテンプレートが提供されました。私はコードを私が今何をする必要があるに転送するのに苦労している。 これまで私が過去数時間にわたって試みてきたことは、Active Directoryからすべてのユーザーのリストを取得することでした。しかし、私が使用するコードは、私がインターネット上で見つけたVBScriptからのものでした。 VBAで動作させるためにできることを変更しましたが、実行しようとすると常にエラーが発生します。VBAでADの属性を持つすべてのユーザーのリストを取得

Sub test() 
' get OU 
' 

strOU = "OU=Users,DC=domain,DC=com" 

' connect to active directory 
' 

Set objConnection = CreateObject("ADODB.Connection") 
objConnection.Open "Provider=ADsDSOObject;" 

' create command 
' 

Set objCommand = CreateObject("ADODB.Command") 
objCommand.ActiveConnection = objConnection 
objCommand.Properties("Page Size") = 1000 

' execute command to get all users 
' 

objCommand.commandtext = "LDAP://" & strOU & ">;" & _ 
    "(&(objectclass=user)(objectcategory=person));" & _ 
    "adspath,distinguishedname,sAMAccountName;subtree" 

On Error Resume Next 
Set objRecordSet = objCommand.Execute 
If Err.Number <> 0 Then MsgBox "Exception occured: " & Err.Description 
On Error GoTo 0 

'Dim RecordSet As New ADODB.RecordSet 
Set objRecordSet = objCommand.Execute 

'Show info for each user in OU 
' 

Do Until objRecordSet.EOF 

    'Show required info for a user 
    ' 

    Debug.Print obj.RecordSet.Fields(“adspath”).Value 
    Debug.Print obj.RecordSet.Fields(“distinguishedname”).Value 
    Debug.Print obj.RecordSet.Fields(“sAMAccountName”).Value 

    ' Move to the next user 
    ' 

    obj.RecordSet.MoveNext 

Loop 

' Clean up 
' 

obj.RecordSet.Close 

Set obj.RecordSet = Nothing 
Set objCommand = Nothing 

objConnection.Close 
Set objConnection = Nothing 

End Sub 

と、この行ですべてが毎回停止します:私はそれだけでフリーズや単語をクラッシュIf Err.Number <> 0 Then MsgBox "Exception occured: " & Err.Description On Error GoTo 0一部を削除する場合

Set objRecordSet = objCommand.Execute 

を コードは次のようです。

答えて

0

OK、のは、トップダウンで手放す:

strOU = "OU=Users,DC=domain,DC=com" 

これ誰のお手伝いをすることができます。あなたはあなたのADのAD構造を知っていなければなりません。これが間違っていると、LDAPから「テーブルが見つかりません」というメッセージが表示されます。

objCommand.commandtext = "LDAP://" & strOU & ">;" & _ 
    "(&(objectclass=user)(objectcategory=person));" & _ 
    "adspath,distinguishedname,sAMAccountName;subtree" 

これには、<が欠けています。それは次のようになります。ここではその後

objCommand.commandtext = "<LDAP://" & strOU & ">;" & _ 
    "(&(objectclass=user)(objectcategory=person));" & _ 
    "adspath,distinguishedname,sAMAccountName;subtree" 

Debug.Print obj.RecordSet.Fields(“adspath”).Value 
    Debug.Print obj.RecordSet.Fields(“distinguishedname”).Value 
    Debug.Print obj.RecordSet.Fields(“sAMAccountName”).Value 

複数の問題:

  1. 活字二重引用符は、VBAソースコード内の文字列の区切り文字として使用できません。
  2. オブジェクトの名前はobjRecordsetで、obj.Recordsetではありません。

だから、これは次のようになります。

Debug.Print objRecordset.Fields("adspath").Value 
    Debug.Print objRecordset.Fields("distinguishedname").Value 
    Debug.Print objRecordset.Fields("sAMAccountName").Value 

コードの残りの部分でもobjRecordsetobj.Recordsetを交換してください。

+0

これまでやったことありがとうございました。しかし、私は最初の行にエラーが表示されます: "変数" StrOUは "定義されていません"、そしていつも "objRecordSet.EOF"の部分で停止する前に、objRecordSetが空であるように見えます。 参考文献がない場合がありますか? 今私はいくつかの標準的な参照とMicrosoft ActiveXデータオブジェクト2.8ライブラリ、Microsoft DAO 3.6オブジェクトライブラリ、Active DSタイプライブラリ(その順番)を持っています。 – grantelbart

+0

は、strOU行にいくつかの間違いやタイプミスがあります。それは今働くようです!しかし、それは言葉でそれらを印刷せずにユーザーを通過するだけです。私は何が欠けていますか? – grantelbart

+0

私はCtrl + Gで開く必要があったエディタにすべてが表示されていることがありませんでした。すべて動作します!ヘルプAxelにもう一度感謝します! – grantelbart

関連する問題