Guten Morgen zusammen,
ich habe ein kleines Problem bei dem ich auf Hilfe angewiesen bin. Ich versuche über Outlook eine AD-Benutzer suche zu realisieren. Der Benutzer gibt einen Benutzernamen ein und das Script soll einige Informationen zurück liefern. Sucht der Benutzer nach einem existierenden Benutzernamen, funktioniert das Script. Sucht er nach einem nicht existenten liefert das ganze aufgrund eines nicht ausgefüllten Array einen Fehler und genau das möchte ich verhindern.
Laut Überwachung ist die, für die Rückgabe vorgesehenen, Variable zu Fehlerzeitpunkt vom Typ Variant/Variant(). Was ich bisher versucht habe:
If IsEmpty(Database) Then MsgBox "Test" -> Keine Auslösung
If IsNull(Database) Then MsgBox "Test" -> Keine Auslösung
If IsMissing(Database) Then MsgBox "test" -> Keine Auslösung
If Not (Not Database) Then MsgBox "Test" -> Keine Auslösung
If Database = "" Then MsgBox "Test" -> Typen Unverträglich
If Database = 0 Then MsgBox "Test" -> Typen Unverträglich
If Database is Nothing Then MsgBox "Test" -> Typen Unverträglich
Code der die Variable (Datenbank) befüllen sollte:
Public Database()
Public ADPath As String
Public ADName As String
Public Function OrgaRead(ObjectTyp As String, Deep As String, Optional ADFeld As String, Optional What As String, Optional Root As Boolean)
' ObjectTyp = Was wird gesucht. User, Group, OrgUnit
' Deep = Wie tief soll gesucht werden
' ADFeld = In Welchen AD Feld soll gesucht werden
' What = Was wird übergeben. Mehrere Objekte mit ";" trennen
' Root = Boolean. Soll ab der Root Ebene gesucht werden
Erase Database
If ADFeld = "" Then ADFeld = "name"
If What = "" Then What = "name"
If ADName = "" Then ADName = "*"
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
If Root = False Then
strBase = "<LDAP://" & ADPath & "OU=BA," & strDNSDomain & ">"
Else
strBase = "<LDAP://" & strDNSDomain & ">"
End If
Set adoCommand = CreateObject("ADODB.Command")
Set ADOConnection = CreateObject("ADODB.Connection")
ADOConnection.Provider = "ADsDSOObject"
ADOConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = ADOConnection
strFilter = "(&(objectClass=" & ObjectTyp & ")(" & ADFeld & "=" & ADName & "));" & What & ";" & Deep
strQuery = strBase & ";" & strFilter
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 1000
adoCommand.Properties("Timeout") = 30
adoCommand.Properties("Cache Results") = False
adoCommand.Properties("Sort on") = ADFeld
Set adoRecordset = adoCommand.Execute
If Not adoRecordset.BOF Then Database = adoRecordset.GetRows
'Database = adoRecordset.GetRows
End Function
Code der nicht funktioniert:
Public Sub Suche()
OrgaRead cb_searchobject.Column(1), "subtree", cb_searchobject.Column(0), cb_searchobject.Column(2), True
If IsEmpty(Database) Then Exit Sub
If IsNull(Database) Then Exit Sub
If IsMissing(Database) Then Exit Sub
If Not (Not Database) Then Exit Sub
If Database = "" Then Exit Sub
If Database Is Nothing Then Exit Sub
lbl_search.Caption = UBound(Database, 2) + 1 & " Ergebniss/e"
For I = 0 To UBound(Database, 2)
If IsNull(Database(2, I)) Then Database(2, I) = ""
lb_search.AddItem
lb_search.Column(0, I) = Database(0, I)
lb_search.Column(1, I) = Database(1, I)
lb_search.Column(2, I) = Database(2, I)
Next
End Sub
Vielen Dank schon mal und viele Grüße
Jan
|