07. oktober 2004 - 13:03Der er
10 kommentarer og 1 løsning
VBA: Sæt printer og paper size på rapporter
Hej.
Jeg vil under opstart af min Access 97 frontend gerne sætte printer og paper size på en række rapporter (ikke alle!). Helt konkret vil jeg på rapporterne gerne sætte printeren til default printeren i Windows og sætte paper size til A3 (297mm x 420mm)
Hvordan gør jeg nemmest det? Reports objektet indeholder jo kun de åbne rapporter. Der står så dog i hjælpen at man "To list all reports in the database, whether open or closed, enumerate the Documents collection of the reports' Container object", men det er jeg ikke lige helt med på hvordan man gør!?
Denne giver dig navnene på alle tabeller i din database:
SELECT msysobjects.Name FROM msysobjects WHERE Name Not Like "MSys*" AND Type=1;
Måske kan du få rapporterne ved at ændre typen.
Der findes dog en funktion, der i Access sætter dig i stand til at vælge en printer i en combo blandt alle printere tilkoblet din PC. Det må så være muligt, at overføre denne tekststreng fra comboen til din rapport.
Der er ligeledes en funktion, der styrer din printer m.h.t. papirretning m.v.
Hvis du lægger din e-mail, kan jeg sende dem, når jeg er hjemme fra arbejde.
Ved hjælp af mugs' link og en anden side, så fik jeg lavet nedenstående kode:
Type str_DEVMODE RGB As String * 94 End Type
Type type_DEVMODE strDeviceName As String * 16 intSpecVersion As Integer intDriverVersion As Integer intSize As Integer intDriverExtra As Integer lngFields As Long intOrientation As Integer intPaperSize As Integer intPaperLength As Integer intPaperWidth As Integer intScale As Integer intCopies As Integer intDefaultSource As Integer intPrintQuality As Integer intColor As Integer intDuplex As Integer intResolution As Integer intTTOption As Integer intCollate As Integer strFormName As String * 16 lngPad As Long lngBits As Long lngPW As Long lngPH As Long lngDFI As Long lngDFr As Long End Type
Public Function SetPaperSize(strName As String) Dim rpt As Report Dim strDevModeExtra As String Dim DevString As str_DEVMODE Dim DM As type_DEVMODE
DoCmd.OpenReport strName, acDesign 'Opens report in Design view. Set rpt = Reports(strName)
If Not IsNull(rpt.PrtDevMode) Then strDevModeExtra = rpt.PrtDevMode DevString.RGB = strDevModeExtra LSet DM = DevString DM.lngFields = DM.lngFields Or DM.intOrientation 'Initialize fields. DM.intPaperSize = 8 'A3 (297 x 420 mm) LSet DevString = DM 'Update property. Mid(strDevModeExtra, 1, 94) = DevString.RGB rpt.PrtDevMode = strDevModeExtra DoCmd.Save acReport, strName DoCmd.Close acReport, strName End If
End Function
Den sætter godt nok ikke printeren, men det var også paper size jeg havde de største problemer med eftersom den kunne finde på at ændre sig hvis den printer der var valgt som standard ikke kunne skrive ud i A3.
Tak for hjælpen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.