Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Bibliotheksverweise durcheinander ?!

Begonnen von Joe0301, Januar 16, 2017, 11:03:41

⏪ vorheriges - nächstes ⏩

Joe0301

Hallo Liebes Forum,

Ich habe ein Problem das mich zur Verzweiflung bringt.

ich versuch es mal zu erklären.

Und zwar hab ich ein Modul geschrieben wo ein paar globale variablen und Funktionen drin sind
nix besonderes

nun benutze ich diese variablen und Funktionen in Formularen nix besonderes

Plötzlich funktionierte eine Funktion nicht mehr. nach suchen und suchen bin ich darauf gestoßen
mir die Definition der variablen im VBA code anzeigen zu lassen
alle variablen funktionieren bis auf die aus besagter Funktion dort steht dann,

" sprung nicht möglich da in Bibliothek vorhanden auf die derzeit nicht verwiesen wird "

der versuch diesen verweis hinzuzufügen scheiterte da dann die Fehlermeldung

"Name steht im Konflikt mit vorhandenen modul oder projekt"

woran kann das liegen ?
und wie kann ich es beheben ?

neuere variablen funktionieren noch einwandfrei
ältere variabeln nur mit alten vba code
wird jedoch die abfrage geändert taucht der fehler wieder auf

mir scheint es als hätte er eine ältere Bibliothek/Modul gespeichert oder bezieht sich auf die ältere Version ????
ich habe keine Ahnung mehr
ich hoffe ihr habt mein Problem verstanden und könnt mir helfen.

MfG
Joe0301


DF6GL

Hallo,

poste mal das gesamte Modul, das Du "geschrieben" hast und kennzeichne die Codezeile, an der die Fehlermeldung auftritt.
Mach zudem einen Screenshot vom Verweis-Fenster.

Zitatältere variabeln nur mit alten vba code

Was ist "alter VBA-Code"?

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Joe0301


Option Compare Database
Option Explicit



Public Var1 As String
Public Var2 As String                               
Public Var3 As String
Public Var4 As String
Public Var5 As String




Public Function IstLeer(Ausdruck As Variant) As Boolean

'Quelle: http://www.dbwiki.net/

If Len(Trim(Ausdruck & vbNullString)) = 0 Then
   IstLeer = True
Else
   IstLeer = False
End If

End Function






Public Function OptionEinstellen(strOptionsname As String, strOptionswert As String) As Boolean

    Dim db As DAO.Database

    Set db = CurrentDb

    db.Execute "UPDATE tab_optionen SET Optionswert = '" & strOptionswert & "' WHERE Optionsname = '" & strOptionsname & "'", dbFailOnError

    If db.RecordsAffected = 1 Then

        OptionEinstellen = True

        Exit Function

    Else

        If db.RecordsAffected > 1 Then

            db.Execute "DELETE FROM tab_optionen WHERE Optionsname = '" & strOptionsname & "'", dbFailOnError

        End If

        db.Execute "INSERT INTO tab_optionen(Optionsname, Optionswert) VALUES('" & strOptionsname & "', '" & strOptionswert & "')", dbFailOnError

        If db.RecordsAffected = 1 Then

            OptionEinstellen = True

            Exit Function

        End If

    End If


End Function


Public Function fct1() As String
fct1 = Var1
End Function

Public Function fct2() As String
fct2 =Var2
End Function


Public Function fct3() As String
fct3 = Var3
End Function


Public Function fct4() As String
fct4 = Var4
End Function

Public Function fct5() As String
fct5 = Var5
End Function
   
'Funktion zum einlesen von .txt - Dateien. Wird für das Info Fenster verwendet

Public Function LoadText(ByVal FileName As String) As String
    Dim F As Long, L As String, Res As String
    F = FreeFile
    Open FileName For Input As #F
    While Not EOF(F)
        Line Input #F, L
        Res = Res & L & vbNewLine
    Wend
    Close #F
    LoadText = Res
End Function


Das modul wie gesagt nix besonderes


Private Sub Befehl14_Click()

DoCmd.OpenForm "fm_datensatz_bearbeiten", , , "ID=" & Me!ID

Var3 = Me!Text19
Call fct3

End Sub



Das ist der code der nicht/halb funktioniert
das Formular wird geöffnet
jedoch die variable nicht gespeichert.
mit Rechtsklick auf Var3 unter Definition

kommt die Fehlermeldung wie erwähnt sprung nicht möglich.

folgend im anhang nochmal das verweisfenster


mit alten VBA Code meinte ich, das var3 in einem Formular das ich vor einem Monat geschrieben habe noch funktioniert
nur in einem neuen Formular nicht mehr.

MfG
Joe0301

DF6GL

Hallo,


was willst Du denn mit den VarX-Variablen und den fctX()-Funktionen bezwecken?

Die erfüllen im gezeigten Code gar keinen Sinn.


ZitatPrivate Sub Befehl14_Click()

DoCmd.OpenForm "fm_datensatz_bearbeiten", , , "ID=" & Me!ID

Var3 = Me!Text19   'Wo (in welchem Formular)  befindet sich "Text19" ?
Call  fct3    ' "Call" wird nur zum Aufruf für SUB-Prozeduren verwendet.
' Aufruf einer Funktion:


Msgbox "Der Wert aus Feld 'Text19' lautet: " & fct3
'gleichwertig ist hier:    Msgbox "Der Wert aus Feld 'Text19' lautet: " & Var3



End Sub


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Joe0301

Hallo,

Der code steht in einem Endlosformulas (fm_userdatensätze_anzeigen)
das Formular das geöffnet wird (fm_datensatz_bearbeiten) benötigt eine Abfrage die als Bedingung in einem Feld fct3() hat

der Code an sich Funktionierte
dazu nochmal zur Fehlerentstehung

ich fertigte eine Kopie von fm_userdatensätze_anzeigen an
in dieser Kopie funktionierte es plötzlich nicht mehr
und nach rechtsklick auf die Var3 dann auf Definition kommt besagte Fehlermeldung
Zitat
" sprung nicht möglich da in Bibliothek vorhanden auf die derzeit nicht verwiesen wird "


geh ich in fm_benutzeroberfläche mit rechtsklick auf die Var3 und dann auf Definition öffnet er das gezeigte Modul und makiert wie es soll Var3 Blau und zeigt mir an ja alles definiert
nur bei der Kopie funktioniert das nicht, mittlerweile tritt der fehler auch immer häufiger auf nach dem ich z.b. eine Abfrage geändert habe...

MfG
Joe0301


Beaker s.a.

Hallo Joe,
Zitatdas Formular das geöffnet wird (fm_datensatz_bearbeiten) benötigt eine Abfrage die als Bedingung in einem Feld fct3() hat
Den Wert könntest du doch auch einfach per OpenArgs übergeben.
Oder, wenn du schon mit globalen Variablen (so verstehe ich deinen Code
jedenfalls) arbeiten willst, stelle diese auf öffentliche Propertys um.
Im Prinzip, statt Dim und Funktionsaufruf (Luftcode):
Private m_Var1 as String
'muss in den Modulkopf !

Public Property Set Var1(neuerWert as String)
    m_Var1 = neuerWert
End Property
Public Property Get Var1() As String
    Var1 = m_Var1
End Property

IMO einfacher und sicherer wäre auch diese Variante möglich
Public Property Get Var1() As String
    If m_Var1 = vbNullString Then
        m_Var1 = Forms!fm_userdatensätze_anzeigen!Text19
    End If
    Var1 = m_Var1
End Property


gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Lachtaube

Ich vermute eher, dass eines Deiner Module oder das VBA-Projekt selbst einen unglücklichen Namen hat.

FWIW: die Funktionen können schon sinnvoll sein, wenn sie in Abfragen genutzt werden. Dann sollte man sie aber ordentlich taufen und für den Rückgabewert Variant als Datentyp vereinbaren, damit auch Null-Werte genutzt werden können.
Grüße von der (⌒▽⌒)

Joe0301

Hallo, Danke für die antworten

@Beaker s.a
Danke für den Tipp, das werde ich mir auf jedenfall mal ansehen ob das sinnvoll für meine Anwendungen wäre, jedoch in meinem momentan engen Zeitfenster leider nicht komplett umsetzbar :(

@Lachtaube
Danke für die Antwort was verstehst du unter "unglücklichen" Namen, soll ich gucken ob andere Textfelder oder Felder in Tabellen den selben Namen haben ? oder wie ist das zu verstehen.

MfG
Joe0301

Lachtaube

Ein unglücklich gewählter Name eines Moduls oder des Projekts wäre gleichlautend dem Namen einer globalen Variablen oder Methode (Sub/Function/Property).

Wie heißt denn Dein VBA-Modul?
Grüße von der (⌒▽⌒)

Joe0301

Hallo,

Danke Danke Danke,
Ja das war es! der Variablenname entsprach der einer Feldes.
Ich hatte den Feldnamen im späterern Verlauf nochmal geändert, weswegen der Fehler erst später auftauchte
und die bereits bestehenden Definitionen noch gültig waren. Das erklärt zumindestens alles :D


MfG
Joe0301

Joss

@ekkehard,

wenn du erlaubst, würde ich gerne Property Set gegen Property Let ersetzen. ;)

Gruß
Josef

Beaker s.a.

Hallo Josef,
Ja gerne  :)
Mir war das später auch noch eingefallen, konnte es aber
nicht mehr ändern.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Joss

Hallo ekkehard,

weil wir gerade beim Thema Properties sind:

Ich habe die Property Let/Get-Variante bisher nur als Verwendung in einem Klassenmodul gekannt, z.B.
http://www.accessblog.de/Archive/tag/globale-variablen

Du verwendest den Code aber nur in einem Standardmodul. Funktioniert ja auch, wie man sieht.

Ich frage mich nun, was ist der Unterschied (Vorteile/Nachteile) zwischen den beiden Varianten? Kannst du da was dazu sagen?

Gruß
Josef

Lachtaube

Da Properties nur eine spezielle Form von Methoden darstellen, können diese auch genauso gut mit Funktionen bzw. Prozeduren abgebildet werden.

Properties in einem globalen Modul stehen anwendungsweit zur Verfügung (typische Beispiele: Datenbank-Instanz, Angemeldeter Benutzer, Bildschirmauflösung, Gewählte Sprachumgebung, etc.); Properties in einem Klassenmodul benötigen eine Klasseninstanz (i.d.R. Eigenschaften, die von Instanz zu Instanz variieren können).
Grüße von der (⌒▽⌒)

Beaker s.a.

Dem kann ich Nichts mehr hinzufügen.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)