Hallo,
nachdem ich eine Zeit lang VBA nicht benötigte, weil alles lief habe ich jetzt wieder angefangen, da ich ein neues Telefon habe. Dieses Telefon verfügt allerdings über weniger Speicherplätze für Telefonnummern als ich in unserer Datenbank habe. Deshalb habe ich mir die letzten Kundenberichte ausgeben lassen und diese nach Datum absteigend sortiert. Da ich aber noch einige Telefonnummern von Kunden benötige die mir nicht direkt zugeordnet sind, habe ich diese dann als ODER-Abfragen hinzugefügt:
Public Function PhoneBookEntries()
Dim iPhoneBookEntry As Integer
Dim strPhoneBookEntry As String
Dim db As Database
Set db = CurrentDb
Dim rsPhoneBookEntry As Recordset
Set rsPhoneBookEntry = db.OpenRecordset("SELECT max(tblContactReports.ContactDate) AS MaxvonContactDate, " & _
"tblPersons.Customer, " & _
"tblPersons.Prefix, " & _
"tblPersons.FirstName, " & _
"tblPersons.ContactName , " & _
"tblPersons.OfficePhoneNumeric, " & _
"tblPersons.OfficeCarPhoneNumeric, " & _
"tblPersons.SalesRep " & _
"FROM tblPersons INNER JOIN tblContactReports ON " & _
"(tblPersons.Customer = tblContactReports.Customer) " & _
"AND (tblPersons.FirstName = tblContactReports.FirstName) " & _
"AND (tblPersons.ContactName = tblContactReports.ContactName) " & _
"GROUP BY tblPersons.Customer, " & _
"tblPersons.Prefix, " & _
"tblPersons.FirstName, " & _
"tblPersons.ContactName, " & _
"HAVING max(tblContactReports.ContactDate) Is Not Null " & _
"AND tblPersons.ContactName <> '0-Pressemitteilungen' " & _
"AND tblPersons.SalesRep = '1' " & _
"OR left(tblPersons.Customer, 3) = 'B**' " & _
"OR left(tblPersons.Customer, 3) = 'L**' " & _
"OR left(tblPersons.Customer, 6) = 'C**' " & _
"ORDER BY Max(tblContactReports.ContactDate) DESC")
If rsPhoneBookEntry.RecordCount > 0 Then
iPhoneBookEntry = 0
strPhoneBookEntry = ""
rsPhoneBookEntry.MoveFirst
'The telephone book can only contain a maximum of 1000 telephone numbers
If iPhoneBookEntry < 1000 Then
'only evaluates fields that contain a fixed line number
If Not IsEmpty(tblPersons!OfficePhoneNumeric) Then
strPhoneBookEntry = strPhoneBookEntry & Chr(34) & "" & tblPersons!Prefix & " " & tblPersons!ContactName & ""
',"("" & tblPersons.Customer & ")"," & tblPersons.OfficePhoneNumeric & ","fixed" & chr(34) & chr(10)
'increases the total number of phone book entries by 1
iPhoneBookEntry = iPhoneBookEntry + 1
End If
rsPhoneBookEntry.MoveNext
End If
MsgBox "Telefonbuch steht zum kopieren in Editor und speichern als *.csv-Datei bereit"
End If
rsPhoneBookEntry.Close
Set db = Nothing
End Function
In der If-Schleife bekomme ich die Fehlermeldung: "Fehler beim Kompilieren: Variable nicht definiert" und tblPersons ist blau unterlegt.
Hier stoße ich an meine Grenzen, da ich bisher trotz aller Sucherei nichts gefunden habe, woraus ich ableiten konnte, warum tblPersons eine Variable sein soll.
Ich würde mich freuen, wenn mir jemand von Euch weiterhelfen könnten.
Schönen Sonntag noch
TBWS
Hallo,
über all da, wo "tblPersons.xxx" in VBA verwendet wird (und nicht in einem SQL-String-Literal), muss die Recordset-Referenz hinzu:
If Not IsEmpty(rsPhoneBookEntry!tblPersons!OfficePhoneNumeric) Then
Zudem ist IsEmpty hier fehl am Platz und sollte "IsNull" lauten:
If Not IsNull(rsPhoneBookEntry!tblPersons!OfficePhoneNumeric) Then
Weiterhin muss, falls es sich um Wildcard-Vergleiche handelt, der Like-Operator verwendet werden:
Es genügt dann auch nur ein Sternchen.
left(tblPersons.Customer, 3) Like 'B*' " & _
Hallo Franz,
danke für Deine Hilfe. Bei mir hat es allerding nur mit
(tblPersons!OfficePhoneNumeric)
geklappt - aber jetzt läufts.
IsEmpty habe ich gegen IsNull ersetzt.
Hinsichtlich der left(tblPersons.Customer, 3) Like 'B*' " & _
hast Du recht - war irreführend. Ich hatte die Buchstaben durch * ersetzt.
Schöne Grüße
TBWS