Una macro de vba a oobasic

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
madbender
Mensajes: 11
Registrado: Jue Sep 17, 2009 5:09 pm

Una macro de vba a oobasic

Mensaje por madbender »

Este script yo lo usaba para desmarcar un rango de celdas, las cuales "selecciono" de una lista desplegable con una simple letra x

Range("B17").Select
'While ActiveCell.Value <> "FIN"
While ActiveCell.Column < 136
If ActiveCell.Value <> "X" Then
Columns(ActiveCell.Column).Hidden = True
ActiveCell.Offset(0, 1).Select
Else
ActiveCell.Offset(0, 1).Select
End If
Wend
Range("B17").Select
End Sub


yo hice esto, pero no funco.

Dim oSheet as Object
oSheet = ThisComponent.CurrentController.ThisComponent.CurrentController.ActiveSheet
ThisComponent.CurrentController.select(oSheet.getCellDim oSheet as Object
oSheet = ThisComponent.CurrentController.ActiveSheet
oSheet.getCellRangeByName($1)ByName(("B17")))
'While ThisComponent.getCurrentSelection.Value <> "FIN"
While ThisComponent.getCurrentSelection.Column < 136
If ThisComponent.getCurrentSelection.Value <> "X" Then
Columns(ThisComponent.getCurrentSelection.Column).Hidden = True
ThisComponent.getCurrentSelection.Offset(0, 1).Select
Else
ThisComponent.getCurrentSelection.Offset(0, 1).Select
End If
Wend
Dim oSheet as Object
oSheet = ThisComponent.CurrentController.ThisComponent.CurrentController.ActiveSheet
ThisComponent.CurrentController.select(oSheet.getCellDim oSheet as Object
oSheet = ThisComponent.CurrentController.ActiveSheet
oSheet.getCellRangeByName($1)ByName(("B17")))
End Sub

Cualquier ayuda es bienvenida.


Editado por el moderador (valedor74) para mover el tema a un subforo apropiado. Si no lo has hecho aún por favor lee la Guía de supervivencia
OpenOffice 3.0 windows xp
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Una macro de vba a oobasic

Mensaje por mauricio »

Hola...

La macro que muestras hace lo siguiente:

Selecciona la celda B17
Hace un ciclo mientras la columna sea menor a 136
Evalúa si la celda activa es diferente de "X"
Si es diferente, oculta la columna
Se mueve una columna a la derecha
Si es igual, solo se mueve una columna a la derecha
Al finalizar el ciclo vuelve a seleccionar la celda B17

En resumen, de la columna 2 a la 135, las que NO tengan una "X" en la fila 17 se ocultan, ¿es esto correcto?, si es correcto, la siguiente macro hace lo mismo:

Código: Seleccionar todo

Sub OcultarColumnas()
Dim oHojaActiva As Object
Dim Col As Integer

	oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()
	For Col = 1 To 134
		If oHojaActiva.getCellByPosition( Col,16).getString <> "X" Then
			oHojaActiva.getCellByPosition( Col,16).getColumns.IsVisible = False
		End If
	Next	

End Sub
Saludos

Mauricio

Por favor, si esto resuelve tu pregunta, marca tu mensaje inicial como [RESUELTO] de este modo, tenemos foros más ordenados
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
madbender
Mensajes: 11
Registrado: Jue Sep 17, 2009 5:09 pm

Re: Una macro de vba a oobasic

Mensaje por madbender »

Claro, mira... por un lado tengo esto

Range("B17").Select
'While ActiveCell.Value <> "FIN"
While ActiveCell.Column < 136
If ActiveCell.Value <> "X" Then
Columns(ActiveCell.Column).Hidden = True
ActiveCell.Offset(0, 1).Select
Else
ActiveCell.Offset(0, 1).Select
End If
Wend
Range("B17").Select
End Sub

por otro

Range("B17").Select
'While ActiveCell.Value <> "FIN"
While ActiveCell.Column < 136
If ActiveCell.Value = "X" Then
'Columns(ActiveCell.Column).Hidden = True
ActiveCell.Value = " "
ActiveCell.Offset(0, 1).Select
Else
ActiveCell.Offset(0, 1).Select
End If
Wend
Range("B17").Select
End Sub


y

Columns("B:IV").Select
Range("B4").Activate
Selection.EntireColumn.Hidden = False
Range("B17").Select
End Sub


estas macros me hacen lo siguiente, me ocultan lo que esta marcado con una x, lo que no, no lo ocultan. El problema me sigue surgiendo para convertir la macro que me descmarca todo (que quita la x).
OpenOffice 3.0 windows xp
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Una macro de vba a oobasic

Mensaje por mauricio »

No mencionas si la primera es correcta o no, y no veo donde "intentes" adaptarlas, según las muestras que te voy dando...

Para la segunda macro, seria así

Código: Seleccionar todo

Sub OcultarColumnas2()
Dim oHojaActiva As Object
Dim Col As Integer

	oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()
	For Col = 1 To 134
		If oHojaActiva.getCellByPosition( Col,16).getString = "X" Then
			oHojaActiva.getCellByPosition( Col,16).setString("")
			oHojaActiva.getCellByPosition( Col,16).getColumns.IsVisible = False
		End If
	Next	

End Sub
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
madbender
Mensajes: 11
Registrado: Jue Sep 17, 2009 5:09 pm

Re: Una macro de vba a oobasic

Mensaje por madbender »

Soy un tarado, recien me doy cuenta, es que realmente, resolves demasiado precisas las consultas y al no tener muy claro oobasic, se me hace dificil ver la solución.

Pero aun no me doy cuenta como quitar las x.

GRACIAS!!
OpenOffice 3.0 windows xp
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Una macro de vba a oobasic

Mensaje por mauricio »

jajaja, mi estimado, recuerda que todos somos novatos alguna vez...

La línea precisa donde se quitan las X es en:
oHojaActiva.getCellByPosition( Col,16).setString("")

En tus ratos libres, checa mi libro: http://user.services.openoffice.org/es/ ... =50&t=1545
esta bastante documentado el manejo de Calc en el...

Saludos

Mauricio
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder