Zwei Berichte gleichzeitig öffnen

Hallo zusammen,

ich habe ein Endlosformular mit einem Button drucken. Es sollen Berichte ausgedruckt werden, jedoch mit einem Kriterium. das heißt, wenn z.B. in dem Feld berichtart „bla,bla“ steht, dann öffne, den Bericht „bla, bla“. Jetzt steht aber in jedem datensatz unterschiedliche Berichtarten. Über ein Kontrollkästchen möchte ich aber alle berichte gleichzeitig ausdrucken (z.B. den Bericht „bla,bla“ und den bericht „Hallo“). Ist das möglich? Wie heißt die VBA dazu oder gibt es dafür noch eine andere Lösung?

Hier noch mein derzeitiger VBA:

If Me![Brichtart] = „KANBAN-Behälter_18,5x13,5“ Then
DoCmd.OpenReport „Rep_KANBAN_Behälter_18,5x13,5“, acViewPreview
Else
Me![Brichtart] = „KANBAN-Behälter_18,5x10,3“
DoCmd.OpenReport „Rep_KANBAN_Speziell_18,5x10,3“, acViewPreview
End If

Ich wünsch euch ein schönes Wochenende.
Viele Grüße von Beate

Hallo Beate,

hier die Lösung:

If Me![Brichtart] = „KANBAN-Behälter_18,5x13,5“ Then
DoCmd.OpenReport „Rep_KANBAN_Behälter_18,5x13,5“,
acViewPreview

endif

If Me![Brichtart] = „KANBAN-Behälter_18,5x10,3“ Then

DoCmd.OpenReport „Rep_KANBAN_Speziell_18,5x10,3“,
acViewPreview
End If

ODER einfach nur:

DoCmd.OpenReport Me![Brichtart]

Ich wünsch euch ein schönes Wochenende.

Ich auch :smile:
Gruß
Wolfgang

Hallo Wolfgang,

vielen DAnk für deine Antwort. Es klingt sehr plausibel. Alerdings bekomm ich jetzt einen Laufzeitfehler:

„Sie haben für eines der Argumente einen Ausdruck eingegeben, der nicht den für das Argument erforderlichen Datentyp hat“ (Laufzeitfehler: ‚2498‘)

Beim Debuggen ist dann die Zeile

DoCmd.OpenReport Me![Brichtart]

gelb markiert.

Warum und wie kann ich diesen fehler beheben?

Viele Grüße von Beate

Hallo Beate,

„Sie haben für eines der Argumente einen Ausdruck eingegeben,
der nicht den für das Argument erforderlichen Datentyp hat“
(Laufzeitfehler: ‚2498‘)

das Feld [Brichtart] enthält ggf. keine Daten?

Beim Debuggen ist dann die Zeile
DoCmd.OpenReport Me![Brichtart]
gelb markiert.
Warum und wie kann ich diesen fehler beheben?

  • prüfe vorher, ob das Feld Daten enthält.
  • ändere den Syntax der Zeile
    bzw. da du die Berichtnamen mit REP_ erweitert hast:

DoCmd.OpenReport „REP_“ & Me.Brichtart

Grüße aus Essen
Wolfgang

Hallo Wolfgang,

das mit dem Laufzeitfehler konnte ich jetzt beheben. Mir werden jetzt auch Berichte angezeigt, jedoch nicht so, wie ich es gern hätte.

Momentan ist es so, dass ich die Haken zu verschiedenen Berichten gesetzt habe. Nun werden die Daten allerdings nur in einem Bericht und nicht wie gewünscht in zwei verschiedenen Berichten angezeigt. Ist das überhaupt möglich, die daten gleichzeitig in verschiedenen Berichten anzeigen zu lassen? Also zum Bsp. die Mat_nr.11111 verlangt den Bericht A und die mat-Nr. 22222 verlangt den Bericht B. ich habe beide Häkchen zum Angucken des berichts angekreuzt und beide sollen angezeigt werden.

Für einen weiteren Tipp wäre ich sehr dankbar.
Viele Grüße von Beate

Hallo Beate,

du brauchst eine Funktion, die alle Datensätze durchläuft, prüft ob gedruckt werden soll und dann den entsprechnden Bericht ausgibt.

ein Beispiel:

Dim DB As Database
Dim rs As Recordset

Set DB = CurrentDb
Set rs = DB.OpenRecordset(„SELECT DRUCKEN FROM DEINE_TABELLE ORDER BY DRUCKEN“, dbOpenSnapshot)

With rs
.MoveLast
.MoveFirst

Do While Not EOF()
if !DRUCKEN then docmd.openreport !BRICHTART
.MoveNext
Loop
End With

Grüße aus Essen
Wolfgang

Hallo Wolfgang,

so richtig komm ich noch nicht klar, da ich auf die unterschiedlichsten tabellen und Abfragen zurückgreife:
Mein Formular, aus dem ich in die berichte springen will, hat als Datenquelle die Abfr_Übersicht. Da es bei der Datenbank um Etikettendruck geht (einige Materialnummern sollen mehrfach gedruckt werden), werden die Daten beim Drücken des Button bericht in eine neue Tabelle TmpDruck geschrieben. Auf diese Tabelle greifen die Berichte zurück. Ich schreib einfach mal meinen langen Quelltext dazu. Wäre nett, wenn du mal drüber schauen könntest, wo der Fehler liegt:

Sub btnWSDrucken_Click()
Dim db As Database
Dim rs As Recordset
Dim rs2 As Recordset
Dim rs3 As Recordset
Dim I As Integer
Dim stLinkCriteria As String
Dim stDocName As String
Me.Requery

Set db = CurrentDb()
Set rs = db.OpenRecordset(„TmpDruck“, dbOpenDynaset)
Set rs2 = db.OpenRecordset(„Abfr_Übersicht“, dbOpenDynaset)
Set rs3 = db.OpenRecordset(„Select Druck From TmpDruck Order By Drucken“, dbOpenSnapshot)
rs2.MoveFirst

Do Until rs2.EOF = True

If rs2![Druck] = True Then
If rs2![Neu] = True Then
I = rs2![Neu]
rs.AddNew
rs![Zuordnung_ID] = rs2![Zuordnung_ID]
rs![Material] = rs2![Material]
rs![Materialkurztext] = rs2![Materialkurztext]
rs![Dokument] = rs2![Dokument]
rs![Lieferant] = rs2![Lieferant]
rs![Name1] = rs2![Name1]
rs![Ort] = rs2![Ort]
rs![Telefon] = rs2![Telefon]
rs![Anlieferung Mo] = rs2![Anlieferung Mo]
rs![Anlieferung Die] = rs2![Anlieferung Die]
rs![Anlieferung Mi] = rs2![Anlieferung Mi]
rs![Anlieferung Do] = rs2![Anlieferung Do]
rs![Anlieferung Fr] = rs2![Anlieferung Fr]
rs![Rücklieferung Mo] = rs2![Rücklieferung Mo]
rs![Rücklieferung Die] = rs2![Rücklieferung Die]
rs![Rücklieferung Mi] = rs2![Rücklieferung Mi]
rs![Rücklieferung Do] = rs2![Rücklieferung Do]
rs![Rücklieferung Fr] = rs2![Rücklieferung Fr]
rs![Nachname] = rs2![Nachname]
rs![Vorname] = rs2![Vorname]
rs![Telefon Verantw] = rs2![Telefon Verantw]
rs![Stückzahl] = rs2![Stückzahl]
rs![AnzBeh] = rs2![AnzBeh]
rs![Halle] = rs2![Halle]
rs![Raster] = rs2![Raster]
rs![Bereich] = rs2![Bereich]
rs![Lagerplatz] = rs2![Lagerplatz]
rs![Arbeitsplatz] = rs2![Arbeitsplatz]
rs![Vorgang1] = rs2![Vorgang1]
rs![Vorgang2] = rs2![Vorgang2]
rs![Vorgang3] = rs2![Vorgang3]
rs![Vorgang4] = rs2![Vorgang4]
rs![Vorgang5] = rs2![Vorgang5]
rs![Brichtart] = rs2![Brichtart]
rs![Ansprechpartner Empfänger] = rs2![Ansprechpartner Empfänger]
rs![Ansprechpartner Lieferant] = rs2![Ansprechpartner Lieferant]
rs![Verantworung Anlieferung] = rs2![Verantworung Anlieferung]
rs![Verantwortung Rücklieferung] = rs2![Verantwortung Rücklieferung]
rs![Halle Ziel] = rs2![Halle Ziel]
rs![Raster Ziel] = rs2![Raster Ziel]
rs![Lagerplatz Ziel] = rs2![Lagerplatz Ziel]
rs![Bereich Ziel] = rs2![Bereich Ziel]
rs![Arbeitsplatz Ziel] = rs2![Arbeitsplatz Ziel]
rs![Telfon Ansprechpartner] = rs2![Telfon Ansprechpartner]
rs![Bilddatei] = rs2![Bilddatei]
rs![Logodatei] = rs2![Logodatei]
rs![Zähler] = I
rs![Druck] = rs2![Druck]
rs![Neu] = rs2![Neu]
rs.Update
Else
For I = 1 To rs2![AnzBeh]
rs.AddNew
rs![Zuordnung_ID] = rs2![Zuordnung_ID]
rs![Material] = rs2![Material]
rs![Materialkurztext] = rs2![Materialkurztext]
rs![Dokument] = rs2![Dokument]
rs![Lieferant] = rs2![Lieferant]
rs![Name1] = rs2![Name1]
rs![Ort] = rs2![Ort]
rs![Telefon] = rs2![Telefon]
rs![Anlieferung Mo] = rs2![Anlieferung Mo]
rs![Anlieferung Die] = rs2![Anlieferung Die]
rs![Anlieferung Mi] = rs2![Anlieferung Mi]
rs![Anlieferung Do] = rs2![Anlieferung Do]
rs![Anlieferung Fr] = rs2![Anlieferung Fr]
rs![Rücklieferung Mo] = rs2![Rücklieferung Mo]
rs![Rücklieferung Die] = rs2![Rücklieferung Die]
rs![Rücklieferung Mi] = rs2![Rücklieferung Mi]
rs![Rücklieferung Do] = rs2![Rücklieferung Do]
rs![Rücklieferung Fr] = rs2![Rücklieferung Fr]
rs![Nachname] = rs2![Nachname]
rs![Vorname] = rs2![Vorname]
rs![Telefon Verantw] = rs2![Telefon Verantw]
rs![Stückzahl] = rs2![Stückzahl]
rs![AnzBeh] = rs2![AnzBeh]
rs![Halle] = rs2![Halle]
rs![Raster] = rs2![Raster]
rs![Bereich] = rs2![Bereich]
rs![Lagerplatz] = rs2![Lagerplatz]
rs![Arbeitsplatz] = rs2![Arbeitsplatz]
rs![Vorgang1] = rs2![Vorgang1]
rs![Vorgang2] = rs2![Vorgang2]
rs![Vorgang3] = rs2![Vorgang3]
rs![Vorgang4] = rs2![Vorgang4]
rs![Vorgang5] = rs2![Vorgang5]
rs![Brichtart] = rs2![Brichtart]
rs![Ansprechpartner Empfänger] = rs2![Ansprechpartner Empfänger]
rs![Ansprechpartner Lieferant] = rs2![Ansprechpartner Lieferant]
rs![Verantworung Anlieferung] = rs2![Verantworung Anlieferung]
rs![Verantwortung Rücklieferung] = rs2![Verantwortung Rücklieferung]
rs![Halle Ziel] = rs2![Halle Ziel]
rs![Raster Ziel] = rs2![Raster Ziel]
rs![Lagerplatz Ziel] = rs2![Lagerplatz Ziel]
rs![Bereich Ziel] = rs2![Bereich Ziel]
rs![Arbeitsplatz Ziel] = rs2![Arbeitsplatz Ziel]
rs![Telfon Ansprechpartner] = rs2![Telfon Ansprechpartner]
rs![Bilddatei] = rs2![Bilddatei]
rs![Logodatei] = rs2![Logodatei]
rs(„Zähler“) = I
rs(„Druck“) = rs2![Druck]
rs.Update
Next I
End If
End If
rs2.MoveNext

Loop
'rs.Close

rs2.Close

With rs3
.MoveLast
.MoveFirst

Do While Not rs2.EOF() = True
If Me!Druck = True Then DoCmd.OpenReport Me!Brichtart
.MoveNext
Loop
End With

’ If Me![Brichtart] = „KANBAN-Behälter_18,5x13,5“ Then
'DoCmd.OpenReport „KANBAN-Behälter_18,5x13,5“, acViewPreview
'End If

'If Me![Brichtart] = „KANBAN-Speziell_18,5x10,3“ Then
'DoCmd.OpenReport „KANBAN_Speziell_18,5x10,3“, acViewPreview
'End If

stDocName = Me![Brichtart]
DoCmd.OpenReport stDocName, acViewPreview

Exit_btnWSDrucken_Click:
Exit Sub
Err_btnWSDrucken_Click:
MsgBox Err.Description
Resume Exit_btnWSDrucken_Click
End Sub

Viele Grüße von Beate

Hallo Beate,

so richtig komm ich noch nicht klar, da ich auf die
unterschiedlichsten tabellen und Abfragen zurückgreife:

stammt der Code von dir, oder von jemanden anderen?

Mein Formular, aus dem ich in die berichte springen will, hat
als Datenquelle die Abfr_Übersicht.

Da es bei der Datenbank um
Etikettendruck geht (einige Materialnummern sollen mehrfach
gedruckt werden), werden die Daten beim Drücken des Button
bericht in eine neue Tabelle TmpDruck geschrieben.

ok, das ist auch ne Möglichkeit

Auf diese Tabelle greifen die Berichte zurück. Ich schreib einfach
mal meinen langen Quelltext dazu.
Wäre nett, wenn du mal drüber schauen könntest, wo der Fehler liegt:

ähm weiß nicht wo ich anfangen soll, eigentlich ist es kein Fehler, eher viel zu umständlich, und dadurch unübersichtlich. Mit ein wenig SQL kann man das alles viel einfacher gestalten:

Sub btnWSDrucken_Click()
Dim X
Dim Dummy_ID
Dim SQL as String
Dim db As Database
Dim rs_abfr As Recordset
Dim rs_druck As Recordset

Set db = CurrentDb()
Set rs_abfr = db.OpenRecordset(„Abfr_Übersicht“, dbOpenDynaset)
Set rs_druck = db.OpenRecordset(„TMPdruck“, dbOpenDynaset)

Me.Requery

'--------------------------------------------------
’ Beginn Übertragung an TMPdruck
'--------------------------------------------------

'erst mal die TMPdruck Tabelle leeren
SQL = „DELETE * FROM TMPdruck;“
DoCmd.RunSQL SQL

'keine Ahnung wofür du das brauchst, aber hier die
'Anfügeabfrage für die Bedingung DRUCK = True und NEU = True

SQL = „INSERT INTO TMPdruck ( DRUCK, NEU ) SELECT * FROM Abfr_Übersicht WHERE (((Abfr_Übersicht.DRUCK)=True) AND ((Abfr_Übersicht.NEU)=True));“
DoCmd.RunSQL SQL

'kommen wir nun zum ELSE:
'Deinen Zähler ließt du aus der Variablen [AnzBeh]

With rs_abfr

.MoveLast
.MoveFirst

Do while not .EOF

if !DRUCK and not !NEU then
Dummy_ID = !Zuordnung_ID

SQL = "INSERT INTO TMPdruck ( DRUCK, NEU ) SELECT * FROM
Abfr_Übersicht WHERE ((TMPdruck.Zuordnung_ID = " & Dummy_ID & „));“

For I = 1 To !AnzBeh
DoCmd.RunSQL SQL
Next I

endif
.MoveNext
Loop

.Close
end with

'--------------------------------------------------
’ Ende der Übertragung an TMPdruck
'--------------------------------------------------

'--------------------------------------------------
’ Beginn Ausruck
'--------------------------------------------------

With rs_druck
.MoveLast
.MoveFirst

Do While Not .EOF
If !Druck = True Then DoCmd.OpenReport !Brichtart
.MoveNext
Loop
End With
'--------------------------------------------------
’ Ende Ausruck
'--------------------------------------------------

Exit_btnWSDrucken_Click:
Exit Sub
Err_btnWSDrucken_Click:
MsgBox Err.Description
Resume Exit_btnWSDrucken_Click
End Sub

'--------------------------------------------------
’ Ende Code
’ unter Vorbehalt und ohne Gewähr, da nicht getestet
'--------------------------------------------------

Grüße aus Essen
Wolfgang

Hallo Wolfgang,

danke, es funktioniert fast. Das einzige Problem ist noch, dass jeder Bericht in jedem Format gedruckt wird. Es soll aber jeder Bericht nur einmal im entsprechenden Format gedruckt werden. Welcher Befehl ist dazu noch notwendig?

Viele Grüße von Beate

Hallo Beate,

danke, es funktioniert fast. Das einzige Problem ist noch,
dass jeder Bericht in jedem Format gedruckt wird. Es soll aber
jeder Bericht nur einmal im entsprechenden Format gedruckt
werden. Welcher Befehl ist dazu noch notwendig?

dazu wäre es hilfreich zu sehen, wie du die Berichte aufgebaut hast.

Am besten du schickst mir mal die MDB per Mail rüber…
Dann kann ich auch gleich mal nach den Bildern gucken :smile:

Grüße aus Essen
Wolfgang