22. november 2004 - 15:38Der er
21 kommentarer og 4 løsninger
Makro til udskrift
Hej
Jeg er ved at lave macroer til et regneark, der indtil nu har været brugt i Lotus 1-2-3 (ja, vi er nogen der først lige er skiftet...)
Regnearket er en budgetmodel, og mit problem lige nu er at få lavet en udkriftsmacro.
Da der er forskel på hvilke sider, der skal udskrives fra gang til gang , kan jeg ikke blot lave en macro der udskriver nogle bestemte sider. I Lotus 1-2-3 er macroen lavet, så en side blev udskrevet, hvis et bestemt felt på den første side var større end 0. Er det muligt at lave noget ligende i Excel??
Eksempel: Hvis cellen R38 på arket "Indhold" er >0 skal arket "Resultat" udskrives.
Mit næste problem er, at arket ikke altid skal udskrives på standardprinteren. Kan man derfor få boksen "udskriv" op inden man starter udskriften, eller skal jeg lave en macro til hver af de mulige printere ?
Spg. 2: Det eneste jeg kan finde på er at benytte følgende kode:
Application.ActivePrinter = "FinePrint pdfFactory on FPP1:" ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ "FinePrint pdfFactory on FPP1:"
I første linie skal du så skrive den printer du vil anvende. en mulighed er måske, at R38 eller en anden celle, indeholder nummeret eller navnet på den printer du vil anvende.
Public Sub Udskriv() Dim Sider As Variant, S As Object A = Application.Dialogs(xlDialogPrinterSetup).Show If A = True Then
Set S = Worksheets("ark1") ' ret til dit ark Sider = Array(S.Range("A1"), S.Range("A25"), S.Range("A56")) ' ret og fortsæt med flere celler ' husk at skrive dem i rækkefølge, så den første er side 1
For I = 0 To UBound(Sider) If Sider(I) > 0 Then ActiveSheet.PrintOut from:=I + 1, To:=I + 1 End If Next End If Set S = Nothing End Sub
Det er jo lige før jeg er nødt til at logge på arbejde, for at teste om alle jeres forslag virker. Kabbak--> Dit forslag et lige lidt for avanceret til at jeg kan gemmenskue det lige her, men tester den om hver enkelt ark skal skrives ud?
Som det er nu, er alle ark (der er 15-20 ark) skrevet under hinanden, og hvis der står 1 ud får arket "Resultat" bliver arket "Resultat" udskrevet og ingen andre sider. Jeg vil godt fastholde det system, da 1-tallet i udskriftsmenuen samtidig bruges som sidetal på "Resultat" osv. hvis man bestiller flere sider.
Hvis der er en der vil have sider, der ikke lige står i rækkefølge, skal de blot skrive sidetal ud for de sider de vil have ud. (og sidetal bliver rigtige hvis de ellers kan tælle)
Espersen--> Det er netværksprinter, og jeg har optaget en macro, hvor jeg skifter navn på printeren, og det navn burde jeg vel kunne bruge i koden.
Årsagen til at der skal skiftes printer, og ikke bare bruge standardprinter, er at standarddriveren ikke kan finde ud af at tilpasse indholdet til side. Sørgeligt men sandt, så det er meget vigtigt at de kommer ud de rigtige drivere.
kabbak--> Kan man ikke kombinere dit forslag med det japping kom med: A = Application.Dialogs(xlDialogPrinterSetup).Show If A = True Then Range("R38").Select If ActiveCell.FormulaR1C1 > 0 Then Resultat.PrintOut End If Range("C8").Select If ActiveCell.FormulaR1C1 > 0 Then Likviditetsbudget.PrintOut
End If
Jeg har ikke testet det, da jeg er midt i madlavningen, og skal ind og se Gintberg om 1 time :-)
jeg går ud far at værdierne står i Worksheets("Indhold")
Public Sub udskriv() A = Application.Dialogs(xlDialogPrinterSetup).Show If A = True Then Worksheets("Indhold").Activate If Range("R38") > 0 Then Sheets("Resultat").PrintOut If Range("C8") > 0 Then Sheets("Likviditetsbudget").PrintOut End If
kommentar til 22/11-2004 17:42:23 nej du kan ikke bare regne med at kunne bruge det som fremkommer - "efternavnet" = on FPP1 kan nemlig ændre sig. - Dette er dog kun et problem hvis du har en knap der udskriver til een bestemt netværksprinter, som den gør i mit tilfælde.
Hej. Så har jeg endelig tid til at lege med macroen, og jeg har fået et problem. Jeg bruger følgende kode: Public Sub udskriv() A = Application.Dialogs(xlDialogPrinterSetup).Show If A = True Then Worksheets("Indhold").Activate If Range("R38") > 0 Then Sheets("Resultat").Activate Range("A1:L63").Select Selection.PrintOut Copies:=1 End If If Range("R70") = 0 Then: MsgBox "Du har ikke valgt, hvad du vil skrive ud."
End Sub
Problemet er at hvis der står 0 i feltet R38, så vælger den blot området på arket Indhold. Hvis der står O skal den bare gå videre til næste IF.
Jeg kan ikke have den næste IF stående lige efter, da der på nogle ark er flere udskriftsområder, så udskriftsområdet skal først defineres inden der skrives ud.
Alarmen er afblæst...... Jeg har lavet en macro for hvert ark der skal udskrives. Denne macro kaldes, hvis forudsætnignen er opfyldt. Det ser sådan ud: Public Sub udskriv() A = Application.Dialogs(xlDialogPrinterSetup).Show If A = True Then Worksheets("Indhold").Activate If Range("R61") > 0 Then Call Månedspec End If If Range("R63") > 0 Then Call Uds_resultat_skat End If Worksheets("Indhold").Activate Range("o54").Activate If Range("R70") = 0 Then: MsgBox "Du har ikke valgt, hvad du vil skrive ud." End If End Sub
Hmm. hvorfor er det lige at jeg ikke kan få lov til at give jer point. Jeg har selv angivet fordelingen, men når jeg trykker på Accepter sker der ikke noget...
Det ser det ikke ud til at man skal, når man vil fordele point manuelt. Øverst på siden står der følgende: "Du har afsat flere point end der er afsat til spørgsmålet." Jeg har fordelt 20+60+20 point, og jeg skulle da mene at de giver de 100 point jeg har udlovet i dette spm. Hvis jeg ikke snart for det til at virke, opretter jeg nye spm. med point.
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.