Neuigkeiten:

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

Mobiles Hauptmenü

Unterbericht beim öffnen ansprechen - Report_open

Begonnen von cyberchris, März 13, 2025, 17:19:43

⏪ vorheriges - nächstes ⏩

knobbi38

Zitat von: markusxy am März 17, 2025, 17:16:45EarlyBinding
Early Binding bei einem SubReport? OOP Designtechniken bzw. Pattern haben mit Early Binding wenig zu tun und auch nichts mit dem Bang-Operator. Das sind verschiedene Themenbereiche.

Hier geht es um Datenkapselung.

Grüße Ulrich
   

cyberchris

Hallo zusammen,

Danke für eure Antworten. Muss ich mir mal anschauen und testen.

@knobbi38: sorry, ich hatte mich natürlich verschrieben... meinte "Report_Open" und "Report_Load". Wollte damit nur mitteilen, wo ich die Code eingebaut hatte...in _Open...

Auch weiß ich, wie man grundsätzlich OpenArgs mitgibt und auswertet - nur eben bisher noch nicht, wie damit in einem Unterformular umzugehen ist.

Viele Grüße
Christoph

markusxy

@Ulrich,
hier ein Beispiel was ich meine:

Private Sub Report_Load()
  If Not IsNull(OpenArgs) Then
    Dim sr As Report_srptData
   
    Set sr = Me.subContainer.Report
    sr.txtID.Visible = CBool(OpenArgs)
  End If
End Sub

Wenn man eine Referenz auf das Report Objekt erstellt, kann man IntelliSense nutzen und hat einen Code, den der Compiler prüfen kann.

knobbi38

#18
@markusxy

Hallo Markus,

danke für den Hinweis und wer gerne IntelliSense verwenden möchte, sollte das auch so machen.
Leider steht dann in VBA direkt der Name des Unterreports als Typ im Code, was ich gerne vermeiden möchte und deshalb das generische "Object" bevorzuge. Um diesen Nachteil zu vermeiden und dennoch mit IntelliSense arbeiten zu können, müßte man ein Interface verwenden. In dem Fall, bei nur einer Property oder Methode, halte ich das aber für etwas übertrieben.

VG
Ulrich

Änderung:
für Interessierte im Anhang die entsprechende Interface-Version.

cyberchris

Hallo zusammen,

danke für eure Unterstützung.
ich habe es nun teilweile erfolgreich hinbekommen.

Mein Fehler war, dass ich die ganze Zeit im "Report_Open" war. Dies geht aber nur im "Report_Load"
Me.[Prüfprotokoll].Report!Bezeichnungsfeld186.Visible = True

Jedoch nur, wenn ich den Bericht so öffne (Variante für Mail-Anhang):
DoCmd.OpenReport "4401_Pruefprotokolle", acPreview, , PMFilter, acHidden, "4401" & sOrder

Beim Öffnen zum Drucken durchläuft er irgendwie "Report_Load" nicht:
DoCmd.OpenReport "4401_Pruefprotokolle", acViewNormal, , PMFilter, , "4401"

Daher funktioniert es in diesem Fall leider nicht.


Viele Grüße
Christoph

knobbi38

#20
Hallo Christoph,

Von Report_Open war nie die Rede und acViewNormal wird bei Reports eigentlich selten verwendet - warum verwendest du das Überhaupt?

ZitatDaher funktioniert es in diesem Fall leider nicht.

Bei Reports in der Berichts- und Seitenansicht wird hingegen sehr wohl das "Report_Load" Ereignis ausgelöst und sollte also auch in deinem Fall funktionieren. Du kannst also den Bericht versteckt öffnen und dann mit PrintOut ausdrucken, wie das in den meisten Fällen gemacht wird.

Wie du PMFilter und Openargs verwendest, gibst du leider nicht an - diesbezüglich ist dann auch keine Hilfe möglich.

Gruß
Knobbi38

cyberchris

Vielen Dank an alle, die mir hierzu weitergeholfen haben.

knobbi38

Hallo Christoph,

noch eine kleine Anmerkung:
wenn ein Bericht mit einem eingebetteten Unterbericht erstellen wird, legt Access leider das SubReport-Steuerelement mit dem Unterberichtsnamen an. Der Bezeichner für das SubReport-Steuerelement sollte danach zwingend geändert werden, um spätere Fehler zu vermeiden. Meistens wird dem Steuerelementnamen einfach ein Präfix 'sub' vorangestellt, das reicht schon aus, um die Eindeutigkeit wieder herzustellen.

Gruß
Knobbi38

markusxy

Zitat von: knobbi38 am März 18, 2025, 11:13:28Leider steht dann in VBA direkt der Name des Unterreports als Typ im Code, was ich gerne vermeiden möchte und deshalb das generische "Object" bevorzuge.

Hallo Ulrich, hab's mir jetzt endlich angesehen.
Ist natürlich auch ein guter Ansatz, wenn man sich den Aufwand antun will.
Der Vorteil ist immerhin, dass die Anzeige auf die vorgesehenen Controls eingeschränkt ist und der Compiler der Lage ist zu prüfen.