Discussion:
Drucken aus Berichtsvorschau
(zu alt für eine Antwort)
Volker Bock
2005-04-21 23:22:04 UTC
Permalink
Hallo,

ich habe folgendes Problem: Ich habe mir einen Bericht
zusammengebastelt, der Etiketten ausdrucken soll. Wenn ich den per VB
(DoCmd.OpenReport "Etiketten", acViewPreview) aufrufe, dann ist alles
bestens, aber wenn ich dann aus dieser Vorschau über irgendeine Schiene
drucken will, bekomme ich immer ein leeres Blatt bzw. gar nichts. Wenn
ich dagegen die Vorschau geschlossen habe und den Bericht direkt zum
Drucken aufrufe (DoCmd.OpenReport "Etiketten", acNormal), dann druckt er
sofort los, und druckt auch das richtige, es kommt nur leider kein
Druckdialog hoch. Weiss jemand, wie ich das lösen kann. Ich hab schon
länglich im Netz geforscht !!

Grüße
Volker
Doerthe Weber
2005-04-22 08:21:41 UTC
Permalink
Hallo Volker,
Post by Volker Bock
Hallo,
ich habe folgendes Problem: Ich habe mir einen Bericht
zusammengebastelt, der Etiketten ausdrucken soll. Wenn ich den per VB
(DoCmd.OpenReport "Etiketten", acViewPreview) aufrufe, dann ist alles
bestens, aber wenn ich dann aus dieser Vorschau über irgendeine Schiene
drucken will, bekomme ich immer ein leeres Blatt bzw. gar nichts. Wenn
ich dagegen die Vorschau geschlossen habe und den Bericht direkt zum
Drucken aufrufe (DoCmd.OpenReport "Etiketten", acNormal), dann druckt er
sofort los, und druckt auch das richtige, es kommt nur leider kein
Druckdialog hoch. Weiss jemand, wie ich das lösen kann. Ich hab schon
länglich im Netz geforscht !!
Hast Du vielleicht im Bericht irgendwelche Filterungsbezüge auf ein
Formular, die nachdem es in Seitenansicht geöffnet wurde nicht mehr gültig sind?

Gruß
Doerthe
Sascha Wostmann
2005-04-22 17:29:01 UTC
Permalink
Post by Doerthe Weber
Hallo Volker,
Post by Volker Bock
Hallo,
ich habe folgendes Problem: Ich habe mir einen Bericht
zusammengebastelt, der Etiketten ausdrucken soll. Wenn ich den per VB
(DoCmd.OpenReport "Etiketten", acViewPreview) aufrufe, dann ist alles
bestens, aber wenn ich dann aus dieser Vorschau über irgendeine Schiene
drucken will, bekomme ich immer ein leeres Blatt bzw. gar nichts. Wenn
ich dagegen die Vorschau geschlossen habe und den Bericht direkt zum
Drucken aufrufe (DoCmd.OpenReport "Etiketten", acNormal), dann druckt er
sofort los, und druckt auch das richtige, es kommt nur leider kein
Druckdialog hoch. Weiss jemand, wie ich das lösen kann. Ich hab schon
länglich im Netz geforscht !!
Hast Du vielleicht im Bericht irgendwelche Filterungsbezüge auf ein
Formular, die nachdem es in Seitenansicht geöffnet wurde nicht mehr gültig sind?
eine andere Ursache könnte sein, dass Code beim Report existiert, der
die zu druckenden Etiketten aus einer Tabelle ausliest, druckt und
löscht. All das wird dann für die Vorschau ausgeführt und beim
tatsächlichen Druck sind die Datensätze dann weg. Wenn man ohne
Vorschau direkt druckt, funktioniert es dann wie gewünscht.

Also Volker: mehr Infos!


Viele Grüße,
Sascha Wostmann
--
wichtige Informationsquellen zu Access: +----------------------
http://www.donkarl.com/ (FAQ) | Bitte keine Kopien
http://www.freeaccess.de/ (KnowHow) | oder Access-Anfragen
http://www.google.de/ (Suchmaschine) | per E-Mail.
Volker Bock
2005-04-22 23:19:33 UTC
Permalink
Hallo,
Post by Sascha Wostmann
Post by Doerthe Weber
Hallo Volker,
Post by Volker Bock
Hallo,
ich habe folgendes Problem: Ich habe mir einen Bericht
zusammengebastelt, der Etiketten ausdrucken soll. Wenn ich den per VB
(DoCmd.OpenReport "Etiketten", acViewPreview) aufrufe, dann ist alles
bestens, aber wenn ich dann aus dieser Vorschau über irgendeine Schiene
drucken will, bekomme ich immer ein leeres Blatt bzw. gar nichts. Wenn
ich dagegen die Vorschau geschlossen habe und den Bericht direkt zum
Drucken aufrufe (DoCmd.OpenReport "Etiketten", acNormal), dann druckt er
sofort los, und druckt auch das richtige, es kommt nur leider kein
Druckdialog hoch. Weiss jemand, wie ich das lösen kann. Ich hab schon
länglich im Netz geforscht !!
Hast Du vielleicht im Bericht irgendwelche Filterungsbezüge auf ein
Formular, die nachdem es in Seitenansicht geöffnet wurde nicht mehr gültig sind?
eine andere Ursache könnte sein, dass Code beim Report existiert, der
die zu druckenden Etiketten aus einer Tabelle ausliest, druckt und
löscht. All das wird dann für die Vorschau ausgeführt und beim
tatsächlichen Druck sind die Datensätze dann weg. Wenn man ohne
Vorschau direkt druckt, funktioniert es dann wie gewünscht.
Also Volker: mehr Infos!
Erstmal danke für die Antworten.
Ok. Version Access 97, Betriebssystem Win NT 4.0, kam mir dann auch,
dass das vielleicht auch helfen könnte.
Also: Hinter dem Report liegt ein bisschen VB Code, damit ich z.B. den
Etikettendruck an einer bestimmten Stellen beginnen kann, Etiketten
mehrfach drucken kann und auch nur bestimmte Etiketten drucken kann
(habe ich bei www.access-guru.de gefunden und funktioniert auch
wunderbar). Das wird alles vorher über INPUTBOX oder ein Formular abgefragt.
Es gibt nun 2 Varianten:

1. Ich drucke direkt ohne Vorschau mittels "DoCmd.OpenReport
"Etiketten", acNormal". Dann bekomme ich die Inputboxen und alles und
der Druck geht vernünftig vonstatten. Allerdings kommt da leider kein
Druckdialog hoch, wo ich nochmal die Einstellungen ändern könnte.
Ausserdem habe ich ja dann keine Vorschau. Aber das sprich ja gegen Eure
Einwände, oder?

2. Ich mach zuerst die Vorschau mit "DoCmd.OpenReport "Etiketten",
acViewPreview". Dann kann ich machen, was ich will (rechte Maustaste und
Kontextmenu, Druckbutton in der Symbolleiste, Menü Datei..Drucken ...),
ich bekomme zwar im Gegensatz zu 1. immer den Druckdialog, aber mit
einem Nichtausdruck/einer leeren Seite als Ergebnis. Ich könnte dann
zwar über VB die Vorschau schliessen, bevor ich wieder mit DoCMD den
Druck aufrufe, aber dann fehlt mir wieder der Druckdialog.

Wäre super, wenn irgendjemand zur Klärung beitragen könnte. Auch die
Aussage: "2. geht einfach so nicht" wäre ja auch schon eine Hilfe. Dann
wüsste ich, dass ich nicht weiter suchen muss und mir anders behelfen muss.

Volker
Doerthe Weber
2005-04-23 13:43:01 UTC
Permalink
Hallo Volker,

Volker Bock schrieb:
...
Post by Volker Bock
Erstmal danke für die Antworten.
Ok. Version Access 97, Betriebssystem Win NT 4.0, kam mir dann auch,
dass das vielleicht auch helfen könnte.
Also: Hinter dem Report liegt ein bisschen VB Code, damit ich z.B. den
Etikettendruck an einer bestimmten Stellen beginnen kann, Etiketten
mehrfach drucken kann und auch nur bestimmte Etiketten drucken kann
(habe ich bei www.access-guru.de gefunden und funktioniert auch
wunderbar). Das wird alles vorher über INPUTBOX oder ein Formular abgefragt.
1. Ich drucke direkt ohne Vorschau mittels "DoCmd.OpenReport
"Etiketten", acNormal". Dann bekomme ich die Inputboxen und alles und
der Druck geht vernünftig vonstatten. Allerdings kommt da leider kein
Druckdialog hoch, wo ich nochmal die Einstellungen ändern könnte.
Ausserdem habe ich ja dann keine Vorschau. Aber das sprich ja gegen Eure
Einwände, oder?
2. Ich mach zuerst die Vorschau mit "DoCmd.OpenReport "Etiketten",
acViewPreview". Dann kann ich machen, was ich will (rechte Maustaste und
Kontextmenu, Druckbutton in der Symbolleiste, Menü Datei..Drucken ...),
ich bekomme zwar im Gegensatz zu 1. immer den Druckdialog, aber mit
einem Nichtausdruck/einer leeren Seite als Ergebnis. Ich könnte dann
zwar über VB die Vorschau schliessen, bevor ich wieder mit DoCMD den
Druck aufrufe, aber dann fehlt mir wieder der Druckdialog.
Wäre super, wenn irgendjemand zur Klärung beitragen könnte. Auch die
Aussage: "2. geht einfach so nicht" wäre ja auch schon eine Hilfe. Dann
wüsste ich, dass ich nicht weiter suchen muss und mir anders behelfen muss.
Prinzipiell ist gegen die Vorgehensweise erstmal in Vorschau öffnen und dann
ausdrucken nichts einzuwenden.
Was führst Du denn im Bericht an VB-Code aus? - Einiges davon wird beim
Ausdrucken der schon geöffneten Vorschau noch einmal durchgeführt, und das
kann zu unverhofften Effekten führen. Also poste doch mal ein bißchen Code...

Gruß
Doerthe
Volker Bock
2005-04-23 18:07:29 UTC
Permalink
Hallo,

ich zitiere hier mal nicht noch alles bisher Geschriebene, also hier ein
bisschen Coding, manches ist aus dem Internet kopiert und modifiziert,
so siehts auch aus ;-). Ich hoffe man verstehts trotzdem ein bisschen.
Es soll sich um CD-Etiketten handeln, mit einem kleinen Icon drauf. Ok,
auf gehts:

Zunächst der VB-Code des Berichts selber und unten dann die Subs, die
daraus aufgerufen werden. Das zeitigt die in meinem letzten Posting
beschriebenen Effekte. Ich habs grade nochmal versucht... Was natürlich
beim Drucken (aus dem Kontextmenü) wieder pro etikett durchlaufen wird,
ist natürlich "Detailbereich_Format", sehe ich ein. Aber nicht, dass
dann eine leere Seite (wenn ichs in ein PDF-File drucke) bzw. ein Nichts
(wenn ichs direkt an den Drucker schicke) dabei rauskommt. Also viel
Spass beim lesen des Codings.

Volker

------------------------------------------
Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
On Error GoTo Detailbereich_Format_Err

Dim db As Database
Dim sgenre As Recordset

Call Etikett_Layout(Me)

Set db = CurrentDb()
Set sgenre = db.OpenRecordset("Genres", dbOpenTable)

With sgenre
' Index festlegen.

.Index = "Genre"
.Seek "=", Genre
If .NoMatch = False Then
Logo_Genre.Picture = sgenre("Logo")
If Not IsNull(sgenre("Farbe")) Then
Label.BackColor = sgenre("Farbe")
Else
Label.BackColor = -2147483633
End If
' Dunkle Farben mit hellem Text
If (sgenre("Genre") = "Comedy" Or sgenre("Genre") = "Kinder" Or
sgenre("Genre") = "Nature") Then
Genre.ForeColor = 15000804
Nummer.ForeColor = 15000804
Index.ForeColor = 15000804
Else
Genre.ForeColor = 0
Nummer.ForeColor = 0
Index.ForeColor = 0
End If
Else
Logo_Genre.Picture = "E:\Access\Volker\Musik & Videos\Logos\kein
Bild.jpg"
Label.BackColor = -2147483633
Genre.ForeColor = 0
Nummer.ForeColor = 0
Index.ForeColor = 0
End If
End With

Detailbereich_Format_Exit:
Exit Sub

Detailbereich_Format_Err:
MsgBox Error$
Resume Detailbereich_Format_Exit
End Sub
------------------------------------------

Private Sub Report_Close()

caller_etikett = ""

End Sub

------------------------------------------
Private Sub Report_Open(Cancel As Integer)

Call Etikett_Setup

If abbruch_etikett = True Then
Cancel = True
End If


End Sub
------------------------------------------
Function Etikett_Layout(MyRpt As Report)

Dim db As Database
Dim myrec As Recordset

Set db = CurrentDb()
Set myrec = db.OpenRecordset("Kopfdaten Medien", dbOpenTable)

' wenn die aktuelle Leere Anzahl noch kleiner als die der angegebenen
Leeren
' und wir uns auf Seite 1 befinden
If LeerAnzahl& < LeerEtiketten& And MyRpt.Page = 1 Then
' nicht auf den nächsten Datensatz gehen und auch nicht ausgeben
MyRpt.NextRecord = False
MyRpt.PrintSection = False
LeerAnzahl& = LeerAnzahl& + 1
Else

If zaehler& < start& Then
MyRpt.MoveLayout = False
MyRpt.PrintSection = False
MyRpt.NextRecord = True
zaehler& = zaehler& + 1
Exit Function
End If

If zaehler& > ende& Then
MyRpt.MoveLayout = False
MyRpt.PrintSection = False
MyRpt.NextRecord = True
zaehler& = zaehler& + 1
Exit Function
End If

' sooo, die x Positionen sind übersprungen
' wenn aktuelle anzahl der Kopien < als die angegebene Kopienanzahl
If KopieAnzahl& < (KopienEtiketten& - 1) Then
' nicht auf den nächsten Datensatz, aber ausgeben und die
Anzahl der ausgegebenen
' Kopien erhöhen
MyRpt.NextRecord = False
KopieAnzahl& = KopieAnzahl& + 1
Else
' auf den nächsten Datensatz, die Anzahl der Kopien wieder
zurücksetzen, ausgeben,
KopieAnzahl& = 0

zaehler& = zaehler& + 1

If zaehler& > myrec.RecordCount Then
Exit Function
End If

End If

End If

End Function

------------------------------------------
Function Etikett_Setup()

Dim db As Database
Dim myrec As Recordset
Dim eingabe As String

zaehler& = 0
LeerAnzahl& = 0
KopieAnzahl& = 0
abbruch_etikett = False

If daten_uebernehmen = True Then
Exit Function
End If

If caller_etikett = "MENU" Then

If einzeldruck = True Then
einzeldruck = False
Exit Function
End If

einzeldruck = False

Set db = CurrentDb()
Set myrec = db.OpenRecordset("Kopfdaten Medien", dbOpenTable)

eingabe = InputBox$("Anzahl der Kopien je Etikett", , 1)
If Not eingabe = "" Then
KopienEtiketten& = Val(eingabe)
Else
abbruch_etikett = True
Exit Function
End If

eingabe = InputBox$("Zu überspringende Etiketten (< 76)", , 0)
If Not eingabe = "" Then
LeerEtiketten& = Val(eingabe)
Else
abbruch_etikett = True
Exit Function
End If

DoCmd.OpenForm "Etikett Eingabe Start Ende", acNormal, , , ,
acDialog

If LeerEtiketten& < 0 Then LeerEtiketten& = 0
If LeerEtiketten& > 75 Then LeerEtiketten& = 75
If KopienEtiketten& < 1 Then KopienEtiketten& = 1
If start& < 1 Then start& = 0
If ende& > myrec.RecordCount Then ende& = myrec.RecordCount
If start& > ende& Then start& = ende&
Else
MsgBox "Die Etikettenvorschau bzw. der Etikettendruck darf nur aus
dem Menü gestartet werden!", vbExclamation
abbruch_etikett = True
End If

End Function
------------------------------------------
Sub vorschau_etikett()
On Error GoTo vorschau_Err

caller_etikett = "MENU"
DoCmd.OpenReport "Etiketten Kopfdaten Medien", acViewPreview

vorschau_Exit:
Exit Sub

vorschau_Err:
MsgBox "Vorschau abgebrochen", vbExclamation
caller_etikett = ""
Resume vorschau_Exit
End Sub
------------------------------------------
Sub druck_etikett()
On Error GoTo druck_Err

' Just to be sure:
If caller_etikett = "MENU" Then
DoCmd.Close acReport, "Etiketten Kopfdaten Medien"
daten_uebernehmen = True
End If

caller_etikett = "MENU"
' Jetzt fehlt mir hier nur noch die Drucker-Auswahl
DoCmd.OpenReport "Etiketten Kopfdaten Medien", acNormal

daten_uebernehmen = False

druck_Exit:
Exit Sub

druck_Err:
MsgBox "Druck abgebrochen", vbExclamation
caller_etikett = ""
Resume druck_Exit
End Sub
------------------------------------------
Doerthe Weber
2005-04-23 18:41:42 UTC
Permalink
Hallo Volker,
die Variable zaehler wird in der Funktion Ettikett_Setup (beim Report_Open)
initialisiert, aber in der Funktion Ettikett_Layout bei jedem
Detailbereich_Format hochgesetzt. Damit ist sie beim Ausdrucken aus der
Seitenansicht auf jeden Fall nicht mehr auf 0. Wie wäre es, wenn Du die
Variableninitialisierungen für zaeher und eventuell auch LeerAnzahl in einem
Ereignis durchführst, das beim Ausdrucken aus der Seitenansicht noch mal
ausgeführt wird - z.B. das Formatieren des Berichtskopfes?

Gruß
Doerthe
Volker Bock
2005-04-23 19:42:37 UTC
Permalink
Hallo Doerthe,
Post by Doerthe Weber
Hallo Volker,
die Variable zaehler wird in der Funktion Ettikett_Setup (beim
Report_Open) initialisiert, aber in der Funktion Ettikett_Layout bei
jedem Detailbereich_Format hochgesetzt. Damit ist sie beim Ausdrucken
aus der Seitenansicht auf jeden Fall nicht mehr auf 0. Wie wäre es, wenn
Du die Variableninitialisierungen für zaeher und eventuell auch
LeerAnzahl in einem Ereignis durchführst, das beim Ausdrucken aus der
Seitenansicht noch mal ausgeführt wird - z.B. das Formatieren des
Berichtskopfes?
Suuuuper, daaaanke, auf die Idee hätte ich allerdings auch kommen
können, vor allem, da ich ja eigentlich beruflich auch viel
programmiere, allerdings nicht VB. Bei VB bediene ich mich dann doch
sehr oft im Internet oder aus der Hilfe, und beschränke mich dann aufs
mehr oder weniger qualifizierte modifizieren des Gefundenen.
Manchmal ist man aber auch so verbohrt und sieht den Wald vor lauter
Bäumen nicht.

Volker

Loading...