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]