Avatar billede lentte Nybegynder
31. januar 2003 - 14:41 Der er 19 kommentarer

Excelfil husker printer properties

Mit problem er følgende:

Når man i en Excelfil ændrer noget i Print -> Properties (fx sætter den til at printe ud i Landscape eller hæfte siderne), så husker filen disse indstillinger til næste gang filen printes. Den husker det kun, hvis det er min standardprinter, jeg har brugt.

Dette selvom jeg har lukket Excel (og pc'en for den sags skyld) i mellemtiden.

Er der nogen, der kender en måde at cleare dette, gerne via VBA?
Avatar billede martin_moth Mester
31. januar 2003 - 14:50 #1
Du kan skrive de øndskede indstillinger til reg.databasen eller bare til en text-fil, og så indlæse dem med macroen.

Når du afvikler din macro, bliver printerindstillingerne så som du skrev dem i reg eller i text-filen :o)
Avatar billede martin_moth Mester
31. januar 2003 - 14:58 #2
Eller du kan lade være med at skive det nogen steder, og bare "hardcode" det ind i macroen - lav en macro, der sætter pagesetup som du ønsker, fx

  With ActiveSheet.PageSetup
        .CenterFooter = "Footertekst"
        .RightFooter = "Headertekst"
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA4
    End With

Hvis det er printerspecifikt, kan du bruge kode i retning af

  ActiveWindow.SelectedSheets.PrintOut Copies:=2, Collate:=True

osv - de egenskaber du vil pille ved afhænger af din printer
Avatar billede lentte Nybegynder
31. januar 2003 - 15:14 #3
Godt forslag, men det er en løsning, der skal bruges af flere personer, som hver skal kunne printe til deres egen mailbox på forskellige printere. Derfor har jeg brug for at nulstille, hvad arket har husket om forrige print og blot bruge hver persons standardprinterindstillinger (sådan troede jeg faktisk Excel fungere i forvejen. Den husker jo normalt ikke, hvilken printer du har printet til sidst gang, du printede dokumentet....).
Avatar billede bak Forsker
31. januar 2003 - 15:47 #4
En mulighed er at oprette et helt friskt regneark.
Slå makrooptageren til.
Gå ind i File / Pagesetup og tryk kun på Ok -knappen.
Afslut makrooptageren

Du har nu en makro der en lavet til standardprinter uden andet slinger.

Tag nu denne kode og kopier den ind i ThisWorkBook
Omdøb koden til Private Sub Workbook_Open()
Nu vil den køre en "reset" hver gang regnearket åbnes.
Avatar billede lentte Nybegynder
31. januar 2003 - 16:04 #5
Virker heller ikke - er prøvet. Den optager IKKE, hvad der er "bag" properties knappen.
Avatar billede bak Forsker
31. januar 2003 - 16:11 #6
Ok lentte, så har du et problem der ikke kan løses med alm. VBA (hvis du skal om bag den knap).
For at komme "derom" skal du nok bruge nogle API-kald og dem kender jeg desværre ikke nok til.
Avatar billede martin_moth Mester
31. januar 2003 - 16:26 #7
Jamen, det kan da løses med en kombination af en macro og evt. noget api

Med API'et får du navnet på brugeren (alternativt kan man taste sit brugernavn ind)

Herefter har hver bruger skrevet deres personlige indstillinger i den samme textfil. Macroen åbner textfilen, og slår op under den aktuelle bruger. Læser indstillingerne, og anvender dem. Voilá. Der er besvarede spørgsmål omkring alt det du skal bruge, både API-kald der henter brugernavn (hvis man da ikke bare skal indtaste det - så slipper du for API),samt hvordan man læser/skriver til en fil fra VBA i excel :o)
Avatar billede bak Forsker
31. januar 2003 - 16:36 #8
Martin-> jeg har forstået det således at det er printerens egne indstillinger har skal ind i ("bag" properties knappen), altså et step længere end bare excels printerinstillinger.
Hvordan vil du få fat i disse indstillinger, der jo varierer fra printertype til printertype ?
Avatar billede martin_moth Mester
31. januar 2003 - 18:37 #9
Med den løsning jeg foreslår, kan brugeren bl.a. sætte papiret til landscape osv, som der jo er nævnt i spørgsmålet. Men måske har jeg misforstået...
Avatar billede bak Forsker
31. januar 2003 - 18:58 #10
Du har helt ret Martin, det kan man jo også med det jeg skrev (egentlligt meget lig dit første forslag), men det jo rigtigt at hvis man går ind i printerens egne properties, så kan det også sættes der. Jeg ved ikke om der "overruler" excel-indstillingerne
Avatar billede lentte Nybegynder
03. februar 2003 - 09:04 #11
Det jeg oprindeligt gerne ville vide var, hvor (i filen / arket) Excel husker disse printerindstillinger, og om man så kan nulstille dette....
Avatar billede bak Forsker
03. februar 2003 - 09:24 #12
lennte-> hvad er det du ændrer bag properties ?
Avatar billede lentte Nybegynder
03. februar 2003 - 10:12 #13
Vi er flere om at bruge og udskrive de samme Excelfiler. På de printere vi bruger har vi hver vores egen mailbox (med hver sit nummer), som vi udskriver til. Dette sættes i printerens properties som standard. Excel husker imidlertid, hvilken mailbox, filen sidst blev udskrivet til. Så har jeg udskrvet til min mailbox på printeren og en anden tager filen frem, bliver den automatisk udskrvet til min mailbox, med mindre den anden aktivt går ind i Properties og vælger sin egen mailbox... Hvad vi ønsker den skal gøre er at udskrive med hver persons egne indstillinger, uanset hvordan det blev udskrevet sidst.
Avatar billede hcars Novice
26. marts 2003 - 16:47 #14
En print-makro for hver bruger med tilhørende knapper på ark eller i en værktøjslinie.
Avatar billede lentte Nybegynder
26. marts 2003 - 17:29 #15
Umuligt med alle de brugere, vi har. Vi arbejder i stedet for med en løsning, hvor brugerne får installeret den samme printer og der via kode ved udprint så skiftes til denne printer og så tilbage til deres normale printer. Derved nulstilles evt. 'huskede' indstillinger
Avatar billede mip Nybegynder
06. maj 2003 - 22:57 #16
Hi lentte,
Hvis jeg ikke husker helt galt er i nu gået over til w2k, her har brugerne mulighed for at indstille deres lokal printer, så hvis man kører med en mailboks printer og en standard printer, vil det at skifte printer ved udskrift måske løse dit problem, da mailboks printeren så kan sættes op til den enkelte brugers mailboks.
Her er et par gode links, at arbejde vidre med " www.mvps.org/vb/ " og " http://pubs.logicalexpressions.com/Pub0009/LPMArticle.asp?ID=183 "
Håber det hjælper dig videre.
:-) Mik Agergård
Avatar billede mip Nybegynder
06. maj 2003 - 22:58 #17
Hi lentte,
Jeg glemte at spørge dig, hvad sagde Microsoft til dit problem?
Avatar billede mip Nybegynder
16. maj 2003 - 00:42 #18
Hi Lentte,

Jeg har fundet på nettet, og modificeret det lidt, måske kan du bruge det.

Option Explicit

Public Const PRINTER_ENUM_CONNECTIONS = &H4
Public Const PRINTER_ENUM_LOCAL = &H2

Public Type PRINTER_INFO_1
  flags As Long
  pDescription As String
  pName As String
  pComment As String
End Type

Public Type PRINTER_INFO_4
  pPrinterName As String
  pServerName As String
  Attributes As Long
End Type

Public Declare Function EnumPrinters Lib "winspool.drv" Alias _
  "EnumPrintersA" (ByVal flags As Long, ByVal name As String, _
  ByVal Level As Long, pPrinterEnum As Long, ByVal cdBuf As Long, _
  pcbNeeded As Long, pcReturned As Long) As Long
Public Declare Function PtrToStr Lib "kernel32" Alias "lstrcpyA" _
  (ByVal retval As String, ByVal Ptr As Long) As Long
Public Declare Function StrLen Lib "kernel32" Alias "lstrlenA" _
  (ByVal Ptr As Long) As Long

Function EnumeratePrinters4() As Collection

'This is the enumeration of the printers bit
'Code has all been nicked from
'Microsoft KnowledgeBase article Q166008
'Returns a collection of all printers installed
'on the local PC

Dim success As Boolean, cbRequired As Long, cbBuffer As Long
Dim Buffer() As Long, nEntries As Long
Dim I As Long, pName As String, SName As String
Dim Attrib As Long, Temp As Long
Dim strPrinters As String

  cbBuffer = 3072
 
  ReDim Buffer((cbBuffer \ 4) - 1) As Long
 
  success = EnumPrinters(PRINTER_ENUM_CONNECTIONS Or _
                          PRINTER_ENUM_LOCAL, _
                          vbNullString, _
                          4, _
                          Buffer(0), _
                          cbBuffer, _
                          cbRequired, _
                          nEntries)
  If success Then
      If cbRequired > cbBuffer Then
          cbBuffer = cbRequired
          Debug.Print "Buffer too small. Trying again with " & _
          cbBuffer & " bytes."
          ReDim Buffer(cbBuffer \ 4) As Long
          success = EnumPrinters(PRINTER_ENUM_CONNECTIONS Or _
                                  PRINTER_ENUM_LOCAL, _
                                  vbNullString, _
                                  4, _
                                  Buffer(0), _
                                  cbBuffer, _
                                  cbRequired, _
                                  nEntries)
          If Not success Then
              Debug.Print "Error enumerating printers."
              Exit Function
          End If
      End If
     
      Dim colPrinters As Collection
     
      Set colPrinters = New Collection
     
      For I = 0 To nEntries - 1
          pName = Space$(StrLen(Buffer(I * 3)))
          Temp = PtrToStr(pName, Buffer(I * 3))
          SName = Space$(StrLen(Buffer(I * 3 + 1)))
          Temp = PtrToStr(SName, Buffer(I * 3 + 1))
          Attrib = Buffer(I * 3 + 2)
          colPrinters.Add pName
      Next I
  Else
      Debug.Print "Error enumerating printers."
  End If
 
  Set EnumeratePrinters4 = colPrinters

End Function

Public Function GetFullPrinterName(strQName As String) As String
Dim strPrinter As String
Dim varPrinter As Variant
Dim colPrinters As Collection
Dim iPNum As Integer
On Error GoTo GetFullPrinterName_Err

  iPNum = 0
  'Get a list of installed printers
  Set colPrinters = EnumeratePrinters4()
 
  'Find the specific printer we want
  'Looks for a particular set of characters that we know
  'will be in the printer name if its the one we want
  For Each varPrinter In colPrinters
      If InStr(1, varPrinter, strQName) Then
          strPrinter = varPrinter
          Exit For
      End If
  Next
 
  'Report back if there's no hit
  If strPrinter = "" Then
      MsgBox "Sorry, We were unable to find the appropriate printer.", vbInformation, "Print"
      Exit Function
  End If
 
  'Otherwise try to point to the new printer
  ActivePrinter = strPrinter & " på ne" & Format(iPNum, "00") & ":"
  GetFullPrinterName = ActivePrinter
  iPNum = 10

Exit_Here:
  Exit Function
 
GetFullPrinterName_Err:
  iPNum = iPNum + 1
  If iPNum > 10 Then
      MsgBox "Error Number: " & Err.Number & vbCrLf & _
              "Description: " & Err.Description
      GoTo Exit_Here
  Else
      Resume
  End If

End Function



Sub ChangeActivePrinter()
'This macro change active printer to Canon LBP-1260.
' Modified 16/05/2003 by Mik Agergaard

  Static x As Integer
  Dim Cancel As Boolean
  Dim defaultPrinter As String
  Dim newPrinter As String
  On Error GoTo Errhandler
 
  'Save the current printer assignment
  defaultPrinter = Application.ActivePrinter
 
  'Try to set the printer to the main lobby Canon LBP-1260.
  newPrinter = GetFullPrinterName("pcl")
 
  'If the desired printer could not be found, leave.
  If newPrinter = "" Then
      Exit Sub
  End If
  ActivePrinter = newPrinter
 
  'Unmark colate in printdialog
    'If x = 2 Then
    '    x = 1
    '    Cancel = True
    '    Exit Sub
    'End If
    'x = 1
    'Application.SendKeys "{TAB}"
    'Application.SendKeys "s"
    'x = 2
   
    'Shows Print dialog
    Application.Dialogs(xlDialogPrint).Show
 
  'reset the printer back to the default
  Application.ActivePrinter = defaultPrinter
 
  GoTo ExitPoint
 
Errhandler:

  MsgBox "Write down this message and notify your system administrator:" & vbCrLf & _
      Err.Number & vbCrLf & Err.Description
  Resume Next
 
ExitPoint:
End Sub
Avatar billede mip Nybegynder
07. november 2004 - 20:19 #19
Hi Lentte,
Har du nogen sinde fået løst dit problem med fælles standard printer, og udskrivning til mailbox?
:-) Mik
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
Stort udvalg af Excel kurser til alle niveauer og jobfunktioner

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