Estimados Amigos:
En el foro de OOo (al cual invito a subscribirse y colaborar), se inicio
un hilo acerca de seleccionar celdas visibles en Calc:
http://user.services.openoffice.org/es/forum/viewtopic.php?f=21&t=1292
Coincidentemente estaba complementando mis apuntes con este tema,
agradezco a quien pueda hacer algunas pruebas con la siguiente macro,
usen un listado en donde tengan filas y columnas ocultas manualmente,
que es, la situación donde Calc no permite hacer copias de solo las
celdas visibles.
Agradezco su tiempo y reciban un abrazo desde tierras mexicanas.
Saludos
Mauricio
P.D. A los interesados en la programación de macros con OOo Basic, en
estas listas, los invito a subscribirse también a la lista exclusiva de
este tema que he abierto y administro yo mismo
http://www.egrupos.net/grupo/ooobasic_es/alta
________________________________
Sub CopiarSoloVisibles2()
Dim oSel As Object
Dim oCursor As Object
Dim oVisibles As Object
Dim oHojaOrigen As Object
Dim oHojaDestino As Object
Dim oRangoOrigen As Object
Dim oRangoAnterior As Object
Dim oCeldaDestino As New com.sun.star.table.CellAddress
Dim co1 As Long, Fil As Long, Col As Long
Dim mDir
oHojaOrigen = ThisComponent.getCurrentController.getActiveSheet()
oSel = ThisComponent.getcurrentSelection()
Select Case oSel.getImplementationName
Case "ScCellObj"
oCursor = oSel.getSpreadSheet.createCursorByRange( oSel )
oCursor.collapseToCurrentRegion()
oVisibles = oCursor.queryVisibleCells()
Case "ScCellRangeObj", "ScCellRangesObj"
oVisibles = oSel.queryVisibleCells()
End Select
If IsNull( oVisibles ) Then
MsgBox "No hay celdas ocultas o no es un rango de celdas"
Else
Fil = 0
Col = 0
oHojaDestino = getNuevaHoja( ThisComponent, oHojaOrigen )
mDir = oVisibles.getRangeAddresses()
'Copiamos el primer rango
oRangoOrigen = mDir( 0 )
oCeldaDestino.Sheet = oHojaDestino.getRangeAddress.Sheet
'En la celda A1
oCeldaDestino.Column = 0
oCeldaDestino.Row = 0
oHojaDestino.copyRange( oCeldaDestino, oRangoOrigen )
'Si tenemos más rangos
If oVisibles.getCount() > 1 then
For co1 = 1 To UBound(mDir)
oRangoOrigen = mDir( co1 )
oRangoAnterior = mDir( co1-1 )
'Vamos sumando cada ancho y alto de cada rango, solo
cuando cambien
If oRangoAnterior.StartColumn = oRangoOrigen.StartColumn
Then
oCeldaDestino.Row = oCeldaDestino.Row +
oRangoAnterior.EndRow - oRangoAnterior.StartRow + 1
Else
oCeldaDestino.Column = Col +
oRangoAnterior.EndColumn - oRangoAnterior.StartColumn + 1
oCeldaDestino.Row = Fil
Col = oCeldaDestino.Column
End If
oHojaDestino.copyRange( oCeldaDestino, oRangoOrigen )
Next co1
End If
ThisComponent.getCurrentController.setActiveSheet( oHojaDestino )
End If
End Sub
'Devuelve una nueva hoja en Documento, a la derecha del argumento Hoja
Function getNuevaHoja( Documento As Object, Hoja As Object ) As Object
Dim oHojas As Object
Dim co1 As Integer
Dim sNombre As String
oHojas = Documento.getSheets()
sNombre = "Rangos Copiados"
Do While oHojas.hasByName( sNombre )
co1 = co1 + 1
sNombre = sNombre & " " & Format(co1)
Loop
oHojas.insertNewByName( sNombre, Hoja.getRangeAddress.Sheet+1 )
getNuevaHoja = Documento.getSheets.getByName( sNombre )
End Function
--
__________________________________
Todo lo que no es dado es perdido
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]