Neuigkeiten:

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

Mobiles Hauptmenü

Form schließen - Fehlermeldung Return ohne GoSub

Begonnen von Peerli, August 01, 2025, 18:53:37

⏪ vorheriges - nächstes ⏩

Peerli

Hallo zusammen.

Ich habe in einem Formular einen Button eingeführt und vom Assistenten "Formular schließen" erzeugen lassen.

Wenn ich aber das Formular schließen möchte, kommt oben genannte Fehlermeldung.
Ich bin nicht so stark wie ihr mit VBA, aber ich verstehe nicht, warum das von Access erzeugte Sub scheinbar nicht funktioniert.

Folgenden Code ist dem Event beim Klick angehängt.
Private Sub cmdCloseFormArzt_Click()
    DoCmd.Close acForm, Me.Name, acSaveYes
End Sub

Was habe ich übersehen oder mache ich falsch.
Danke für den Tipp.

VG Peer

PhilS

Zitat von: Peerli am August 01, 2025, 18:53:37ich verstehe nicht, warum das von Access erzeugte Sub scheinbar nicht funktioniert.
Das Problem sollte nicht an der gezeigten Prozedur liegen.

Wenn du in der VBA-Umgebung Menü "Debuggen" -> "Kompilieren ..." anklickst, kommt dann eine andere Fehlermeldung an einer anderen Stelle?
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MzKlMu

Gruß Klaus

Peerli

#3
Hi. Danke für die schnelle Rückmeldung.

Nein, es kommt keine Meldung.
VG

Peerli

#4
Auch bei dir möchte ich mich für die schnelle Rückmeldung bedanken.

Das speichern des Datensatzes beim Schließen des Formulars kommt nicht von mir ;-)
Sollte das Vorhandensein der Fehler sein?

VG

MzKlMu

Hallo,
Das speichern des Datensatzes.... Das ist ein Irrtum, acSaveYes speichert keine Daten. Ein Formular speichert die Daten in der Regel automatisch beim Schließen. acSaveYes speichert einen geänderten Formularentwurf.

Welchen Code gibt es noch im Formular?

Bitte keine vollständigen Beiträge zitieren.
Gruß Klaus

Peerli

Dann liegt es wohl doch daran?

Das würde auch erklären, warum ich die Meldung nicht immer bekomme.

MzKlMu

Hallo,
das glaube ich nicht, dass es daran leigt. Das war nur ein zusätzlicher Hinweis.
Ich habe oben noch eine Frage ergänzt.
Gruß Klaus

Peerli

Das habe ich jetzt erst realisiert.

Option Compare Database
Option Explicit

Private Sub Arzt_IBAN_AfterUpdate()
  If IBANOK(Arzt_IBAN.Text) Then
    ' Konto-Nr. korrekt
    Arzt_IBAN.ForeColor = vbBlack
  Else
    ' Konto-Nr. falsch
    Arzt_IBAN.ForeColor = vbRed
    MsgBox "IBAN falsch", vbCritical, "IBAN falsch"
    Arzt_IBAN.SetFocus
  End If
End Sub

Private Sub cmdCloseFormArzt_Click()
    DoCmd.Close acForm, Me.Name, acSaveYes
End Sub

Private Sub cmdIBANPaste_Click()

  'Stellen Sie sicher, dass das Textfeld aktiv ist
  Me.Arzt_IBAN.SetFocus

  'Fügt den Inhalt der Zwischenablage in das Textfeld ein
  DoCmd.RunCommand acCmdPaste

End Sub

Private Sub cmdIBANRechner_Click()
'BLZ und KtoNr in Zwischenablage ++++++++++++++
Dim strText As String
Dim txtBox1 As Access.TextBox
Dim txtBox2 As Access.TextBox

  ' Verweis auf die Textfelder im Formular
  Set txtBox1 = Me.Controls("txtBLZ") ' Ersetzen Sie "Textfeld1" durch den Namen Ihres ersten Textfeldes
  Set txtBox2 = Me.Controls("txtKtoNr") ' Ersetzen Sie "Textfeld2" durch den Namen Ihres zweiten Textfeldes

  ' Daten aus den Textfeldern auslesen und in eine Variable schreiben
  strText = txtBox1
  Debug.Print strText
  strText = strText & txtBox2
  Debug.Print strText
  Call Inzwischenablage(strText)

'  ' Daten in die Zwischenablage kopieren
'  With Application.Clipboard
'    .Clear
'    .SetText strText
'  End With

  ' Optional: Eine Meldung anzeigen, dass die Daten kopiert wurden
  MsgBox "Daten wurden in die Zwischenablage kopiert."

  ' Speicher freigeben
  Set txtBox1 = Nothing
  Set txtBox2 = Nothing

' Ende Kopieren in Zwischenalage +++++++++++++++++++++++++++++
    DoCmd.OpenForm "frmIBANRechner", acDialog
End Sub

Dies ist alles zum dazugehörigen Formular.
Ich bitte um Nachsicht, für den Anfänger Code.

Knobbi38

Hallo Peerli,

da ist in der Tat noch viel Optimierungsbedarf, aber die Fehlermeldung führt meistens in die Irre.

Du solltest deine Datenbank mal reparieren oder/und ein decompile durchführen:
https://www.donkarl.com?FAQ1.21

Gruß Knobbi38


Beaker s.a.

Hallo,

Wenn
IBANOK(Arzt_IBAN.Text)das macht, was ich erwarten würde (Berechnung einer IBAN bzw. Prüfung einer
übergebenen), wäre der ganze C&P-Kram doch völlig überflüssig.
Was passiert denn auf dem "frmIBANRechner"?

gruss ekkehard

P.S.: Bei AfterUpdate brauchst keine .Text mehr, zu dem Zeitpunkt ist das bereits
zur Standardeigenschaft .Value geworden. Ausserdem erhälst du bei .Text eine Fehler-
meldung wenn das Ereignis durch einen Wechsel zu einem anderen Control ausgelöst
wird.
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)

Peerli

Hallo Ekkehard.

Der Sinn des IBAN-Rechner ist aktuell nur nötig, damit ich aus meinem alten Datenbestand noch die Trennung BLZ und KtoNr habe und sie umrechnen und sie als IBAN hinterlegen möchte. Hintergrund ist, dass ich die alten Datenfelder BLZ und KtoNr danach entfernen möchte.

Ich habe die Absicht (aktuell bin ich noch am probieren), bei Vorhandensein von BLZ und KtoNr, diese in die Zwischenablage zu verschieben und in die entsprechenden Felder in IBANRechner abzurufen, um dann beide Felder als IBAN zu erstellen und dann wieder über die Zwischenablage in das Feld IBAN einzutragen.

Aktuell ist es so...
Ich habe (aus alten Bestand) BLZ und KtoNr. Daraus möchte ich mit dem Button "IBAN Rechner" die beiden Daten in die Zwischenablage kopieren, um sie in das nun öffnende Form IBANRechner in die entsprechenden Felder einzufügen. Dort berechne ich die IBAN anhand der BLZ, KtoNr und des Landes und kopiere die IBAN wieder über die Zwischenablage in das Ausgangs-Form in das Feld "IBAN" zurück.

Sie dürfen in diesem Board keine Dateianhänge sehen.

Zur Zeit hänge ich noch am übermitteln von BLZ und KtoNr über die Zwischenablage an Form IBANRechner.

VG Peer

Knobbi38

Hallo Perrli,

wenn du eine Funktion hast, welche deine IBAN berechnet, dann kannst du die doch aus deinem ursprünglichem Formular aus aufrufen, da braucht man kein weiteres Formular und schon gar keine Kommunikation zwischen zwei Formularen über die Zwischenablage - das ist so etwas von "bad practice".  :o

Um dir wirklich helfen zu können, wäre eine Beispiel-DB hilfreich.

Gruß Knobbi38

Beaker s.a.

Hallo,

@Ulrich
Eigentlich reicht die Prozedur, die hinter dem Button "IBAN berechnen" steht.

@Peerli
Diese Funktion kannst du doch auch direkt mit dem Button "IBAN Rechner" aufrufen.
Du hast die beiden Felder BLZ und Konto-Nr. da doch auch schon.
Luftcode
Private Sub cmdIBANRechner_Click()
'hier erst eine Prüfung einbauen ob beide benötigten Felder gefüllt sind, dann
    Me.txtIBAN = IBANberechnen(Me.txtBLZ, Me.txtKonto)
"IBANberechnen" muss dann beide Werte als Parameter annehmen, und damit die
IBAN berechnen.
Prozedurkopf
Function IBANberechnen(sBLZ As String, Konto As StringOb String der richtige Datentyp ist muss du wissen. Ich hab's erstmal angenommen
wegen Länderkürzel und Leerzeichen.

gruss ekkehard

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)

Peerli

#14
Hallo Knobbi38.

Vielen Dank für deine Rückmeldung und den Vorschlag, zu helfen.

Du hast natürlich recht, das man im Prinzip nicht über die Zwischenablage gehen muss und den IBAN Rechner in der UF unterbringen kann und sollte. Den Rechner hatte ich schon im Vorfeld in mein Projekt eingebaut, ohne im Blick zu haben, das ich die Funktion weit über den Ursprung hinaus verwenden möchte. Wie schon erwähnt, wollte ich testen, wie es funktioniert, zwei Werte in die Zwischenablage zu kopieren und wieder auszulesen.

Eine Beispiel Datei kann ich wegen der inzwischen aufgebauten Größe nur per Link hochladen und ist für 7 Tage zugänglich.

Mit besten Grüßen und besten Dank im Voraus
Peer