November 25, 2020, 05:47:10

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Fehler beim Kompilieren: Variable nicht gefunden

Begonnen von TBWS, November 15, 2020, 10:37:32

⏪ vorheriges - nächstes ⏩

TBWS

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

DF6GL

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*' " & _

TBWS

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