Avatar billede brobaek Nybegynder
25. oktober 2002 - 12:57 Der er 19 kommentarer og
1 løsning

Udskrive fra bestemt bakke (tray)

Vha. ref. til MS Common Dialog kan man få printer-dialogboksen frem. Det virker.

Jeg kan også under "egenskaber" for printeren vælge papirbakke.

Men... hvordan vælger man tray ?

Jeg har flg. kode:

Private Sub CommandButton1_Click()
    Dim dlgTest As New CommonDialog
    dlgTest.ShowPrinter
    ActiveWorkbook.PrintOut
End Sub

Jeg mangler en property a'la dlgTest.Tray eller sådan...

Sp. er altså hvordan jeg udskriver fra en bestem tray!
25. oktober 2002 - 13:10 #1
Det foregår på din printer, så hvis du kan få adgang til den....!
Prøv at indspille en makro, hvor du udskriver manuelt og skifter bakke, så kan du se i koden, om du kan gøre det via VBA. Måske kan du ikke.
Avatar billede brobaek Nybegynder
25. oktober 2002 - 13:13 #2
Man kan ikke (umiddelbart) via VBA. Men måske gennem et API-call...
25. oktober 2002 - 13:21 #3
Ja måske - undersøg evt. mulighederne med denne f.eks. via google

Declare Function PrinterProperties Lib "winspool.drv" Alias "PrinterProperties" (ByVal hwnd As Long, ByVal hPrinter As Long) As Long
25. oktober 2002 - 13:22 #4
eller denne her:

Declare Function PrinterProperties Lib "winspool.drv" Alias "PrinterProperties" (ByVal hwnd As Long, ByVal hPrinter As Long) As Long
Declare Function PrintDlg Lib "comdlg32.dll" Alias "PrintDlgA" (pPrintdlg As PRINTDLG) As Long
25. oktober 2002 - 13:22 #5
hov - du fik lige dem begge i andet hug... den nederste var den nye.
Avatar billede bak Forsker
25. oktober 2002 - 14:16 #6
Da det er individuel fra printer til printer om der er flere tray' eller andre indstillinger findes dette (sansynligvis) ikke i vba.
Du kan dog klare problemet med SENDKEYS
ex.
Sub nyprint()
SendKeys "%F P %R %N"
End Sub

sætter min printer til at printe normalt.
Avatar billede brobaek Nybegynder
25. oktober 2002 - 14:38 #7
Dette virker bare ikke, da regnearket skal distributeres til brugere med forskellige printere etc.
Avatar billede Slettet bruger
26. oktober 2002 - 13:25 #8
Du kunne oprette en kopi af din printer under Indstillinger -> Printere
der som default printede til en bestemt tray.

Du kan så skifte imellem dem med
Application.ActivePrinter = "Printer 1"  'Printer til tray 1
Application.ActivePrinter = "Printer 2"  'Printer til tray 4

Men det er nok ligemeget hvis der er flere forskellige brugere involveret...

Det afhænger også af hvor mange faciliteter printer-driveren stiller til rådighed.
26. oktober 2002 - 15:24 #9
blackadder>> du er nu inde på det helt rigtigt. Alle bruger opretter en printer som hedder det SAMME og som er sat til den rigtige bakke som standard - så skal brobaek kun koncentrere sig om at få siderne ud til printeren, hvilken printer det så er - det er underordnet.
Avatar billede brobaek Nybegynder
26. oktober 2002 - 16:51 #10
Den holder heller ikke, da man ikke kan oprette nye printere gennem excel. Det er heller ikke hensigtsmæssigt, at man pga. et regneark skal oprette kopier af printere...
Avatar billede Slettet bruger
26. oktober 2002 - 17:00 #11
Jeg har haft en lignende problem, med en Excel makro der ligeledes skulle benyttes af flere brugere.

Min erfaring er, at det du prøver på ikke kan lade sig gøre hverken med VBA eller API kald.

Problemet er, at man ikke kan tage højde for at brugerne har forskellige printere. Der findes (såvidt jeg ved) ikke nogen generel måde at håndtere valg af udskriftsbakke på.

Er det ikke muligt bare at lade brugeren vælge bakke når det er nødvendigt ?
26. oktober 2002 - 17:04 #12
brobaek>> Jeg har kigget i arkivet, fordi jeg vidste jeg var været i denne problematik før, og det blev oz løst med oprettelse af printer med specifik opsætning hos hver bruger (ikke via VBA men manuelt). Jeg kan ikke bidrage med yderligere.
Avatar billede brobaek Nybegynder
26. oktober 2002 - 18:24 #13
OK - problemet ved at lave brugeren vælge manuelt er, at der så skal vælges for hvert enkelt sheet i workbooken, i dette tilfælde 3-10 gange (og sådanne ting hader brugere)...

Men en nem (måske) løsning er at lave en ActiveX komponent som kan kontrollere printeren. Jeg skal nok ligge koden her hvis dette lykkedes tilfredsstillende...
Avatar billede brobaek Nybegynder
26. oktober 2002 - 18:25 #14
Det er iøvrigt pudsigt, at noget som er så simpelt i både word og ren vb ikke kan lade sig gøre i Excel... Objectet printer eksisterer slet ikke i excel... Weird at MS ikke har implementeret dette...
26. oktober 2002 - 19:31 #15
Du må gerne vise koden for den rene vb
Avatar billede Slettet bruger
26. oktober 2002 - 20:46 #16
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q179321
http://www.microsoft.com/AccessDev/Articles/GetzCh10.HTM

Her er nogle links som muligvis kan bruges.
De er skrevet til Access, men de kan nok godt bruges i Excel også.
Avatar billede Slettet bruger
26. oktober 2002 - 21:38 #17
Hmmm. Jeg æder mine ord igen.
Jeg har prøvet at få det til at virke uden held.

Jeg kan ikke umiddelbart komme på flere løsningsforslag.
Avatar billede bak Forsker
26. oktober 2002 - 23:45 #18
Jeg har en ide, men det er op til dig at teste den, da jeg har en gammel printer.
I vba under TOOLS/REFERENCES sæt flue ben i  microsoft word object library.
I din kode kan du nu bruge Options.DefaultTrayID
fks.
Sub test()
Options.DefaultTrayID = wdPrinterManualEnvelopeFeed
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
        "HP DeskJet 690C på LPT1:", Collate:=True
End Sub
Avatar billede bak Forsker
27. oktober 2002 - 15:51 #19
Som Blackadder siger: Jeg æder mine ord igen.... :-)
Jeg tror godt du kan glemme min ide.
Avatar billede brobaek Nybegynder
20. november 2002 - 09:26 #20
Lukker og slukker - vender tilbage, hvis jeg finder en løsning...
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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