Makro Drucken langsam
Verfasst: Fr 9. Nov 2018, 17:14
Hallo liebes Forum,
ich habe mir vor einiger Zeit mit eurer Hilfe ein Makro zusammen gestellt welches mir erlaubt einen bestimmten Bereich (aus Zelle gelesen) zu drucken. Nun habe ich an meinem Dokument weiter gebastelt und noch einiges hinzugefügt. Unter anderem habe ich viele Formularsteuerelemente eingebaut die aber nicht im Druckbereich sind. Wenn ich mein Drucken Makro starte geht das Programm erstmal alle Steuerelemente durch bevor es anfängt zu drucken. Das dauert recht lange, wenn ich aber die normal drucken Funktion in LibreOffice verwende passiert das nicht.
Ich hoffe Ihr könnt mir helfen!
ich habe mir vor einiger Zeit mit eurer Hilfe ein Makro zusammen gestellt welches mir erlaubt einen bestimmten Bereich (aus Zelle gelesen) zu drucken. Nun habe ich an meinem Dokument weiter gebastelt und noch einiges hinzugefügt. Unter anderem habe ich viele Formularsteuerelemente eingebaut die aber nicht im Druckbereich sind. Wenn ich mein Drucken Makro starte geht das Programm erstmal alle Steuerelemente durch bevor es anfängt zu drucken. Das dauert recht lange, wenn ich aber die normal drucken Funktion in LibreOffice verwende passiert das nicht.
Ich hoffe Ihr könnt mir helfen!
Code: Alles auswählen
Dim ocalc as Object
Dim Tab as Object
Dim Druckbereich as Object
const SFolderURL = "file:///C:/Users/admin/Dokumente/_Rechnungen/Rechnung_Normal/" '<--- Speicherordner für PDF-Datein
const sNameCell = "G5"' <------------------------------- Zelle in der der Dateiname steht
const sPrintAreaCell ="A60"'<--------------------------- Zelle, in der der auszudruckende Bereich steht, z.B. A2:F29
sub Drucken
Dim myProps(0) as New com.sun.star.beans.PropertyValue
myProps(0).Name="FilterName"
myProps(0).Value = "calc_pdf_Export"
aTab = array("RG_Normal")'<--------------- Namen der auszugebenden Tabellenblätter kommasepariert
Dim aPrintAreas(0)
oCalc = thisComponent
osheets = oCalc.Sheets
'vorhandene Druckbereiche löschen
for i = 0 to osheets.count - 1
osheet = oSheets(i)
osheet.setPrintAreas(Array())
next i
for i = 0 to ubound(aTab)
oSheet = oCalc.sheets().getByName(aTab(i)) 'Blatt wählen
sFilename = oSheet.getCellRangeByName(sNameCell).string 'Dateiname auslesen
oPrintAreaCell = oSheet.getCellRangeByName(sPrintAreaCell)
sPrintArea = oPrintAreaCell.String
oCellRange = oSheet.getCellRangeByName(sPrintArea)'zu druckender Zellbereich
oAddress = oCellRange.RangeAddress'Zelladressen des zu druckenden Zellbereiches
'neuen Druckbereich setzen
aPrintAreas(0) = oAddress
oSheet.setPrintAreas(aPrintAreas)
sUrl = SFolderURL & sFilename & ".pdf" 'Speicherpfad zusammensetzen
oCalc.storetoUrl(sUrl,myProps()) 'Speichern
oSheet.setPrintAreas(Array())
next i
Controller = ocalc.getCurrentController()
Tab = Controller.ActiveSheet
Druckbereich = Tab.getCellRangeByName(sPrintArea)
DruckbereichDrucken
end Sub
sub DruckenZwei
Dim myProps(0) as New com.sun.star.beans.PropertyValue
myProps(0).Name="FilterName"
myProps(0).Value = "calc_pdf_Export"
aTab = array("RG_Normal")'<--------------- Namen der auszugebenden Tabellenblätter kommasepariert
Dim aPrintAreas(0)
oCalc = thisComponent
osheets = oCalc.Sheets
'vorhandene Druckbereiche löschen
for i = 0 to osheets.count - 1
osheet = oSheets(i)
osheet.setPrintAreas(Array())
next i
for i = 0 to ubound(aTab)
oSheet = oCalc.sheets().getByName(aTab(i)) 'Blatt wählen
sFilename = oSheet.getCellRangeByName(sNameCell).string 'Dateiname auslesen
oPrintAreaCell = oSheet.getCellRangeByName(sPrintAreaCell)
sPrintArea = oPrintAreaCell.String
oCellRange = oSheet.getCellRangeByName(sPrintArea)'zu druckender Zellbereich
oAddress = oCellRange.RangeAddress'Zelladressen des zu druckenden Zellbereiches
'neuen Druckbereich setzen
aPrintAreas(0) = oAddress
oSheet.setPrintAreas(aPrintAreas)
sUrl = SFolderURL & sFilename & ".pdf" 'Speicherpfad zusammensetzen
oCalc.storetoUrl(sUrl,myProps()) 'Speichern
oSheet.setPrintAreas(Array())
next i
Controller = ocalc.getCurrentController()
Tab = Controller.ActiveSheet
Druckbereich = Tab.getCellRangeByName(sPrintArea)
DruckbereichDrucken
Controller = ocalc.getCurrentController()
Tab = Controller.ActiveSheet
Druckbereich = Tab.getCellRangeByName(sPrintArea)
DruckbereichDrucken
end Sub
Sub DruckbereichDrucken
Dim Args1(0)
Dim Args2(1) as new com.sun.star.beans.PropertyValue
Dim Probs
Dim sDrucker as string
Probs = ocalc.getPrinter()
sDrucker = Probs(0).value
args1(0) = Druckbereich.RangeAddress
Tab.setprintAreas(args1())
args2(0).name = "Name"
args2(0).value = "<" & sDrucker & ">"
args2(1).name = "Wait"
args2(1).value = true
ocalc.print(args2())
redim args1()
Tab.setprintAreas(args1())
end Sub