none
VBA Ereignisprozeduren können nicht ausgeführt werden

    Frage

  • Hallo Leute,

    mit VBA für Access 2010 bin ich auf folgenes Problem gestoßen:

    Ich habe ein kleines SubFormular, welches genutzt werden soll um mit Hilfe von 5 Textfeldern Einträge in einer Tabelle zu filtern, aus der dann ein Datensatz ausgewählt werden kann. Zudem besitzt das SubFormular zwei Buttons, welche zum navigieren bzw. bestätigen der Auswahl dienen.

    Das SubFormular verwendet folgenden Code:

    Option Compare Database
    Option Explicit
    
    Dim spID As Integer
    Dim addressID As Integer
    
    Dim name As String
    
    Dim street As String
    Dim city As String
    Dim postalCode As String
    Dim land As String
    
    Private Sub close_button_Click()
        closeSubForm
    End Sub
    
    Private Sub set_button_Click()
        If suggestion_list.listIndex = -1 Or IsNull(suggestion_list.Column(0, suggestion_list.listIndex)) Then
            Exit Sub
        End If
    
        writeSelection
    End Sub
    
    Private Sub suggestion_list_Click()
        If suggestion_list.listIndex = -1 Or IsNull(suggestion_list.Column(0, suggestion_list.listIndex)) Then Exit Sub
        spID = suggestion_list.Column(0, suggestion_list.listIndex)
        setSPRecordSet
    End Sub
     
    Private Sub Form_Current()
        Debug.Print (Now() & "> " & Me.name)
        'initVars
        getArguments
        'refreshSuggestionList
    End Sub
    
    Private Sub initVars()
        name = "%"
        street = "%"
        location = "%"
        postalCode = "%"
        land = "%"
    End Sub
    
    Private Sub getArguments()
        spID = Me.Parent.getSubArguments.Item("spID")
    
        If spID <> -1 Then
            setSPRecordSet
            setAddressRecordSet
        End If
    
    End Sub

    Die Prozedur closeSubForm signalisiert dem ParentForm, dass das SubFormular geschlossen werden soll.

    writeSelection nimmt das ausgewählte Element und gibt es an das ParentForm zurück.

    setSPRecordSet und setAddressRecordSet sind Prozeduren, welche eine Verbinung zur Datenbank aufbauen und von dort Datensätze für die Auswahlliste suggestion_list holen.

    Aktuell ist es allerdings so, dass sämtliche Ereignisse (also Form_Current, close_button_Click, set_button_Click, suggestion_list_Click) auf dem SubFormular nicht ausgeführt werden, wobei die Buttons auch die folgende Access Warnung auslösen:

    Sie haben als Einstellung der Ereigniseigenschaft den Ausdruck Beim Klicken eingegeben.

    Dieser Ausdruck hat einen Fehler verursacht: Das Element ist bereits in einem

    Objektmodul vorhanden, von der dieses Objektmodul abgeleitet wird. *Der Ausdruck gibt möglicherweise weder den Namen eines Makros noch den Namen einer

    benutzerdefinierten Funktion noch [Ereignisprozedur] zurück. *Beim Auswerten einer Funktion, eines Ereignisses oder eines Makros trat

    möglicherweise ein Fehler auf. Dieser Fehler tritt auf, wenn ein Ereignis nicht ausgeführt werden konnte,

    weil der Speicherort der Logik für das Ereignis nicht ausgewertet werden kann.

    Falls z. B. die OnOpen-Eigenschaft eines Formulars auf =[Field] festgelegt ist,

    tritt dieser Fehler auf, weil die Ausführung eines Makros oder Ereignisnamens erwartet wird,

    wenn das Ereignis auftritt.

    In der Entwurfsansicht von Access steht bei jedem Objekt, welches auf Ereignisse reagieren soll, dass die Ereignisprozedur existiert.

    Die Warnung wird auch dann ausgelöst, wenn die Prozeduren leer sind.

    Auffällig ist, dass die Ereignisse korrekt ausgeführt werden, wenn die String-FeldVariablen name, street, city, postalCode und land nicht vorhanden sind.

    Ich benutze das gleiche Vorgehen in vielen SubFormularen, in denen die Ereignisse (bisher) einwandfrei ausgelöst werden.

    Kann jemand erklären warum dieser Fehler an dieser Stelle auftritt ?

    Gruß, Elafane


    • Bearbeitet Elafane Freitag, 2. März 2018 19:58
    Freitag, 2. März 2018 17:13

Antworten

  • Möglicherweise liegt eine Korruption vor. Als erstes würde ich eine neue leere Datenbank erstellen und alle Objekte aus der alten Datenbank importieren und schauen, ob der Fehler immer noch auftritt.

    Übrigens, "Name" ist ein schlechter Variablenname, da es leicht zu Verwechslungen mit der Namen-Eigenschaft von Objekten kommen kann, aber ich denke nicht, dass es daran liegt.

    Matthias Kläy, Kläy Computing AG

    • Als Antwort markiert Elafane Dienstag, 6. März 2018 09:13
    Sonntag, 4. März 2018 11:10

Alle Antworten

  • Möglicherweise liegt eine Korruption vor. Als erstes würde ich eine neue leere Datenbank erstellen und alle Objekte aus der alten Datenbank importieren und schauen, ob der Fehler immer noch auftritt.

    Übrigens, "Name" ist ein schlechter Variablenname, da es leicht zu Verwechslungen mit der Namen-Eigenschaft von Objekten kommen kann, aber ich denke nicht, dass es daran liegt.

    Matthias Kläy, Kläy Computing AG

    • Als Antwort markiert Elafane Dienstag, 6. März 2018 09:13
    Sonntag, 4. März 2018 11:10
  • Hallo Matthias,

    vielen Dank für deine Antwort, es lag an der "Name" Variablen, sie hat offenbar die gleichnamige Eigenschaft überschrieben.

    Gruß, Elafane

    Dienstag, 6. März 2018 09:14