Supportnet Computer
Planet of Tech

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

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)

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

Antwort 4 von Coolpix

hi Sam,

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 ;-)

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:

Zitat:

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

Antwort 8 von Coolpix

hallo,
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ß

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ß

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 ;-)

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.


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

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ß

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:


 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:


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ß

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ß

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 ;-)

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

Antwort 21 von Coolpix

hi,

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?

Reports(repname).Printer.Orientation = acPRORLandscape


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:


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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: