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]