Access docmd-Befehl

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.

Wie sortiere ich bzw. springe zu Datensatz??

Moin,

zu jedem Formular gehört eine Abfrage als Datenquelle, in der legt man die Sortierung fest.

forms(0). ist mir in 30 Jahren Access noch nicht begegnet.

Gruß
Ralf

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

Hallo,

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.

Gruß
Franz, DF6GL

Sorry, das spielen die Tags einen Streich:

Me.Orderby = „…Dein Sortierkriterium…“

PS:

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

wobei das Form TB11 geladen sein muss.