Bravo !
ora non ti resta che automatizzare la stampa ripetitiva dei moduli con una macro.
Fai come me :
H1 contiene il primo Identificativo da stampare (es. 1 luca)
H2 contiene l'ultimo Identificativo da stampare (es. 5 maria)
J1 contiene la formula =H2+1-H1 che determina la quantità di moduli ancora da stampare ( nell'esempio 5)
J2 contiene la formula =H1+1 che determina l'Identificativo del modulo (successivo) da riempire e stampare
Accendi il Registratore di macro (Strumenti --> Registra Macro)
Comanda la stampa del modulo corrente
Clicca su J2
Copia
Clicca su H1
Incolla Speciale Numeri
Spegni il Registratore di MacroAssegna un nome alla macro (es. Stampamoduli) e inserisci dentro la cartella Personali Standard Module1
Studia quì il Basic OpenOffice
http://wiki.services.openoffice.org/wiki/IT/Documentation/BASIC_Guide/Structure_of_SpreadsheetsSempre con Strumenti Macro Gestione esamina la macro e modificala aggiungendo
nei punti opportuni un Loop condizionato testando se il valore di J1 è maggiore di 0
Sul codice che segue
REM ***** BASIC *****
sub Stampamoduli
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
dim doc as object
dim foglio as object
dim cella as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
doc = ThisComponent
foglio = doc.Sheets.getByName("Fatture")
dim args1(1) as new com.sun.star.beans.PropertyValue
dim args2(0) as new com.sun.star.beans.PropertyValue
dim args4(0) as new com.sun.star.beans.PropertyValue
dim args5(5) as new com.sun.star.beans.PropertyValue
do
rem ----------------------------------------------------------------------
args1(0).Name = "Copies"
args1(0).Value = 1
args1(1).Name = "Collate"
args1(1).Value = true
dispatcher.executeDispatch(document, ".uno:Print", "", 0, args1())
for i = 1 to 10000000
next
rem ----------------------------------------------------------------------
args2(0).Name = "ToPoint"
args2(0).Value = "$J$2"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ----------------------------------------------------------------------
args4(0).Name = "ToPoint"
args4(0).Value = "$H$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())
rem ----------------------------------------------------------------------
args5(0).Name = "Flags"
args5(0).Value = "V"
args5(1).Name = "FormulaCommand"
args5(1).Value = 0
args5(2).Name = "SkipEmptyCells"
args5(2).Value = false
args5(3).Name = "Transpose"
args5(3).Value = false
args5(4).Name = "AsLink"
args5(4).Value = false
args5(5).Name = "MoveMode"
args5(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args5())
cella = foglio.getCellRangeByName("J1")
Loop While cella.Value > 0
end sub
Ho :
- aggiunto le istruzioni che fanno riferimento alle variabili doc foglio e cella
- spostato le Dim prima del loop
- inserito il loop
do ... Loop While
- inserito un ciclo for i = 1 to 10000000 next per permettere al gestore delle code di stampa di portar via i dati del modulo corrente (da migliorare)
Ho riportato il codice integralmente perchè forse potrebbe servire anche ad altri (forse si potrebbe fare anche meglio)
Saluti