Hallo,
ich nutze eine Datenbank-Anwendung mit variablem Formular :
Select Case Y
Case Is >= 1200
'DoCmd.OpenForm „TB11“
Case Else
DoCmd.OpenForm „TB22“
End Select
Ich möchte nun
die Daten neu sortieren
zum letzten Datensatz springen
Mit einem fest definierten Formular nutzte ich bisher
DoCmd.ShowAllRecords 'sortiert neu
DoCmd.GoToRecord , , acLast 'Letzter DS
Auf die Felder greife ich über forms(0). zu,
leider klappt der DoCmd-Befehl nun nicht mehr.
Hallo Ralf,
eine Erkläung von mir: ich nutze für verschiedene Display-Auflösungen 2 Formulare unterschiedlicher (Pixel-)Größe, aber mit identischen Feldern (FeldNamen).
Mit den forms-Ereignissen steuere ich dann SubRoutinen.
Select Case Y
Case Is >= 1200
'DoCmd.OpenForm „TB11“
Case Else
DoCmd.OpenForm „TB22“
End Select
Den „Gehe zum Ende“-Button nutze ich zB. beim Programm-Start.
Wie löst du den Zugriff auf ein Feld des gewählen Formulars?
Offensichtlich nicht über
Z=forms(0).Feldname.text…
LG Tomte
ich versteh die ganze Problematik/Vorgehensweise nicht. Was hat das Docmd.Openform mit dem Sortieren bzw. Letzten DS zu tun?
In einem „Startformular“ muss („btnOeffneForm“ es einen Button geben, mit dem die Ereignisfunktion angestoßen wird:
Sub btnOeffneForm_Click()
If Y = 1200 Then 'Y wird als globale Variable angenommen
DoCmd.OpenForm "TB11"
Else
DoCmd.OpenForm "TB22"
End If
End Sub
Die Sortierung eine jeden Forms hängt , wie Ralf sagte, von der zugrundeliegenden Form-Abfrage ab.
Wenn anderes sortiert werden soll, dann muss das im Form-Ereignis „Beim Laden“ geschehen:
Sub Form_Load()
Me.Orderby = „<>“
Me.OrderbyOn =True
’ Wenn zusätzlich anschließend auf den letzten DS gesprungen werden soll, dann ist hier die richtige Stelle, um das zu erledigen:
Docmd.GotoRecord,acNewrec
End Sub
Vermutlich ist hier aber keine „Sortierung“ gemeint, eher das Entfernen von einschränkenden Kriterien(Filter)
(„ShowAllRecords“ jedenfalls sortiert nicht, sondern zeigt, wie der Name schon vermuten lässt, alle DS aus dem Formular-Recordset an, entfernt also einen „Filter“)
Auf Felder eines Formulars greift man mit „Me“ als Referenz der akt. Forms zu, in dem der Code gerade abläuft.
z.B:
Me!Vorname
Me!Nachname
.
.
Insgesamt ist also der Vorgang, den Du realisieren willst, nicht nachzuvollziehen.
Forms(0) ist das erste (geladene) Form in der Forms-Auflistung. Die Index-Angabe kann man z. B. verwenden, wenn man alle geladenen Formulare mittels VBA bis auf eines entladen will und dabei der Formularname eine untergeordnete oder gar keine Rolle spielt.
Wenn von „außerhalb“ auf Steuerelemente eines Forms zugegriffen werden soll, so ist das zunächst in Frage zu stellen, weil solches in den meisten Fällen auf ein ungenügendes Tabellenkonzept hindeutet.
Wenn aber, dann so:
Dim strVorname as String
strVorname = Forms("TB11")!Vorname