Ciao Bart,
ultimamente non riesco a seguire molto le liste quindi rispondo con
grande ritardo, ma veniamo al dunque e vediamo quello che si può fare.
Pur non sapendo "ne leggere ne scrivere" (come ho dimostrato), riesco
a volte (scopiazzando senza ritegno e usando in cut&paste alla grande)
a far funzionare qualche macro.
In merito avrei qualche problemino di tipo "generale", ovvero modulini
che potrei proficuamente riciclare in diverse occasioni.
sono un esperto in frullati di macro riciclo gli stessi pezzi diverse
volte :-)
1) Dal registratore ho imparato a muovermi così:
args2(0).Value = 3 'passi
dispachter.executeDispatch(oDocument, ".uno.GoRight, "", 0, args2 ())
' e mi sposto di tre celle a destra
(La sintassi proprio non l'ho capita... ma un po' a naso me la cavo)
Ma c'è un modo più agevole per spostarsi "relativamente"?
( activeCell.offset(0, 5) mi piaceva così tanto... )
si, non usare il registratore :-)
vediamo il problema da un'altra angolazione, non conoscendo quello di
cui hai bisogno di preciso potrei metterti fuori strada, nel caso cerca
di essere più preciso.
Via macro non hai bisogno di spostarti su una cella, di solito quello
che può servirti è il contenuto della cella.
quindi vediamo un po' di basi su come lavorare con le celle:
Dim Doc As Object
'dichiaro la variabile oggetto Doc
Dim Sheet As Object
'dichiaro la variabile oggetto sheet
Dim Cell As Object
'dichiaro la variabile oggetto cell
Dim Contenuto As String
'dichiaro la variabile stringa Contenuto
Doc = ThisComponent
'assegno alla variabile Doc il Documento
Sheet = Doc.Sheets(0)
'assegno alla variabile sheet la tabella1 del documento in base alla
posizione, 0 è la prima
Cell = Sheet.getCellByPosition(0, 0)
'assegno alla variabile Cell la cella A1 della variabile sheet (quindi
tabella1) in base alla sua posizione
'tramite il metodo getCellByPosition ossia ottieni la cella in base alla
posizione
'i due dati tra parentesi indicano (0, 0) indicano rispettavemente
colonna e riga
'con numerazione sempre a partire da 0, quindi il primo 0 sta per colonna A
'il secondo 0 sta per riga 1. naturalmente puoi sostituire i valori con
una variabile
Contenuto = Cell.String
'assegno alla variabile Contenuto la stringa contenuta nella cella in
questione
msgbox Contenuto
'visualizzo il contenuto della cella in una msgbox
Ora, abbiamo visto come leggere la stringa contenuta in una cella.
Se avessi voluto sapere la formula?
Al posto di Cell.String basta usare Cell.Formula per le formule,
Cell.Value per i valori numerici
fai attenzione a cambiare il formato della variabile però, nell'esempio
che ho riportato Contenuto era una variabile di tipo stringa e non
numerica, nel caso l'interprete basic si occuperà di convertire la
variabile da stringa in numerica ma ti posso garantire che facendo
impazzire l'interprete a fare passaggi da stringa a valore, da valore a
stringa, da stringa a valore, alla fine non ti farà ottenere il
risultato sperato :-)
Nel caso tu abbia ottenuto il fatidico dato tanto ricercato e messo in
una variabile come fare per usarlo in una cella da un'altra parte?
Ricliamo lo stesso codice :-)
Cell = Sheet.getCellByPosition(1, 0)
Cell.String = Contenuto
ossia diciamo che cell stavolta è B1 e che deve mettere nella cella la
stringa contenuta nella variabile Contenuto
Vista così è molto più semplice che passare per il copia e incolla.
Naturalmente ti ho postato un piccolo esempio di come leggere e scrivere
singole celle ma puoi farlo con range di celle, richiamandoli per
posizione o per nome (getCellRangeByName). Allo stesso modo puoi
richiamare per nome anche la tabella attiva sostituendo la riga:
Sheet = Doc.Sheets(0)
con la riga
Sheet = Doc.Sheets.GetByName("Tabella1")
Penso di essere stato abbastanza chiaro.
2) Altra domanda:
- Sono su una cella (è selezionata la cella) e vorrei
- copiare l'intera riga
- incollarla sul posto spingendo le righe in basso
soluzione: lascia perdere il copia incolla :-)
la mia risposta prevede che tu sappia la posizione della cella in questione.
Ottieni il range di celle che è l'intera riga
Inserisci una riga vuota dove vuoi i dati
Sheet.insertCells(CellRangeAddress, com.sun.star.sheet.CellInsertMode.DOWN)
Scrivi i dati nel range di celle appena inserito.
3) Ancora questa:
- sono su una cella e vorrei
- copiare un range (definito da un nome di area) che sta da altra
parte del documento (ma semza muovermi)
- e incollarlo esattamente dove mi trovo
capisco che il copia incolla è comodo e utile, ma puoi trovare la
riposta a questa domanda nella altre due risposte.
4) Ancora una e poi basta:
- sono su una cella e vorrei
- registrarne la posizione in una variabile
- andare in giro a fare altre cose
- tornare dov'ero all'inizio usando l'indirizzo registrato nella var
ok questa è un po' più complicata e la stanchezza comincia a farsi
sentire vista l'ora in cui stò scrivendo. Se sai dove ti trovi non ti
serve registrarlo perchè puoi usare i contenuti delle celle come ti ho
insegnato senza doverti necessariamente spostare all'interno del foglio
(magia!!)
se non lo sai riposta dando magari qualche info in più e vediamo quello
che si può fare.
5) Quando si comincia diventa difficile fermarsi...
Se l'unico sistema che conosco è il dispatch...
- sono su una cella e vorrei
- copiarne il contenuto in un altro posto (posto ben definito
e sempre quello, quindi con un indirizzo o un nome di area)
a me sembra sempre risolvibile con il get
Giuro ho cercato a lungo sul web di trovare qualche esempio analogo...
Ho travato di tutto: macro che fanno il caffè espresso (dolce o
zuccherato calcolando l'oroscopo dell'utente e le fasi dei suoi
bioritmi in quel momento), e più in generale operazioni complesse, che
si fanno forse una volta nella vita di un documento.
magari al momento ti restano difficili da comprendere, ma una volta
entrati nel meccanismo dello starbasic vedrai che si semplificheranno molto.
Sono convinto che risolvendo i problemini sopra e con l'aiuto di un
registratore si possano fare cose interessanti...
Senza il registratore otterrai risultati maggiori, se proprio vuoi usare
un registratore installa quello di Paolo Mantovani, che non è basato sul
dispatcher, ma scrive codice in starbasic, molto spesso ti sarà utile
per capire meglio il codice e sorpassare ostacoli che potrebbero
sembrare insormontabili. Attenzione però non sò se funziona anche nella
2.0, io l'ho usato molto spesso nella 1.1
Qualcuno mi può aiutare?
eccomi!
un ringraziamento anticipato
prego
Bart
Fabio (FaBBio del canale IRC #openoffice.org-it)
P.S: Approfitto dell'occasione per ringraziare Paolo Mantovani che molto
pazientemente mi ha aiutato un'infinità di volte a scrivere codice
facendomi capire quello che scrivevo e tutti gli amici del canale IRC.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]