Neuigkeiten:

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

Mobiles Hauptmenü

Access VBA Programmierung

Begonnen von DiscoBernd, Mai 21, 2024, 10:27:38

⏪ vorheriges - nächstes ⏩

DiscoBernd

Hallo und guten Tag,

nach tagelangen Grübeln habe ich mich entschlossen nun hier um Hilfe zu bitten. Mit meinen VBA Kenntnissen bin ich nun an meine Grenzen gestossen und bitte um Hilfestellung oder einen Hinweis , so dass ich mein Problem lösen kann:

Ich habe die Access Anwendung: "StoppUhr 3" für meine Zwecke aus dem WEB als Vorlage heruntergeladen und die Formulare und VBA Anweisungen für meine Bedürfnisse modifiziert (alles hier im Anhang (.zip).

Es funktioniert: Textfeld500 click -> Übergabe Zwischenzeit + gleichzeitig Wert aus Textfeld500= z.B.65 aus dem HF in das UF durch Klick ins Feld zu übergeben.

Es funktioniert auch: Aus dem UF (ufrm_Startnummern) durch Klicken nur die Werte des Feldes StartNr in das UFO Zwischenzeiten zu übergeben (acnextrecord).

Es funktioniert nicht und da stosse ich an die Grenzen meines VBA Wissens: Durch Klicken in das Textfeld Schaltfläche im eingebundenen UFO StartNr gleichzeitig den Wert und die Zwischenzeit in das andere UFO Zwischenzeiten zu übergeben.

Aus dem HFo funktioniert alles wie ich es in den VBA Codes modifiziert habe.

Ich weiß, dass im VBA Code des UFO StartNr für die Funktion "Zwischenzeitspeichern" noch VBA-Anweisungen fehlen. Aber wie gesagt, um das alleine zu lösen, stosse ich jetzt an meine Grenzen und bin auf Hinweise angewiesen.

Ich hoffe, dass mir jemand einen Tip und Hilfestellung geben kann. Alle Scripte in der zip-Datei zum Nachvollziehen.

Trotzdem wünsche ich schon einen guten Tag.
Bernd

Köbi

Ich fände es hilfreicher, wenn du anstelle der verschiedenen Scripte eine aufs Notwendige beschränkte DB hier hochlädst.

DiscoBernd

hier habe ich im Anhang die Datenbank hochgeladen

Josef P.

Hallo!

Du könntest ein Ereignis verwenden, das im Hauptformular verarbeitet wird.

ufrm_Startliste_Startnummern:
Public Event StartNrClicked(ByVal StartNr As Long)

Private Sub StartNr_Click()

   'Wenn StartNr vorhangen => Ereignis auslösen, auf das im HF reagiert werden kann
   With Me.StartNr
      If .Value > 0 Then
         RaiseEvent StartNrClicked(.Value)
      End If
   End With

End Sub

frm_StoppUhr:
' WithEvents-Deklaration damit auf Ereignis reagiert werden kann:
Private WithEvents m_StartNummernForm As Form_ufrm_Startliste_Startnummern

Private Sub ufrm_Startliste_Startnummern_Enter()
   Set m_StartNummernForm = Me.ufrm_Startliste_Startnummern.Form
End Sub

Private Sub ufrm_Startliste_Startnummern_Exit(Cancel As Integer)
   Set m_StartNummernForm = Nothing
End Sub

Private Sub m_StartNummernForm_StartNrClicked(ByVal StartNr As Long)
   ZwischenzeitSpeichern StartNr
End Sub

Private Sub ZwischenzeitSpeichern(Optional ByVal StartNr As Long = 0) '<--- StartNr als Parameter ergänzt
   Dim AktuelleZeitFormatiert As String
   AktuelleZeitFormatiert = objStoppUhr.TimeString
   If objStoppUhr.Time Then ' 0 muss nicht gespeichert werden, oder?
      ZeitInTabelleSpeichern AktuelleZeitFormatiert, StartNr
   End If
End Sub
Private Sub ZeitInTabelleSpeichern(ByVal ZuSpeichernderZeitText As String, ByVal StartNr As Long) '<--- StartNr  als Parameter ergänzt
' MsgBox "Gespeicherte Zwischenzeit: " & ZuSpeichernderZeitText
'   .... hier muss noch Code zum Speichern in die Tabelle statt der MsgBox   '<--- Nachteil von Kommentarten ist: sie können stehen bleiben. ;-)
Me!ufrm_Zwischenzeiten.SetFocus
DoCmd.GoToRecord , , acNewRec
With Me!ufrm_Zwischenzeiten
   !Zwischenzeit = ZuSpeichernderZeitText
   if StartNr   > 0 then
       !Startnummer = StartNr  '<--- ergänzt
   end if
   .Form.Dirty = False
End With

Gruß
Josef

DiscoBernd

Hallo Josef,

ich habe deine Codes eingebaut und laufen lassen.

Der Code funktioniert ohne Veränderung (nur aus meinem Script die jetzt überflüssigen Teile entfernt), und somit funktioniert auch die Anwendung, wie ich es haben wollte. Dank deiner Hilfe kann ich jetzt die weiteren Schritte programmieren und das Programm weiter ausbauen.

Nochmals herzlichen Dank, auch für die schnelle Reaktion auf mein "Hilfeersuchen"!!!!

Gruß
Bernd

DiscoBernd

Hallo und guten Tag,
einmal möchte ich hier noch um Hilfe zu meinem schon beschriebenen Anliegen bitten. Von Josef hatte ich schon super Unterstützung erhalten. Ich habe mit seinem Vorschlag experimentiert und bin mit meinem Projekt sehr weit gekommen.

Eine Hilfestellung benötige ich noch: Ich möchte durch das Klicken ins Textfeld UFO Startnummern nicht nur durch diese Aktion die Startnummer (+Zeit) ins UFO übergeben, sondern zusätzlich und gleichzeitig die IDAthlet übergeben.

Leider bei meinen Kenntnissen und den Versuch den bestehenden Code zu ergänzen, bekomme ich immer die Meldungen: Variable nicht deklariert; Methode ist nicht optional, etc.

Kann mir bitte jemand einen Hinweis geben, wie ich mit einem Klick in das Textfeld Startnummer alle drei Aufgaben gleichzeitig erledige, wobei die Lösung für zwei ja schon vorhanden ist? Im Anhang die zip Datei der DB

Vielen Dank
Bernd

Josef P.

Hallo!

Vorab:
Können unter einer Startnummer bei einem Bewerb mehrere Athleten aktiv sein?
Falls nein, wäre das eine redundante Datenspeicherung.

Gruß
Josef

DiscoBernd

Hallo Josef,

nein bei einem Event und Wettbewerb wird jedem Athlen nur eine Startnummer zugeordnet.
wenn er an einem weiteren Wettbewerb gleiche Event, gleiche Datum, aber anderem IDWettbewerb teilnimmt, gleiche Startnummer

DiscoBernd

vielleicht zur Klärung noch, (habe ich im letzten Beitrag vergessen): Die Startnummer ist im Event und Wettbewerb einmalig, eine gleiche Nummer wird nicht zweimal, oder mehrmals vergeben. Somit keine Anzahl von mehreren Athleten mit gleicher Startnummer.

DiscoBernd

#9
kurzes Feetback:

durch den Hinweis von Josef "redundante Datenspeicherung" ist mein Kopf wieder frei geworden.

Problem war: Die Daten der Zwischenzeiten (tbl_Zwischenzeiten) den entsprechenden Athleten bei der Auswertung (Ergebnislisten) zuzuordnen. Durch Auswahlabfrage der entsprechenden Tabellen und Felder habe ich nun Ergebnislisten (mit Parameterabfragen) wo ich die entsprechenden Disziplinen nach Alter usw. filtern kann.

Ausserdem habe ich das Script insoweit verändert, dass ich nicht mehr die Startnummer (UFO Liste Startnummern) an das UFO Zwischenzeiten übergebe, sondern die IDAthlet aus dem UFO Startnummern an das UFO Zwischenzeiten übergebe. Die Starnummer wird entsprechend der ID sowieso inn der UFO tbl (Abfrage) zugeordnet. (Oder bin ich hier schon wieder auf einem Holzwweg? Jedenfalls bei den 1., 2. Tests hats geklappt.)