Supportnet / Forum / Datenbanken
Seiteneinrichtung über VBA ???
Frage
Hallo !
Ich drucke aus einem Formular heraus einen Bericht.
Das ist auch nicht das Problem, sondern dieses:
Er verliert mir jedesmal wieder die Seiteneinrichtung(5mm Rand, Querformat)ich habe zwar einen Preview- Schalter eingebaut, der es vor dem Drucken ermöglicht die Seite jedesmal neu einzurichten, aber möchte dem User das eigentlich nicht zumuten.
(Warum fragt der Assistant eigentlich wie man das Format haben will (Quer/Längs) wenn er sich dann sowieso nicht daran hält ?
Gibt es da etwas ?
Gruß
Antwort 1 von el_gomero
Hi,
spiel mindestens SP1, besser alle 3 SPs für A2k ein.
Außerdem empfehle ich dir die Tips.
Gruß
Jürgen
spiel mindestens SP1, besser alle 3 SPs für A2k ein.
Außerdem empfehle ich dir die Tips.
Gruß
Jürgen
Antwort 2 von BenztownCitizen
Was soll denn das da oben ???
Ich möchte wissen, wie man die Seiteneinrichtung über VBA von vornherein festlegt, und keine Belehrungen über SP's und Verhaltensregeln in Foren.
Es sollten sich doch bitte nur die Leute melden, die wirklich was von VBA verstehen, und nicht nur irgendwas posten, das man schon hundert mal in diesem Forum gelesen hat.
(Mir ist auch klar, das das Verhalten, die Seiteneinrichtung zu verlieren an 2000 liegt, und mit den entsprechenden SP's zu beheben ist, da mein Frontend aber nicht nur lokal verwendet wird, sondern in der gesamten Firma, muß ich so weit wie möglich sicherstellen, daß der User damit klarkommt. Und das auch ohne das ich jedem die Frage stelle ob er das SPxy eingespielt hat)
Ich möchte wissen, wie man die Seiteneinrichtung über VBA von vornherein festlegt, und keine Belehrungen über SP's und Verhaltensregeln in Foren.
Es sollten sich doch bitte nur die Leute melden, die wirklich was von VBA verstehen, und nicht nur irgendwas posten, das man schon hundert mal in diesem Forum gelesen hat.
(Mir ist auch klar, das das Verhalten, die Seiteneinrichtung zu verlieren an 2000 liegt, und mit den entsprechenden SP's zu beheben ist, da mein Frontend aber nicht nur lokal verwendet wird, sondern in der gesamten Firma, muß ich so weit wie möglich sicherstellen, daß der User damit klarkommt. Und das auch ohne das ich jedem die Frage stelle ob er das SPxy eingespielt hat)
Antwort 3 von el_gomero
was soll das denn???
Wenn dir auch klar ist, daß es am SP liegt, warum fragst du dann? Der Hinweis auf die Tips war deshalb, weil meine Hellseherkugel nicht immer funzt. Zufällig ging sie aber diesmal und ich konnte sehen, daß du A2k benutzt.
Da du meine fachliche Kompetenz aber mit deinem post in Frage stellst, laß ich das mal mit der Antwort wie's ohne SP geht. Du hast hier ja alles schon hundert mal gelesen. Dann denk mal scharf nach, der Link drauf war dann auch oft genug dabei.
regards
Wenn dir auch klar ist, daß es am SP liegt, warum fragst du dann? Der Hinweis auf die Tips war deshalb, weil meine Hellseherkugel nicht immer funzt. Zufällig ging sie aber diesmal und ich konnte sehen, daß du A2k benutzt.
Da du meine fachliche Kompetenz aber mit deinem post in Frage stellst, laß ich das mal mit der Antwort wie's ohne SP geht. Du hast hier ja alles schon hundert mal gelesen. Dann denk mal scharf nach, der Link drauf war dann auch oft genug dabei.
regards
Antwort 4 von Coolpix
hi Sam,
Füge auf dem Button im Formular folgenden Code ein:
Den Berichtsnamen mußt du noch anpassen :)
Feedback fänd ich Klasse !!!
Greetings ;-)
Füge auf dem Button im Formular folgenden Code ein:
DoCmd.OpenReport "DeinBericht", acViewPreview
Report_DeinBericht.Printer.Orientation = acPRORLandscape
Report_DeinBericht.Printer.BottomMargin = 284 '284 Twips = 5mm
Report_DeinBericht.Printer.LeftMargin = 284
Report_DeinBericht.Printer.RightMargin = 284
Report_DeinBericht.Printer.TopMargin = 284
DoCmd.Maximize 'Berichtsfenster Maximieren (dann muß im Bericht bei 'Report_Close ()' DoCmd.Restore stehen
Den Berichtsnamen mußt du noch anpassen :)
Feedback fänd ich Klasse !!!
Greetings ;-)
Antwort 5 von Coolpix
hallo nochmal,
übrigens....
die auf el_gomero's Seite verlinkte http://www.freeaccess.de/knowhow.asp
kann ich jedem Access-Anfänger nur ans Herz legen.
Das ist wirklich eine riesen Sammlung von Anwendungsbeispielen unter einer gelungenen Oberfläche.
übrigens heiß Support Unterstützung und nicht Belehrung ! :)
Greetings ;-)
übrigens....
die auf el_gomero's Seite verlinkte http://www.freeaccess.de/knowhow.asp
kann ich jedem Access-Anfänger nur ans Herz legen.
Das ist wirklich eine riesen Sammlung von Anwendungsbeispielen unter einer gelungenen Oberfläche.
übrigens heiß Support Unterstützung und nicht Belehrung ! :)
Greetings ;-)
Antwort 6 von BenztownCitizen
Hallo !
Ja, das ist mir schon klar, aber wenn man ein Problem postet, erwartet man eine Antwort, und keinen Link sondern eine Lösung...
Und wenn man dann meint, das da eine gescheite Antwort kommt, und man klickt den Link an und die ersten Zeilen die man liest sind diese:
Und dann noch 10 nicht enden wollende "Gebote des Forums"...
Naja, war vielleicht etwas überreagiert, tut mir Leid wenn es etwas ruppig rübergekommen ist... Gegessen.
Nun aber zum Thema:
Also, bei dem Einbinden Deines Codes, bringt er mir die Meldung, Variable nicht definiert, und Markiert beim debuggen die 2. Zeile und er meint wahrscheinlich das: acPRORLandscape.
Ich wollte mich informieren und in der Objektbibliothek nachschauen, aber da finde ich diese Funktion nicht.
Muß man da eine spezielle Bibliothek einbinden ?
Gruß
Ja, das ist mir schon klar, aber wenn man ein Problem postet, erwartet man eine Antwort, und keinen Link sondern eine Lösung...
Und wenn man dann meint, das da eine gescheite Antwort kommt, und man klickt den Link an und die ersten Zeilen die man liest sind diese:
Zitat:
Anfänger stellen in Access-Foren häufig die gleichen Fragen. Um nicht immer wieder das gleiche tipp....
Anfänger stellen in Access-Foren häufig die gleichen Fragen. Um nicht immer wieder das gleiche tipp....
Und dann noch 10 nicht enden wollende "Gebote des Forums"...
Naja, war vielleicht etwas überreagiert, tut mir Leid wenn es etwas ruppig rübergekommen ist... Gegessen.
Nun aber zum Thema:
Also, bei dem Einbinden Deines Codes, bringt er mir die Meldung, Variable nicht definiert, und Markiert beim debuggen die 2. Zeile und er meint wahrscheinlich das: acPRORLandscape.
Ich wollte mich informieren und in der Objektbibliothek nachschauen, aber da finde ich diese Funktion nicht.
Muß man da eine spezielle Bibliothek einbinden ?
Gruß
Antwort 7 von el_gomero
@BenztownCitizen
akzeptiert - hätte auch den Punkt in den Tips dazu schreiben sollen.
Donkarl schreibt zu deinem Problem, daß der Bug in der Objektnamen-Autokorrektur begründet liegt. Er empfiehlt dazu 2 Seiten der KB, falls das SP1 nicht eingespielt werden kann
http://support.microsoft.com/?kbid=508992
http://support.microsoft.com/?kbid=245407
Wenn du seine Ausführungen selbst lesen willst:
www.donkarl.com 7.15.
Würde aber trotzdem jedem empfehlen die SPs einzuspielen.
ciao
Jürgen
akzeptiert - hätte auch den Punkt in den Tips dazu schreiben sollen.
Donkarl schreibt zu deinem Problem, daß der Bug in der Objektnamen-Autokorrektur begründet liegt. Er empfiehlt dazu 2 Seiten der KB, falls das SP1 nicht eingespielt werden kann
http://support.microsoft.com/?kbid=508992
http://support.microsoft.com/?kbid=245407
Wenn du seine Ausführungen selbst lesen willst:
www.donkarl.com 7.15.
Würde aber trotzdem jedem empfehlen die SPs einzuspielen.
ciao
Jürgen
Antwort 8 von Coolpix
hallo,
hast du den Berichtnamen geändert ??
DeinBericht => Bericht1 oderso...
Greetings ;-)
hast du den Berichtnamen geändert ??
DeinBericht => Bericht1 oderso...
Greetings ;-)
Antwort 9 von BenztownCitizen
Hy !
Ja, das habe ich, überall wo DeinBericht steht, habe ich das durch den Berichtsnamen ersetzt, er öffnet mir auch den Bericht, aber wenn es dann mit der Einrichtung weitergehen soll dann steigt er aus.
Sorry das ich mich jetzt erst melde, aber ich komme zur Zeit kaum ins SN, da ständig ein Server- Error vorliegt...nerv.
Gruß
Ja, das habe ich, überall wo DeinBericht steht, habe ich das durch den Berichtsnamen ersetzt, er öffnet mir auch den Bericht, aber wenn es dann mit der Einrichtung weitergehen soll dann steigt er aus.
Sorry das ich mich jetzt erst melde, aber ich komme zur Zeit kaum ins SN, da ständig ein Server- Error vorliegt...nerv.
Gruß
Antwort 10 von BenztownCitizen
Hy nochmal !
Unter anderem kommt auch die Meldung, das er die Methode nicht kennt, und setzt dabei den Focus auf .Printer (Bibliothek ?)
Gruß
Unter anderem kommt auch die Meldung, das er die Methode nicht kennt, und setzt dabei den Focus auf .Printer (Bibliothek ?)
Gruß
Antwort 11 von Coolpix
hallo Sam,
sorry aber der Präfix 'Report_' funktionier nur, wenn der Bericht im Projekt-Explorer deiner DB angezeigt wird.
Du mußt 'Report_' durch 'Reports!' ersetzen !
alles ander sind Standart-Eigenschaften (wenn acuh dürftig oder garnicht dokumentiert) eines Berichts.
Feedback fänd ich Klasse !!!
Greetings ;-)
sorry aber der Präfix 'Report_' funktionier nur, wenn der Bericht im Projekt-Explorer deiner DB angezeigt wird.
Du mußt 'Report_' durch 'Reports!' ersetzen !
alles ander sind Standart-Eigenschaften (wenn acuh dürftig oder garnicht dokumentiert) eines Berichts.
Feedback fänd ich Klasse !!!
Greetings ;-)
Antwort 12 von BenztownCitizen
Hy !
Das hatte ich auch schon gemacht, aber er bringt immer: Variable nicht definiert.
Hier mal der Code, habe die vorherigen Sachen mal auskommentiert, repname wird mit dem Funktionsaufruf als String übergeben.
Das hatte ich auch schon gemacht, aber er bringt immer: Variable nicht definiert.
Hier mal der Code, habe die vorherigen Sachen mal auskommentiert, repname wird mit dem Funktionsaufruf als String übergeben.
Public Function printdialog(Optional rep As String) 'printdialog mit Reportname als Übergabeparameter
Dim repname As String, text As String, weiter As Byte
If (functions.isformopen("frmDevices") = True) Or (functions.isformopen("frmExpired") = True) Then
repname = rep
GoTo OK1
End If
If IsNull(rep) Then Exit Function
repname = "repPrint" & rep
OK1: text = "Check if the printer is ready and press <OK>."
If MsgBox(text, 65, "Print") = vbOK Then
'DoCmd.OpenReport repname, acNormal
DoCmd.OpenReport "repname", acViewPreview
Reports!repname.Printer.Orientation = acPRORLandscape
Reports!repname.Printer.BottomMargin = 284 '284 Twips = 5mm
Reports!repname.Printer.LeftMargin = 284
Reports!repname.Printer.RightMargin = 284
Reports!repname.Printer.TopMargin = 284
DoCmd.Maximize 'Berichtsfenster Maximieren (dann muß im Bericht bei 'Report_Close ()' DoCmd.Restore stehen
'MsgBox "The print is in process.", 64, "Print"
End If
End Function
Antwort 13 von Coolpix
hi,
ja jetzt...
der reportname beim Aufruf ist keine String-Variable,
da muß schon der echte Name stehen ....!
also
and so on ...
in deinem code versucht VBA der Report "repname"
zu öffnen und den kann's ja nicht finden.
Feedback fänd ich Klasse !!!
Greetings ;-)
ja jetzt...
der reportname beim Aufruf ist keine String-Variable,
da muß schon der echte Name stehen ....!
also
Reports!repPrint.Printer.Orientation = acPRORLandscape
and so on ...
in deinem code versucht VBA der Report "repname"
zu öffnen und den kann's ja nicht finden.
Feedback fänd ich Klasse !!!
Greetings ;-)
Antwort 14 von BenztownCitizen
Hy !
Ich muß aber eine Lösung mit einer Variablen finden, da die Funktion "printdialog" als Reportname verschiedene Name übergeben bekommt.
Einmal(wenn Druck nicht über Devices oder Expired aufgerufen wird) wird nur der Name Devices übergeben, deswegen muß ich noch "repPrint & rep" anhängen.
Der Aufruf hat ja vorher auch über die Variable funktioniert, (siehe Zeile: 'DoCmd.OpenReport repname, acNormal)
da hat er die Seite gedruckt !?!
Gruß
Ich muß aber eine Lösung mit einer Variablen finden, da die Funktion "printdialog" als Reportname verschiedene Name übergeben bekommt.
Einmal(wenn Druck nicht über Devices oder Expired aufgerufen wird) wird nur der Name Devices übergeben, deswegen muß ich noch "repPrint & rep" anhängen.
Der Aufruf hat ja vorher auch über die Variable funktioniert, (siehe Zeile: 'DoCmd.OpenReport repname, acNormal)
da hat er die Seite gedruckt !?!
Gruß
Antwort 15 von Coolpix
hy!
das funktioniert auch nur, weil im DoCmd-Befehl der Reportname als String behandelt wird.
Bei der Bergabe von Eigenschaften funzt das nicht.
Wenn der Report existiert, also nicht zur Laufzeit generiert wird, dann kannst du auch die Parameter im 'Report_Open()' - Ereignis setzen in der Form:
Feedback fänd ich Klasse !!!
Greetings ;-)
das funktioniert auch nur, weil im DoCmd-Befehl der Reportname als String behandelt wird.
Bei der Bergabe von Eigenschaften funzt das nicht.
Wenn der Report existiert, also nicht zur Laufzeit generiert wird, dann kannst du auch die Parameter im 'Report_Open()' - Ereignis setzen in der Form:
Private Sub Report_Open(Cancel As Integer)
Me.Printer.Orientation = acPRORLandscape
Me.Printer.BottomMargin = 284 '284 Twips = 5mm
Me.Printer.LeftMargin = 284
Me.Printer.RightMargin = 284
Me.Printer.TopMargin = 284
End Sub
Feedback fänd ich Klasse !!!
Greetings ;-)
Antwort 16 von Benztown Citizen
Hy !
Hab es so abgeändert:
Wenn ich OptionExplicit ausschalte, dann kommt die Meldung mit der nicht deklarierten Variablen nicht mehr, dafür aber sagt er das der Reportname falsch geschrieben oder nicht geöffnet ist, obwohl der Bericht aber geöffnet wird, und wenn ich mir im Debugger den Wert der Variablen "repname" anzeigen lasse, hat diese Variable den Korrekten Reportnamen zum Inhalt.
Gruß
Hab es so abgeändert:
Public Function printdialog(Optional rep As String) 'printdialog mit Reportname als Übergabeparameter
Dim repname As String, text As String, weiter As Byte
If (functions.isformopen("frmDevices") = True) Or (functions.isformopen("frmExpired") = True) Then
repname = rep
GoTo OK1
End If
If IsNull(rep) Then Exit Function
repname = "repPrint" & rep
OK1: text = "Check if the printer is ready and press <OK>."
If MsgBox(text, 65, "Print") = vbOK Then
DoCmd.OpenReport repname, acViewPreview
Reports!repname.Printer.Orientation = acPRORLandscape
Reports!repname.Printer.BottomMargin = 284 '284 Twips = 5mm
Reports!repname.Printer.LeftMargin = 284
Reports!repname.Printer.RightMargin = 284
Reports!repname.Printer.TopMargin = 284
DoCmd.Maximize 'Berichtsfenster Maximieren (dann muß im Bericht bei 'Report_Close ()' DoCmd.Restore stehen
End If
End Function Wenn ich OptionExplicit ausschalte, dann kommt die Meldung mit der nicht deklarierten Variablen nicht mehr, dafür aber sagt er das der Reportname falsch geschrieben oder nicht geöffnet ist, obwohl der Bericht aber geöffnet wird, und wenn ich mir im Debugger den Wert der Variablen "repname" anzeigen lasse, hat diese Variable den Korrekten Reportnamen zum Inhalt.
Gruß
Antwort 17 von BenztownCitizen
Hy
Jetzt haben sich unsere Antworten wohl überschnitten, ich probier jetzt mal die Lösung beim Report öffnen, da ja nicht der Report zur Laufzeit, sondern nur die Datenherkunft, generiert wird müßte es so ja wohl gehen.
Gruß
Jetzt haben sich unsere Antworten wohl überschnitten, ich probier jetzt mal die Lösung beim Report öffnen, da ja nicht der Report zur Laufzeit, sondern nur die Datenherkunft, generiert wird müßte es so ja wohl gehen.
Gruß
Antwort 18 von BenztownCitizen
Hy
So geht es auch nicht, er sagt immer Methode oder Datenobjekt nicht gefunden, und hinterlegt das .Printer blau.
Und wenn ich das Me. eingebe findet er auch nur print, und kein Printer.
Gruß
So geht es auch nicht, er sagt immer Methode oder Datenobjekt nicht gefunden, und hinterlegt das .Printer blau.
Und wenn ich das Me. eingebe findet er auch nur print, und kein Printer.
Gruß
Antwort 19 von Coolpix
hi nochmal,
die Klasse Printer ist ein Bestandteil von Access selbst.
Wenn ich im Code des Berichts me.pri eingebe ist es das 3. Wort in der Liste.
wenn das bei dir nicht so ist ...
dannbinichmitmeinemlateinamende ... sorry
Greetings ;-)
die Klasse Printer ist ein Bestandteil von Access selbst.
Wenn ich im Code des Berichts me.pri eingebe ist es das 3. Wort in der Liste.
wenn das bei dir nicht so ist ...
dannbinichmitmeinemlateinamende ... sorry
Greetings ;-)
Antwort 20 von BenztownCitizen
Hy !
Also hier im Geschäft habe ich Acces 2000, und er bringt mir bei Me.pri... nur print, PrintCount und PrintSection.
Was für Lib's hast Du denn eingebunden, vielleicht muß man das bei einer älteren Version. Muß ich nachher mal Zuhause probieren, da habe ich Office XP.
Gruß und Dank
Also hier im Geschäft habe ich Acces 2000, und er bringt mir bei Me.pri... nur print, PrintCount und PrintSection.
Was für Lib's hast Du denn eingebunden, vielleicht muß man das bei einer älteren Version. Muß ich nachher mal Zuhause probieren, da habe ich Office XP.
Gruß und Dank
Antwort 21 von Coolpix
hi,
ich hab nur VBA und MS-Access eingebunden.
Greetings ;-)
ich hab nur VBA und MS-Access eingebunden.
Greetings ;-)
Antwort 22 von El Bobbele
Hallo alle zusammen!
Ich habe zwar nicht alles gelesen, aber kann es sein, dass diese Syntax gesucht wird?
Wenn ja, dann kann das alles etwas übersichtlicher gestaltet werden. Am besten alles in einen With-Block packen, dann muss nicht soviel getippt/gelesen werden:
Diese Lösung funktioniert jedoch in Access 2000 nicht, das Printer-Objekt wurde erst später eingeführt. Teile davon wie Orientation müssen über Reports(repname).PrtDevMode eingestellt werden, was aber deutlich mühsamer ist, als eine simple Eigenschaft zu setzen und nicht unbedingt zu empfehlen ist. Ich bin mir nicht sicher, aber es kann gut sein, dass diese Eigenschaft nur in der Entwurfsansicht des Berichts eingestellt werden kann, womit der Einsatz in MDE-Dateien ausfällt.
Auch wenn du es nicht gerne hörst: Ich schliesse mich el_gomero an und rate dir DRINGENDST, das aktuelle Service Pack auf den betroffenen Clients zu installieren.
Gruss
El Bobbele
Ich habe zwar nicht alles gelesen, aber kann es sein, dass diese Syntax gesucht wird?
Reports(repname).Printer.Orientation = acPRORLandscapeWenn ja, dann kann das alles etwas übersichtlicher gestaltet werden. Am besten alles in einen With-Block packen, dann muss nicht soviel getippt/gelesen werden:
With Reports(repname).Printer
.Orientation = acPRORLandscape
.BottomMargin = 284 '284 Twips = 5mm
.LeftMargin = 284
.RightMargin = 284
.TopMargin = 284
End With
Diese Lösung funktioniert jedoch in Access 2000 nicht, das Printer-Objekt wurde erst später eingeführt. Teile davon wie Orientation müssen über Reports(repname).PrtDevMode eingestellt werden, was aber deutlich mühsamer ist, als eine simple Eigenschaft zu setzen und nicht unbedingt zu empfehlen ist. Ich bin mir nicht sicher, aber es kann gut sein, dass diese Eigenschaft nur in der Entwurfsansicht des Berichts eingestellt werden kann, womit der Einsatz in MDE-Dateien ausfällt.
Auch wenn du es nicht gerne hörst: Ich schliesse mich el_gomero an und rate dir DRINGENDST, das aktuelle Service Pack auf den betroffenen Clients zu installieren.
Gruss
El Bobbele
Antwort 23 von BenztownCitizen
Hallo !
@ El Bobbele:
Ich bin nach Hause gekommen, da habe ich XP und Office XP, und da lief es, wie ich es mir schon fast dachte (liegt wahrscheinlich an der Office 10.0).
Was die SP- Geschichte angeht, so habe ich da nicht viel auszurichten, da ich hier nur ne Diplomarbeit mache, und die Admins (Daimler Chrysler) es wohl nicht für nötig halten, das 2000 Upzudaten. Deswegen wollte ich halt ne Lösung die nachher unter allen Umständen läuft, wenn ich hier wieder raus bin.
@ Coolpix:
Vielen Dank, nochmal für Deine Hilfe, also bei mir zu Hause läufts jetzt, gut zu wissen wie es funktioniert.
Vielen Dank alle zusammen !
Gruß BC
@ El Bobbele:
Ich bin nach Hause gekommen, da habe ich XP und Office XP, und da lief es, wie ich es mir schon fast dachte (liegt wahrscheinlich an der Office 10.0).
Was die SP- Geschichte angeht, so habe ich da nicht viel auszurichten, da ich hier nur ne Diplomarbeit mache, und die Admins (Daimler Chrysler) es wohl nicht für nötig halten, das 2000 Upzudaten. Deswegen wollte ich halt ne Lösung die nachher unter allen Umständen läuft, wenn ich hier wieder raus bin.
@ Coolpix:
Vielen Dank, nochmal für Deine Hilfe, also bei mir zu Hause läufts jetzt, gut zu wissen wie es funktioniert.
Vielen Dank alle zusammen !
Gruß BC

