(Nachfrage) Berichte vom Formular aufrufen

Hallo Leute, hallo Eillicht zu Vensre,

dur hast mir folgendes als Antwort auf meine Anfrage geschickt:

Sub AllReports()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentProject
For Each obj In dbs.AllReports
Debug.Print obj.Description
Next obj
End Sub

und ich sollte wenn ich die AllReports-Auflistung durchlaufe dann sollte ich mir die Report-Beschreibungen geben lassen. Ich bin ein totaler Neuling könnt Ihr mir bitte sagen wie ich das praktisch umsetzen muss?

Bitte bitte!
Danke Danke :wink:

Hallo Leute, hallo Eillicht zu Vensre,

Hallo,

dur hast mir folgendes als Antwort auf meine Anfrage
geschickt:

Sub AllReports()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentProject
For Each obj In dbs.AllReports
Debug.Print obj.Description
Next obj
End Sub

das Makro läuft nicht, da das „AccessObject“ keine Eigenschaft „Description“ besitzt. Mir ist keine Möglichkeit bekannt, an die Eingabe unter „Beschreibung“ per VBA heranzukommen.

Mein Vorschlag wäre eine kleine Tabelle mit den Berichtnamen und den Pseudonymen einzurichten und diese als Grundlage für das Kombi- oder Listenfeld zu nutzen.

Dazu richte folgende Tabelle ein:
Spalte 1: BerichtName
Spalte 2: Pseudonym
keinen Primärschlüssel festlegen und
speichern unter „Men_Berichte“

Die Tabelle muss nun gefüllt werden. In der 1. Spalte jeweils der Name des Berichtes, der über das Formular geöffnet werden soll und in der 2. Spalte der im Auswahlmenü zu erscheinende Pseudoname.

Dann die Einstellungen des Kombifeldes bzw. des Listenfeldes wie folgt verändern:
Spaltenanzahl: 2
Spaltenüberschriften: nein
Spaltenbreiten: 0 cm
Herkunftstyp: Tabelle/Abfrage
Datensatzherkunft: SELECT * FROM Men_Berichte
Gebundene Spalte 1

Die übrigen Einstellungen und die Makros wie in der voherigen Beantwortung belassen und schon müsste es funktionieren.

Bitte bitte!
Danke Danke :wink:

bitte

Gruß, tester

Hi tester,

Mein Vorschlag wäre eine kleine Tabelle mit den Berichtnamen
und den Pseudonymen einzurichten und diese als Grundlage für
das Kombi- oder Listenfeld zu nutzen.

das heißt es gibt keine Möglichkeit die Berichtsbeschreibung in einem Listenfeld automatisch anzeigen zu lassen bzw. die Tabellenspalten automatische mit diesen Inhalten zu füllen? Das ist nähmlich ine Problem, da ich ziemlich viele Berichte habe und eine manuelle Eingabe vom Zeitaufwand nicht in Frage kommt.

Gibt es da eine Lösung?

Danke !!!

Hi tester,

Mein Vorschlag wäre eine kleine Tabelle mit den Berichtnamen
und den Pseudonymen einzurichten und diese als Grundlage für
das Kombi- oder Listenfeld zu nutzen.

das heißt es gibt keine Möglichkeit die Berichtsbeschreibung
in einem Listenfeld automatisch anzeigen zu lassen bzw. die
Tabellenspalten automatische mit diesen Inhalten zu füllen?
Das ist nähmlich ine Problem, da ich ziemlich viele Berichte
habe und eine manuelle Eingabe vom Zeitaufwand nicht in Frage
kommt.

also meines Wissens nach nicht. Aber bei VBA ist vieles möglich.
Vielleicht solltest Du noch mal im VBA-Forum die Frage stellen, wie man die Beschreibung der Berichte per VBA auslesen kann. „Description“ geht aber definitiv nicht.

Eine kleine Hilfslösungen, um die Tabelle zunächst mit den Berichtnamen zu füllen hab ich schon im Angebot.

erst Verweis auf „Microsoft DAO 3.6 Object Library“ setzen, dann
folgenden Code in ein Modul einfügen und ausführen:

Sub TabelleFüllen()
Dim rst As DAO.Recordset
Dim obj As AccessObject
Set rst = CurrentDb.OpenRecordset("SELECT \* FROM Men\_Berichte")
For Each obj In CurrentProject.AllReports
rst.FindFirst ("[BerichtName]='" & obj.Name & "'")
If rst.NoMatch Then
 rst.AddNew
 rst.Fields(0).Value = obj.Name
 rst.Update
End If
Next obj
rst.Close
Set rst = Nothing
End Sub

Danke !!!

tester!

VIELEN RIESEN DANK, hat mir extrem geholfen!!!

Gruß aus Köln

Hi tester,

noch eine kurze Frage. Beim Ausführen bekomme ich einen Fehler angezeigt : „ungültiger Verweis auf Next-Steuervariable“

Weisst du da weiter?

schon Mal Danke! :wink:

Hi tester,

noch eine kurze Frage. Beim Ausführen bekomme ich einen Fehler
angezeigt : „ungültiger Verweis auf Next-Steuervariable“

Weisst du da weiter?

Bei mir (Access 2000 und Access 2003) funktioniert es problemlos.

Evtl. hast Du eine ältere Version von Access. Ich glaube, das Objekt „AccessObject“ gab es in älteren Versionen noch nicht, vielleicht liegt es daran.

Weiß allerdings nicht, wie man in älteren Accessversionen per VBA die ungeöffneten Berichte anspricht, sonst würde ich das Makro schnell umschreiben.

schon Mal Danke! :wink:

so weit ich weiß habe ich MS Access 2002 SP3. Hhhm dann muss ich es wohl per Hand machen, wäre aber nicht so ein großes Problem. Ich danke dir, deine Vorschläge waren genau das was ich wollte!!!

Echt super :wink:

Hi,

jetzt doch noch mal wg. dem Fehler.

Hab mal bewusst einen Schreibfehler in der „Next-Anweisung“ eingebaut (also z.B. „Next Ob“ statt „Next Obj“) und bekomm dann den gleichen Fehler. Also kann in deinem Code nur ein Schreibfehler sein.
Die Bezeichnung „obj“ muss in der DIM-, FOR EACH- und NEXT-Anweisung immer gleich geschrieben werden.
Also vergleiche nochmal die genaue Schreibweise des Codes.

Für den Fall, dass schon in meiner Antwort ein Schreibfehler war, hier nochmal das ganze frisch aus meinem funktionierenden Code kopiert:

Sub TabelleFüllen()
Dim rst As DAO.Recordset
Dim obj As AccessObject
Set rst = CurrentDb.OpenRecordset("SELECT \* FROM Men\_Berichte")
For Each obj In CurrentProject.AllReports
rst.FindFirst ("[BerichtName]='" & obj.Name & "'")
If rst.NoMatch Then
 rst.AddNew
 rst.Fields(0).Value = obj.Name
 rst.Update
End If
Next obj
rst.Close
Set rst = Nothing
End Sub

tester

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hat funktioniert, danke dir noch Mal.

) Gruß aus Köln