Guido Moretto schrieb:

Ho inserito in una macro la verifica se una colonna è stata valorizzata
Ho usato un loop che mi scorre l'oggetto colonna dalla cella 1 a 1500 e questo rallenta di qualche decina di secondi la macro. Poichè il 90% delle volte questo controllo darà esito negativo, ossia non sarà inserito alcun codice, mi piacerebbe effettuare un primo controllo se l'utente ha inserito qualche stringa nella colonna, solo in caso affermativo procedere all'analisi cella per cella. Ho provato senza successo (va in errore) il seguente comando che dovrebbe restituire quante celle contengono stringhe o valori
   Dim  Flags         As Long
   Flags = com.sun.star.sheet.CellFlags.STRING + _
           com.sun.star.sheet.CellFlags.VALUE
   I = oCol_Sigla.queryContenentCells( Flags )
   Print I


DOMANDA
Sto usando il metodo corretto?  dove ho sbagliato ad usarlo?
Esiste altro modo di fare questo controllo?

Work-around
metto un contattore sul foglio e da macro ne controllo il valore.

grazie
Guido

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

Caro Guido, ti rispondo anche se non sono un campione, perché forse sto occupandomi di una questione analoga alla tua. Io avevo provato inizialmente ad utilizzare il metodo ismodified e setmodified ma non andava bene (non mi ricordo perché, ma incasinava tutto).

Invece mi pare funzioni con gli EventListener e si fa così:

fai una routin che assegna l'evento al range che ti interessa (per esempio all'apertura del documento o giu di li)

Sub Add_EventListener
    oDesktop = createUnoService("com.sun.star.frame.Desktop")
   oDocCalc = oDesktop.CurrentComponent
   oSheets = oDocCalc.getSheets()
oListener = CreateUnoListener( "CalcCell_","com.sun.star.chart.XChartDataChangeEventListener" ) sMyRange = "H9:N20" oSheet = oSheets.getByIndex("Tabella1")
   oRangeCell = oSheet.getCellRangeByName(sMyRange )
           'per ogni cella della settimana...
           for MyLoopY = 0 to 11 'sono le dimensioni del range
               for MyLoopX = 0 to 6
                   oCell = oRangeCell.getCellByPosition(MyLoopX,MyLoopY)
                   oCell.addChartDataChangeEventListener(oListener)
               next
           next
End Sub

poi fai la routin che intercetta l'evento DataChangeEventListener

Sub CalcCell_chartDataChanged(oEvent)
'oEvent.source contiene l'oggetto cella che ha provocatol'evento, quindi sai anche la cella che é stata modificata... oppure se modifichi una variabile globale, sai, quando ti serve, se nel range ci sono state modifiche

print "Evento Change in colonna " + oEvent.Source.CellAddress.Column + " riga " + oEvent.Source.CellAddress.Row
   oCella = oEvent.source
' ...
End Sub

spero ti possa essere utile... se ho detto qualche cazzaruola (comunque a me funziona) pregasi chiunque di bacchettarmi (per non lasciarmi nell'ignoranza!)

ciao
Antonello

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

Rispondere a