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]

Rispondere a