Avatar billede snowball Novice
07. oktober 2004 - 13:03 Der 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!?

På forhånd tak.
Avatar billede mugs Novice
07. oktober 2004 - 13:31 #1
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.
Avatar billede snowball Novice
07. oktober 2004 - 13:43 #2
Du kan sende det til mail at geertsen dot dk :)
Avatar billede snowball Novice
07. oktober 2004 - 14:08 #3
Nu har jeg så fået lavet mit en query som kan give mig navnene på de ønskede rapporter.

SELECT *
FROM msysobjects
WHERE msysobjects.Name Not Like "MSys*" and msysobjects.Type = -32764

Hvordan får jeg så fat i selve rapporten ud af navnet og så sætter de ønskede indstillinger? (Det er måske det dit eksempel kan vise!?)
Avatar billede fdata Forsker
07. oktober 2004 - 23:00 #4
Lytter med ...
Avatar billede mugs Novice
08. oktober 2004 - 05:09 #5
fdata > Jeg sendte filerne til snowball igår eftermiddag. Glemte at skrive det her, men læg din email, hvis du vil have dem.
Avatar billede fdata Forsker
08. oktober 2004 - 19:41 #6
mugs > Er bare nysgerrig  ;o)
Email: f-data snabela e-mail dot dk
Avatar billede snowball Novice
08. oktober 2004 - 20:28 #7
Jeg kan hurtigt ligge filerne online hvis mugs ikke harn oget imod det!?

Jeg kan dog ikke helt se hvordan de skal hjælpe mig videre med mit problem!?
Avatar billede mugs Novice
08. oktober 2004 - 23:34 #8
snowball > db71 viser da hvordan hiver navnet på rapporten ud af din forespørgsel. Af forskellige grunde ønsker jeg ikke filerne online.
Avatar billede snowball Novice
09. oktober 2004 - 07:05 #9
mugs: Ja, det kan jeg se, men det har jeg jo allerede fundet ud af :)

Synes ikke der er nogen af dem der gør noget med f.eks. PaperSize !?
Avatar billede mugs Novice
09. oktober 2004 - 07:34 #10
snowball > Prøv at se på dette link. Jeg har ikke været nærmere inde og se, om det opfylder dine krav (skal på arbejde):

http://www.microsoft.com/AccessDev/Articles/GetzCh10.HTM#Layout
Avatar billede snowball Novice
12. oktober 2004 - 10:36 #11
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester