Nel file allegato ho impostato delle aree con nome che identificano la tabella, l'area di stampa e la riga da ripetere nella stampa al cambio di pagina.
Per eseguire la stampa, ho scritto apposito un codice (sub ProvaStampa1) che definisce l'area di stampa e la riga da ripetere (utilizzando le relative aree con nome).
Con
Codice: Seleziona tutto
...
Dim RigaRipetere As Object
Dim IndirizzoRigaRipetere As New com.sun.star.table.CellRangeAddress
'creo l'oggetto riga da ripetere utilizzando l'apposita area con nome
RigaRipetere = Foglio.getCellRangeByName("CA1_RigaRipetere")
'definisco l'indirizzo della riga da ripetere
IndirizzoRigaRipetere = RigaRipetere.RangeAddress 'i riferimenti alle colonne vengono ignorati
'imposto la riga da ripetere
Foglio.setTitleRows(IndirizzoRigaRipetere)
...
Non riesco però a rimuovere la riga al termine del codice, senza eliminare la relativa area con nome.
Quale istruzione bisogna impartire?
Posto anche l'intero codice
Codice: Seleziona tutto
Sub ProvaStampa1
Dim Foglio As Object
Foglio = ThisComponent.Sheets(0)
rem imposto l'area di stampa
Dim AreaStampa As Object
Dim IndirizzoAreaStampa(0) As New com.sun.star.table.CellRangeAddress
'creo l'oggetto area di stampa utilizzando l'apposita area con nome
AreaStampa = Foglio.getCellRangeByName("CA1_AppStampa")
'definisco l'indirizzo della area di stampa
IndirizzoAreaStampa(0) = AreaStampa.RangeAddress
'imposto area di stampa nel foglio
Foglio.setPrintAreas(IndirizzoAreaStampa())
rem imposto la riga da ripetere al cambio pagina
Dim RigaRipetere As Object
Dim IndirizzoRigaRipetere As New com.sun.star.table.CellRangeAddress
'creo l'oggetto riga da ripetere utilizzando l'apposita area con nome
RigaRipetere = Foglio.getCellRangeByName("CA1_RigaRipetere")
'definisco l'indirizzo della riga da ripetere
IndirizzoRigaRipetere = RigaRipetere.RangeAddress 'i riferimenti alle colonne vengono ignorati
'imposto la riga da ripetere
Foglio.setTitleRows(IndirizzoRigaRipetere)
rem aggiungo il foglio da stampare in un insieme (mi servirà in un futuro)
' Dim oRanges As Variant
' oRanges = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
' oRanges.addRangeAddress(Foglio.RangeAddress,True)
rem seleziono la stampante da utilizzare
Dim oController as Object
Dim oDispatcher as Object
oController = ThisComponent.currentController
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oDispatcher.executeDispatch(oController.Frame,".uno:PrinterSetup","_self",0,Array())
rem stampo
ThisComponent.Print(Array())
wait 500 'fermo il codice altrimenti stampa non correttamente. Codice troppo veloce
rem elimino area di stampa definita in precedenza
Foglio.setPrintAreas(Array())
rem elimino la riga da ripetere
' Foglio.setTitleRows() 'Capire come si cancella
End Sub
Geo