VBA を使用して Excel から LDAP をクエリしようとしています。OR キーワードを使用して CN でレコードをフェッチしている場合は問題なく動作しますが、IN キーワードを使用すると失敗します。
失敗 (エラー 80040e14):
Function GetUsersProperty(ByVal users As String, ByVal returnField As String)
Dim usersProperty As New Collection
Set cmd = CreateObject("ADODB.Command")
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "Provider=ADsDSOObject;"
cmd.CommandText = _
"SELECT cn, " & returnField & _
" FROM 'LDAP://" & GetObject("LDAP://RootDSE").get("defaultNamingContext") & _
"' WHERE objectClass = 'User' AND objectCategory = 'Person' AND cn IN (" & users & ")"
'assuming there are multiple users names in colons inside 'users' separated with comma
cmd.ActiveConnection = cn
Set rs = cmd.Execute
'On Error Resume Next
While rs.EOF <> True And rs.BOF <> True
usersProperty.Add Item:=rs.Fields(returnField).Value, Key:=rs.Fields("cn").Value
rs.MoveNext
Wend
Set GetUsersProperty = usersProperty
Set cmd = Nothing
Set cn = Nothing
Set rs = Nothing
End Function
WHERE
下cmd.CommandText
を次のように置き換えると機能します
"' WHERE objectClass = 'User' AND objectCategory = 'Person' AND (cn = " & user1 & " OR cn = " & user2 & ")"
問題は、理解しやすく、リストの作成が容易なため、何を IN に使用するかということです。そうすることは可能ですか?