Neuigkeiten:

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

Mobiles Hauptmenü

Problem der Codeausführung nach Formularöffnung

Begonnen von tragger, Dezember 28, 2013, 19:33:34

⏪ vorheriges - nächstes ⏩

tragger

Hallo Leute,

ich habe mal wieder ein Problem. Ich öffne das Formular B ohne dass ich Daten übergebe. Dieses Formular soll den User über den Zwischenstand informieren, während dann ein Code ausgeführt wird.

Wo muss der Code untergebracht werden? Wenn er in Form_Load, FOrm_Open oder Form_Current steht, wird der Code ausgeführt, aber das Formular wird nicht sichtbar...und die Informationen sind für den User nicht sichtbar... Ich weis nicht weiter:(

Hier ein Codeauszug:

Private Sub Form_Open()
    Dim db As Database
    Dim dbnew As Database
    Set db = CurrentDb
    Dim SQL1$
    Dim SQL2$
    Dim rs1 As DAO.Recordset
    Dim rs2 As DAO.Recordset
    Dim I As Long, X As Long
    Dim abschlussjahr As Long
    Dim bookingnumber As Long
    Dim pfad As String
    Dim informationmarker As String
    Dim abschlussdatumS As String
    Dim helper As Integer
   
    abschlussjahr = DLookup("Jahr", "tabJahresabschluss", "isnull(durchgefuehrt_am)")
    abschlussdatumS = "#" & "12" & "/" & "31" & "/" & abschlussjahr & "#"

    Me.txtJahresabschluss = "Vorgang 1 von 13 - Sollstellungen werden kontrolliert"
    ' 2. Offene Sollstellungsläufe überprüfen
    [...]
    Me.txtJahresabschluss = "Vorgang 2 von 13 - Abschlussbuchungen verarbeiten"
    ' 3. Abschlussbuchungen
   [...]
    Set rs1 = Nothing
    DoCmd.Close acForm, Me.Name
    DoCmd.OpenForm "frmSteuerung_Abschluesse"
End Sub


Ich danke vorab für eure Hilfe...

MzKlMu

Hallo,
warum bindest Du das Formular nicht einfach an eine entsprechende Abfrage?
Dann braucht es keinen Code.
Gruß Klaus

tragger

Hallo,

inwiefern an eine Abfrage binden?

Ich muss doch irgendwie den Prozess anstoßen und da hier diverse Tabellen angesprochen und diverse Handlungen als Jahresabschluss passieren, reicht eine Abfrage eher nicht... Oder ich verstehe momentan etwas falsch...

Es muss doch irgendeine Handlung geschehen, damit Access etwas nach der Öffnung macht, wenn ich das in einer anderen Prozedur habe...

MzKlMu

Hallo,
naja, ich weis ja nicht was bei den [...] passiert.
Üblicherweise macht man Berechnungen in Abfragen und bindet Formulare an diese Abfragen.
In Abfragen lassen sich auch mehrere Tabellen verwenden, sofern man Verknüpfungen zwischen den Tabellen aufbauen kann.
Gruß Klaus

tragger

#4
Also in dem [...] werden Daten/Tabellen exportiert; einzelne Datensätze über Recordset modifiziert; Abschlussbuchungen, soweit nötig durchgeführt... SOmit wird dieser Weg nicht gehen...

Ich muss irgendwie das Formular geöffnet bekommen und danach etwas anstoßen...

Das Formular soll nur informieren, dass man aktuell bei Schritt 1,2,3 usw. ist, also eine vereinfachte Progress-Geschichte...

database

Hallo,

wie willst du denn einem Benutzer die Gelegenheit geben etwas zu sehen, wenn du ihm das Formular vor der Nase wieder zumachst?  ;)
DoCmd.Close acForm, Me.Name

Allerdings sehe ich selbst bei geöffnetem Formular wenig Informationsgehalt,
da du das Textfeld mit den Ablaufinformationen immer wieder überschreibst.
VBA ist zwar kein Rennpferd aber immer noch schnell genug um den Benutzer beim Lesen der Information zu überfordern.

Zitat...und danach etwas anstoßen...
Auch das geht, dazu KÖNNTEST du deinen Code ins Klick-Ereignis eines Button packen, der halt zu drücken ist,
wenn das Formular geladen wurde.
Oder du startest beim Formular-Öffnen einen Timer, der dann nach 3 Sekunden die Berechnungsroutine aufruft.
Da gibt es verschiedene Möglichkeiten wie du siehst.

Um dem Benutzer aber überhaupt die Möglichkeit zu geben deine Informationen zu lesen solltet du vielleicht eine
Funktion einbauen, die die Codeausführung unterbricht nachdem du den Text ins Feld 'txtJahresabschluss' geschrieben hast.

So eine Funktion kannst du hier ...
http://dbwiki.net/wiki/VBA_Tipp:_Programmausf%C3%BChrung_f%C3%BCr_einen_Zeitraum_unterbrechen
...rausholen und in dein Projekt einbauen.

HTH