2011-06-23 52 views
0

私に何が問題なのか分かりませんが、この文字列を正しく取得できません。このExcelシートのユーザー情報があり、LDAP経由でADに接続したいのですが、この自動化エラー '-2147217900(80040e14)'が表示されます。LDAP文字列に構文エラーがある可能性があります。ここでは、この関数を使用してユーザーの識別名を取得します。それから、私はそれを返し、adoConnection.Executeを通してそれを渡そうとします。Excel VBA - ユーザーのLDAP文字列を正しく取得する

返されたLDAP文字列は次のようになります。

<LDAP://CN=Bowie\,David,OU=Geniouses,OU=Music,DC=MasterDomain,DC=local>;ADsPath;subtree 

コードは次のようになります。

Public Function getUsersDN(ByVal strUsername As String) 
Const ADS_SCOPE_SUBTREE = 2 

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 distinguishedName FROM 'LDAP://dc=MasterDomain,dc=local' " & _ 
     "WHERE objectCategory='user' " & _ 
      "AND sAMAccountName='" & strUsername & "'" 
Set objRecordSet = objCommand.Execute 

objRecordSet.MoveFirst 
Do Until objRecordSet.EOF 
    strDN = objRecordSet.Fields("distinguishedName").Value 
    getUsersDN = strDN 
    objRecordSet.MoveNext 
Loop 
End Function 

答えて

2

を助けるかもしれコードは次のようになります

 Set objRootDSE = GetObject("LDAP://rootDSE") 
     Dim strQuery As String 
     strQuery = ("LDAP://" & getUsersDN("dbowie")) 

     Set objItem = GetObject(strQuery) 

     '*********************************************** 
     '*   End connect to an object   * 
     '*********************************************** 

     objItem.Put "description", "test" 
     objItem.SetInfo 

    Public Function getUsersDN(ByVal strUsername As String) 
     Const ADS_SCOPE_SUBTREE = 2 

     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 distinguishedName FROM 'LDAP://dc=myDomain,dc=local' " & _ 
       "WHERE objectCategory='user' " & _ 
        "AND sAMAccountName='" & strUsername & "'" 
     Set objRecordSet = objCommand.Execute 

     objRecordSet.MoveFirst 
     Do Until objRecordSet.EOF 
      strDN = objRecordSet.Fields("distinguishedName").Value 
      getUsersDN = strDN 
      objRecordSet.MoveNext 
     Loop 
End Function 
3

試みを処理するために重要なコードをラップする:

ldapStr = "<LDAP://" & getUsersDN("dbowie") & ">;ADsPath;subtree" 

機能のようにエラー、例:

on error resume next 
Set objRecordSet = objCommand.Execute 
if err.Number <> 0 then MsgBox "Exception occured: " & err.Description 
on error goto 0 

大丈夫です。 ずっと前に私はそのためのストアドプロシージャを書いて、私は実際に答えを得たことはアザドのScriptomaticを:)使用して、あなたに自分自身を

CREATE PROCEDURE sp_get_ad_user_info (
    @DomainName varchar (64), 
    @AccountName varchar (128) 
) 
AS 
BEGIN 
    DECLARE @adsiSQL nvarchar(1024) 

    SELECT @adsiSQL = 
    'SELECT samAccountName, Name, mail, Company, l [City], extensionAttribute1 [BirthDay], extensionAttribute2 [HireDay],department,title,telephoneNumber 
     FROM OPENQUERY(ADSI, 
    ''SELECT samAccountName, Name, mail, company, l, extensionAttribute1, extensionAttribute2,department,title,telephoneNumber 
     FROM ''''LDAP://' + @DomainName + ''''' 
     WHERE objectCategory = ''''Person'''' AND objectClass = ''''user'''' AND samAccountName=''''' + @AccountName + '''''' + 
     ''')' 

    exec sp_executesql @adsiSQL 

    RETURN 
END 
+0

[OK]をクリックすると、「例外が発生しました:コマンドの処理中に1つ以上のエラーが発生しました。 'あまり情報がありません。 –

+0

私は自分の答えを編集しました – heximal

+0

これはSQLクエリですね。それをVBAで使うことはできますか? –

関連する問題