Ciao Lele

Alle 07:46, domenica 6 febbraio 2005, [EMAIL PROTECTED] ha 
scritto:
> Ho necessità di realizzare una semplice macro che tolga le righe vuote da
> una zona in una tabella di calc. Ho usato il registratore macro
> selezionando la zona attivando il filtro standard e cercando il valore -non
> vuoto- e salvando la macro nel documento e poi il documento stesso. Sembra
> tutto a posto, infatti valori sono corretti, ma se dopo aver ripristinato
> le righe per fare una ulteriore prova cerco di attivare la macro sia da
> strumenti-macro-esegui sia da un pulsante creato allo scopo l'applicazione
> va in crash, dopo aver salvato il file. Non riesco  a capire cosa non vada,
> dato che al primo salvataggio tutto funziona.

Non c'è nulla che non va in quello che hai fatto, solo che il meccanismo del 
registratore di macro, basato sul dispatcher, è ancora lontano dall'essere 
perfetto.
In altre parole: hai appena trovato un bug. 
(ho già fatto la segnalazione)

Purtroppo in questi casi non rimane altro che riscrivere la macro usando le 
normali chiamate API  in luogo del dispatcher. 

Ciò non è necessariamente difficile, tuttavia, nel tuo caso particolare non si 
tratta di una passaggiata. (almeno a mio avviso)

In fondo al post troverai un esempio di come potresti fare:
(Attenzione alle righe spezzate dal prg di posta.) 

Per non allungare/complicare  eccessivamente il codice, ho incluso solo una 
piccola parte delle opzioni disponibili

Per ulteriori info, fatti risentire in lista

Ciao
Paolo M.


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

Sub MostraRigheNonVuote

'ottiene il foglio attivo
 oActiveSheet = ThisComponent.CurrentController.ActiveSheet
 
'ottiene la selezione
 oSelection = ThisComponent.CurrentSelection
 
'crea un cursore invisibile a partire dalla selezione corrente
 oCursor = oActiveSheet.CreateCursorByRange(oSelection)
 
'espande il cursore in modo da comprendere la regione corrente
'(una regione è un'area di celle non vuote circondata da celle vuote)
 oCursor.collapseToCurrentRegion
 
'crea un "descrittore di filtro" che utilizzeremo in seguito
 oFilterDescriptor = oCursor.createFilterDescriptor(True)

'crea un array di filtri "di colonna" 
'(in questo caso si tratta di un solo elemento)
 Dim mFilterFields(0) As New com.sun.star.sheet.TableFilterField
 
'assegna i parametri per ogni singolo filtro "di colonna"
 mFilterFields(0).Field = 2  '(l'indice parte da 0)
 mFilterFields(0).Operator = com.sun.star.sheet.FilterOperator.NOT_EMPTY
 
'assegna le proprietà del descrittore di filtro
 With oFilterDescriptor
  .ContainsHeader = False
  .FilterFields = mFilterFields() 
 End With

'filtra i dati in base al descrittore precedentemente preparato
 oCursor.Filter(oFilterDescriptor)
 
End Sub





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Rispondere a