Avatar billede snowball Novice
13. oktober 2004 - 13:57 Der er 4 kommentarer og
1 løsning

VBA: Indstil paper size på rapporter uden at åbne dem

Hej.

Jeg har problemer med at fastholde paper size på mine rapporter i Access97. Hvis jeg indstiller dem til f.eks. A3 formatet, og så prøver at afvikle applikationen på en anden PC, så bliver formatet automatisk ændret til at være i A4 hvis brugeren har en anden standard printer installeret end den jeg har. Dette sker vel at mærke også selvom den andens standard printer også kan printe i A3!

Jeg har så fundet frem til nedenstående modul som kan sætte formatet på en rapport.

<---Modul start--->

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.Echo False
  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
  DoCmd.Echo True
End Function

<---Modul slut--->

Det virker som sådan også meget godt, men problemet er at min applikation skal køre som en MDE fil, og så går det jo galt når den prøver på at åbne rapport i design view eftersom alle design muligheder er fjernet i en MDE fil.

Så derfor: Kan man gøre noget lignende ovenstående, men blot uden at åbne rapporten i design view? Eller findes den en løsning på problemet med at formatet automatisk ændrer sig når man skifter printer?

På forhånd tak.
13. oktober 2004 - 21:58 #1
Hvilken version (og service pack) kører du og de andre maskiner?

Jeg spørger kun fordi, det er en kendt fejl i Access 2000 (uden service packs) at printerindstillingerne forsvinder, blot man kigger lidt for 'hårdt' på skærmen.

Der er jo ingen grund til at opfinde den dybe tallerken, hvis man bare kan installere en service pack ;o)
Avatar billede snowball Novice
14. oktober 2004 - 08:13 #2
Access er version 97 SR2 og Windows er version 2000 SP4.
14. oktober 2004 - 15:04 #3
ok, så er det ikke det :)
Avatar billede snowball Novice
14. oktober 2004 - 15:17 #4
Desværre ikke. Gid det var så let ;)
Avatar billede snowball Novice
19. oktober 2004 - 09:48 #5
Det er åbenbart ikke sådan lige til at lave :|
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