Condividi:        

[Calc] Fare una macro che stampa una pagina ripetutamente

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Calc] Fare una macro che stampa una pagina ripetutamente

Postdi Nicolantonio » 04/03/10 23:46

Salve a tutti,
Ho un elenco di nominativi su un foglio xls e vorrei stampare una scheda personale in formato A4 per ogni nominativo.
Ho disegnato su un secondo foglio il layout della scheda che all'interno contiene come matricola il numero della riga dalla quale prende tutti i dati.
In coda alla scheda, fuori dalla zona di stampa, ho creato un campo che indica il numero di riga del nominativo successivo.
Svolgendo la seguente azione ho registrato una macro :
- Stampata la scheda corrente
- spostato il numero di riga successivo, presente sotto la scheda, sul numero matricola all'interno della scheda (che quindi in automatico si è riempita con i dati del nominativo successivo .. (e così via di seguito)
Eseguendo la macro funziona a meraviglia, viene :
- stampata la prima scheda, preparata la seconda e in fondo a questa
- determinato il puntatore per la terza scheda.
Ora per stampare con un solo comando tutte le schede o un quantitativo prefissato ho aggiunto un contatore a fondo pagina che si decrementa di 1 per ogni scheda stampata
Ho inserito a mano nella macro un
Do
...
' l'istruzione che segue dovrebbe prelevare il contatore delle schede rimanenti da stampare
j = Range("D57").Value
' ma va va in errore "Variabile dell'oggetto non impostata" (Range l'ho definita Dim Range as Object ????)
Loop Until j > 1

Di macro non ci capisco.
Range().Value va definita ? come ???
Voi con excel le fatture come le stampate ? con Stampa Unione ?
Grazie in anticipo
Nicolantonio
Newbie
 
Post: 7
Iscritto il: 04/03/10 22:43

Sponsor
 

Re: [Excel] Fare una macro che stampa una pagina ripetutamente

Postdi Anthony47 » 05/03/10 00:10

Ciao nicolantonio e benvenuto nel forum.
Beh, dici che non te ne intendi ma mi pare che hai avuto una buona idea e delle buone iniziative...

Devi definire solo le "variabili", e non e' nemmeno obbligatorio ma serve per ottimizzare il codice, che in genere e' la penultima preoccupazione di un principiante (e non e' la prima di un programmatore esperto); "Range" non e' una variabile, ma una parola chiave.
Prova quindi a togliere tutte le Dim e vedi che succede; se va ancora in errore allora posta tutta la macro e scrivi su quale istruzione fallisce e con quale errore.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Fare una macro che stampa una pagina ripetutamente

Postdi Nicolantonio » 05/03/10 00:28

REM ***** BASIC *****

sub Stampa
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object

rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
do
rem ---------------------------stampa foglio corrente---------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Copies"
args1(0).Value = 1
args1(1).Name = "Collate"
args1(1).Value = true

dispatcher.executeDispatch(document, ".uno:Print", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "E57"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$E$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(5) as new com.sun.star.beans.PropertyValue
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())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "ToPoint"
args6(0).Value = "H57"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "ToPoint"
args8(0).Value = "$H$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args8())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())

rem ----------------------------------------------------------------------
dim args11(5) as new com.sun.star.beans.PropertyValue
args11(0).Name = "Flags"
args11(0).Value = "V"
args11(1).Name = "FormulaCommand"
args11(1).Value = 0
args11(2).Name = "SkipEmptyCells"
args11(2).Value = false
args11(3).Name = "Transpose"
args11(3).Value = false
args11(4).Name = "AsLink"
args11(4).Value = false
args11(5).Name = "MoveMode"
args11(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args11())

j1 = Range("J51").Value ' questa è l'istruzione dove si ferma "funzione non definita"

loop until j1 > 1

end sub
Nicolantonio
Newbie
 
Post: 7
Iscritto il: 04/03/10 22:43

Re: [Excel] Fare una macro che stampa una pagina ripetutamente

Postdi Nicolantonio » 05/03/10 09:44

Buon giorno
scusa Anthony47,
ieri notte non ti ho nemmeno ringraziato per la super rapidità di risposta e .. poi mi è partito un click sbagliato e non ho trovato la maniera di aggiungere altro.

L'istruzione che dà errore è in fondo al post in neretto

Oltre alla richiesta di aiuto per la soluzione di questo problema
avevo chiesto : Normalmente per stampare un prospetto ripetutamente (Fatture, Schede Clienti, ) cosa si usa con Excel ?

Grazie ancora
Nicolantonio
Newbie
 
Post: 7
Iscritto il: 04/03/10 22:43

Re: [Excel] Fare una macro che stampa una pagina ripetutamente

Postdi Anthony47 » 05/03/10 10:54

Purtroppo non uso OpenOffice, quindi non sono in grado di dare nessun contributo sulla domanda della macro. Comunque e' evidente che non si puo' innestare una istruzione vba (quale e' j1 = Range("J51").Value) in una routine in basic.
Per cercare di dedurre la sintassi della possibile istruzione, prova a registrare una nuova macro mentre scrivi i valori "1", "2", "pippo" (senza gli apici) in tre celle di un foglio di lavoro, poi posti la macro ottenuta e magari si intuisce.

Per la seconda domanda, credo che non ci sia una modalita' di excel per la gestione di stampe modulari; il mio suggerimento e' sempre di separare i dati dalla loro presentazione, e in genere questo vuol dire un modulo per il caricamento intuitivo dei dati, un foglio "archivio" con i dati memorizzati in modo strutturato, e un foglio per la presentazione del documento finale; questo ultimo foglio preleva i dati dal foglio archivio e li posiziona nel layout di stampa.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Fare una macro che stampa una pagina ripetutamente

Postdi Nicolantonio » 05/03/10 14:25

Anthony47 ha scritto:Purtroppo non uso OpenOffice, ...

farò quello che mi hai chiesto e posterò di nuovo
Per la seconda domanda, credo che non ci sia una modalita' di excel per la gestione di stampe modulari; il mio suggerimento e' sempre di separare i dati dalla loro presentazione, e in genere questo vuol dire un modulo per il caricamento intuitivo dei dati, un foglio "archivio" con i dati memorizzati in modo strutturato, e un foglio per la presentazione del documento finale; questo ultimo foglio preleva i dati dal foglio archivio e li posiziona nel layout di stampa.
Ciao

E' quello che ho fatto.
Ma quando si debbono stampare 200 righe che danno luogo a 200 "schede" diverse
o si stampano una per una a mano
o si ennuplica il foglio di presentazione
o si duplica la presentazione in verticale
..
o si fa quello che ho pensato ma non ci riesco
Fra un pò posterò quello che mi hai chiesto
Grazie
Nicolantonio
Newbie
 
Post: 7
Iscritto il: 04/03/10 22:43

Re: [Excel] Fare una macro che stampa una pagina ripetutamente

Postdi Nicolantonio » 05/03/10 14:58

Eccola

REM ***** BASIC *****

sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$C$26"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "1"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$D$26"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "StringName"
args4(0).Value = "2"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$E$26"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "StringName"
args6(0).Value = "pippo"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args6())

end sub
Nicolantonio
Newbie
 
Post: 7
Iscritto il: 04/03/10 22:43

Re: [Excel] Fare una macro che stampa una pagina ripetutamente

Postdi Nicolantonio » 05/03/10 18:45

Problema risolto, un pò di confusione tra Basic, VBA e Basic in OpenOffice.

Ho anche dovuto inserire brutalmente un Loop di 10000000 cicli
per dare tempo al sistema operativo almeno di iniziare a prelevare i dati per formare la coda di stampa
(in seguito troverò un modo più elegante ).

ecco le ultime istruzioni giuste

cell = sheet.getCellRangeByName("J1")
J = cell.Value
Loop While j > 0
Grazie ancora
Nicolantonio
Newbie
 
Post: 7
Iscritto il: 04/03/10 22:43

Re: [Calc] Fare una macro che stampa una pagina ripetutamente

Postdi Anthony47 » 06/03/10 00:48

Bravo, la necessita' aguzza l' ingegno.
E comunque dalla macro registrata non avrei assolutamente intuito quele poteva essere la sintassi per l' istruzione che sonda il valore di J1.

Ciao, alla prossima.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[Calc] Fare una macro che stampa una pagina ripetutamente":


Chi c’è in linea

Visitano il forum: Nessuno e 49 ospiti