Access-o-Mania

Access-Forum (Deutsch/German) => Bericht => Thema gestartet von: Omicron66 am Oktober 09, 2024, 08:24:02

Titel: Sortierung aus Unterformular übernehmen
Beitrag von: Omicron66 am Oktober 09, 2024, 08:24:02
Hallo zusammen,
ich habe mal wieder ein kleines Problem und finde keine Lösung. Da hier viele Schlaue Köpfe sind, erhoffe ich mir wie beim letzten Mal die Lösung zu finden.

Ich habe in einem Formular ein Unterformular in Tabellenform eingefügt. Wenn ich nun auf die Spaltenbezeichnung klicke, dann wird das Unterformular entsprechend sortiert. Nun möchte ich genau dieses Formular drucken und habe diesbezüglich einen Bericht erstellt. Ich möchte logischerweise die Sortierung aus dem Unterformular übernehmen.

So ist mein Code bis jetzt:
Private Sub Bild1_Click()

DoCmd.OpenReport "Materialliste", acViewPreview
Reports!Materialliste.OrderBy = Me.OrderBy
Reports!Materialliste.OrderByOn = True

End Sub

Das ganze funktioniert auch, solange der Druckbefehl aus dem Unterformular heraus generiert wird. Aus optischen Gründen, würde ich jedoch gerne den Cmd-Button in das Hauptformular verschieben.

Meine Idee sah bislang so aus:
Private Sub Bild1_Click()

DoCmd.OpenReport "Materialliste", acViewPreview
Reports!Materialliste.OrderBy = Forms!qryMengenListe_Unterformular.OrderBy
Reports!Materialliste.OrderByOn = True

End Sub

Dabei kommt jedoch ein Fehler: Laufzeitfehler '2450': Materialverwalung kann das Formular 'qryMengenListe_Unterformular' nicht finden, auf das verwiesen wir.

Wie müsste ich den Code nun anpassen, damit genau dies funktioniert?

Danke schonmal im Voraus.
Grüße Tim
Titel: Re: Sortierung aus Unterformular übernehmen
Beitrag von: Hondo am Oktober 09, 2024, 09:26:10
Hallo,
die Referenzierung auf das Unterformular sollte Me.NameUnterformularSteuerelement.Form sein. Dann kannst du das Orderby ganz einfach holen:
Me.NameUnterformularSteuerelement.Forms.OrderBy

Testen kannst du es einfach indem du im VBA-Code in dieser Zeile ein Haltepunkt setzt und dir mal ansiehst was in diesem steht.
Oder gib ihn im Direktfenster aus und lass dir das Direktfenster anzeigen (Strg + G).
Debug.print Me.NameUnterformularSteuerelement.Form.OrderBy

BytheWay:
Wenn "qryMengenListe_Unterformular" wirklich ein Formular ist dann sollte es vorne nicht den Kürzel qry haben, sondern frm.
Und wenn dies der Name des Unterformular ist dann kann man so niemals darauf verweisen. Nimm statt dessen immer: Me.NameUnterformularSteuerelement.Form

Gruß Andreas
Titel: Re: Sortierung aus Unterformular übernehmen
Beitrag von: Omicron66 am Oktober 09, 2024, 09:41:07
Du meinst dann so?
Private Sub Bild1_Click()

DoCmd.OpenReport "Materialliste", acViewPreview
Reports!Materialliste.OrderBy = Me.qryMengenListe_Unterformular.Forms.OrderBy
Reports!Materialliste.OrderByOn = True

End Sub
Das ganze steht jetzt bei mir im VBA auf der Hauptseite...

Weil damit bekomm ich jetzt den Fehler:
Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden
Titel: Re: Sortierung aus Unterformular übernehmen
Beitrag von: MzKlMu am Oktober 09, 2024, 10:01:09
Hallo,
Du musst den Namen des Unterformulars Steuerelements (Rahmen markieren) verwenden.

Wieso nennst du ein Formular qry......, das ist doch verwirrend.
Titel: Re: Sortierung aus Unterformular übernehmen
Beitrag von: Beaker s.a. am Oktober 09, 2024, 11:34:21
Und es muss
.Form.heissen.
Schaust du vielleicht hier (https://www.donkarl.com?FAQ4.2) noch mal.
Titel: Re: Sortierung aus Unterformular übernehmen
Beitrag von: Omicron66 am Oktober 09, 2024, 12:26:31
Zitat von: MzKlMu am Oktober 09, 2024, 10:01:09Wieso nennst du ein Formular qry......, das ist doch verwirrend.

hab am Anfang das Formular erstellt und nicht aufgepasst. Jetzt ists mir irgendwie auch egal geworden :D
Bin auch zu faul geworden jetzt den Namen dann in VBA überall zu ändern.


Zitat von: Beaker s.a. am Oktober 09, 2024, 11:34:21Schaust du vielleicht hier (https://www.donkarl.com/?FAQ4.2) noch mal.

Die Seite kannte ich noch nicht. Habe dadurch meinen letzten Fehler gefunden.
Danke dir!!!
Titel: Re: Sortierung aus Unterformular übernehmen
Beitrag von: MzKlMu am Oktober 09, 2024, 12:31:47
Hallo,
welchen Namen hat das Unterformular als Formular (Datenbankfenster) ?
Und welchen Namen hat das Ufo als Steuerelement ?

Die Unterschiede werden im Link in #4 erklärt.
Titel: Re: Sortierung aus Unterformular übernehmen
Beitrag von: Omicron66 am Oktober 09, 2024, 14:52:54
Zitat von: MzKlMu am Oktober 09, 2024, 12:31:47Hallo,
welchen Namen hat das Unterformular als Formular (Datenbankfenster) ?
Und welchen Namen hat das Ufo als Steuerelement ?

Die Unterschiede werden im Link in #4 erklärt.

Genau das war mein Fehler... Das Formular hatte nicht den selben Namen wie das Steuerelement. Habe ich dann genau dort gefunden.
Aber vielen Dank für die Hilfe.

Gilt für alle. Dankeschön, dass ihr mir bei dem Problem wiedermal helfen konntet!
Titel: Re: Sortierung aus Unterformular übernehmen
Beitrag von: Beaker s.a. am Oktober 10, 2024, 10:42:57
ZitatDas Formular hatte nicht den selben Namen wie das Steuerelement.
Das sollte auch so sein. Ich verwende einfach unterschiedliche Prefixe
"uf" & Formname = Formular, "uc" & Formname = UFo-Control
Titel: Re: Sortierung aus Unterformular übernehmen
Beitrag von: Knobbi38 am Oktober 11, 2024, 12:33:32
FWIW,

obwohl das Thema ja eigentlich schon beantwortet worden ist, hier mal eine alternative Lösung, wobei die Datenkapselung (https://de.wikipedia.org/wiki/Datenkapselung_(Programmierung)) mehr berücksichtigt wird. Das HF muß nämlich nichts über die Interna des UF wissen und auch nichts darüber, wie die eigentliche Sortierung im Report umgesetzt wird. Die einzelnen Objekte werden dadurch mehr entkoppelt, was für eine spätere Softwarewartung bzw. Refactoring von Vorteil ist.

Dazu wird im Unterformular eine Property erstellt, mit der die aktuelle Sortierung des Datenblatts ermittelt werden kann:
Public Property Get ActiveSortOrder() As String
  If Me.OrderByOn Then
    ActiveSortOrder = Me.OrderBy
  End If
End Property

Im Hauptformular wird dann im Klick-Ereignis des "Druck"-Buttons die Sortierung des UF abgerufen und dem Report beim Öffnen als Argument mitgegeben:
Private Sub btnPrint_Click()
  DoCmd.OpenReport "rptData", acViewPreview, _
      OpenArgs:=Me.subContainer.Form.ActiveSortOrder
End Sub

Als letzter Schritt muss im Report das per OpenArgs übergebene Argument ausgewertet und die Sortierung initialisiert werden:
Private Sub Report_Open(Cancel As Integer)
  If IsNull(OpenArgs) Then
    ' keine Sortierung
    Me.OrderByOnLoad = False
  Else
    ' Sortierung übernehmen und aktivieren
    Me.OrderBy = OpenArgs
    Me.OrderByOnLoad = True
  End If
End Sub
Der Aufwand dafür ist also überschaubar, aber eine spätere Wartungen wird dadurch deutlich einfacher.

Gruß
Ulrich
Titel: Re: Sortierung aus Unterformular übernehmen
Beitrag von: Hondo am Oktober 11, 2024, 13:55:27
Über eine Property das zu lösen ist eine sehr gute Lösung!
Danke für den Code.
Gruß