Hola, me leido los capitulos del libro "Aprendiendo OOo Basic" de Mauricio para recorrer un rango o seleccion de celdas de una tabla grande, y he conseguido hacer la macro y funciona.
Miren el archivo que les adjunto con una macro. Alli hay una lista desde la columna A hasta la F
Y solo quiero seleccionar un rango de celdas por ejemplo: B3:D8
¿Como puedo recorrer o desplazarme por ese rango SELECCIONADO para obtener todos los valores uno a uno mediante un CURSOR. No quiero desplazarme por toda la tabla, solo por la parte seleccionada.
Quiero obtener el valor de cada celda seleccionada, transformarlo y luego volverlo a dejar en la misma celda de donde lo cogí.
Lo que intento hacer es lo que en VBA Excel se hace como:
For Each cell in Selection
Haz esto... (transforma el valor)
y luego vuelve a poner el valor en la misma celda que lo cogiste.
Next cell
Despues de leer el capitulo 6 (Referencia a rango de celdas) libro, he conseguido desplazarme por la selección como verán en la macro adjunta. (Pueden descargarse el archivo con el macro).
Pero ahora me gustaría hacer lo mismo con los CURSORES, ya que segun dicen es mas facil, pero al no tener un ejemplo, no logro navegar solo por la selección con el CURSOR.
Si alguien sabe como reducir el codigo con cursores o con otro metodo seria genial.
Después de varias horas con los cursores 'createCursorByRange(areaSeleccionada)', no veo como hacerlo.
No soy programador. Solo soy un aficionado entusiasta de Excel y Calc.
Si alguien puede poner el ejemplo completo aqui de desplazamiento con CURSOR, se lo agradeceré enormemente.
GRACIAS !!
Código: Seleccionar todo
Sub DireccionByPosition_RangoSeleccionado
'Macro de CALC que se desplaza por una selección, bien sea una celda o grupo de celdas contiguas (rango de celdas seleccionadas) para extraer el valor de ellas y volverlo a pegar en el mismo sitio, uno a uno.
'MACRO Version Inicial 1.0
Dim oSel As Object
Dim rangeName as String
Dim cellValue as Variant
Dim address As Object
Dim colStart as Long
Dim rowStart as Long
Dim colEnd as Long
Dim rowEnd as Long
Dim oColumns as Long
Dim oRows as Long
oSel = ThisComponent.getCurrentSelection() 'C4
Select Case oSel.getImplementationName()
Case "ScCellObj" 'Si es una sola celda seleccionada.
cellValue = oSel.getString()
Msgbox cellValue
oSel.setString(cellValue)
Case "ScCellRangeObj" 'Si es un grupo de cledas contiguas (rango seleccionado)
address = oSel.RangeAddress
'**** Localizamos posiciones de indice del rango seleccionado *******************
colStart = address.StartColumn
rowStart = address.StartRow
colEnd = address.EndColumn
rowEnd = address.EndRow
'Numero totoal de columnas y filas
oColumns = oSel.getColumns().getCount()
oRows = oSel.getRows().getCount()
'Empezamos a desplazarnos por las celdas del Rango por filas con este bucle.
For Ro = 0 to oRows - 1
For Col = 0 to oColumns -1
cellValue = ThisComponent.getCurrentController.getActiveSheet().getCellByPosition( colStart + Col, rowStart + Ro ).getString()
Msgbox cellValue
ThisComponent.getCurrentController.getActiveSheet().getCellByPosition( colStart + Col, rowStart + Ro ).setString(cellValue)
Next Col
Next Ro
End Select
End Sub