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?
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....).
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.
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)
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 ?
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
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.
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
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
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
Hi Lentte, Har du nogen sinde fået løst dit problem med fælles standard printer, og udskrivning til mailbox? :-) Mik
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.