Una macro de vba a oobasic

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
short
Mensajes: 10
Registrado: Vie Jul 30, 2010 8:34 am

Una macro de vba a oobasic

Mensaje por short »

buenos dias,

estoy pasando la macro de vba a oobasic y queria saber si podian ayudarme
Sub genera()
Sheets("INICIO").Select
entidad = Range("C7").Value
sucursal = Range("C8").Value

Sheets("VENTA").Visible = xlSheetVisible
Sheets("VENTA").Select
Cells.Select
Range("A2").Activate
Selection.Copy
Sheets("VENTA").Visible = xlSheetHidden
Sheets.Add Type:=xlWorksheet
ActiveSheet.Name = "V_" & sucursal
Range("A1").Select
ActiveSheet.Paste
Range("A3").Value = entidad
Range("B3").Value = sucursal
ActiveWindow.Zoom = 75
ActiveSheet.Protect "kplus2002"

End Sub
Sub borra()

Application.DisplayAlerts = False
For Each ws In Worksheets
If ws.Name <> "INICIO" And ws.Name <> "COMPRA" And ws.Name <> "VENTA" And ws.Name <> "denom" Then ws.Delete
Next
Application.DisplayAlerts = True


End Sub

Gracias

Editado por el moderador (mauricio) para separar el mensaje del tema original por tratarse de un problema diferente. Si no lo has hecho aún por favor lee la Guía de supervivencia
openoffice 3 en windows xp
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Una macro de vba a oobasic

Mensaje por FJCC-ES »

No conozco VB pero he intentado replicar el código en OooBasic. He supuesto que “entidad” y “sucursal” son texto.

Código: Seleccionar todo

Sub genera
Doc = ThisComponent
Hoja_IN = Doc.Sheets.getByName("INICIO")
entidad = Hoja_IN.getCellrangeByName("C7").getString()
sucursal = Hoja_IN.getCellrangeByName("C8").getString()
Hoja_VEN = Doc.Sheets.getByName("VENTA")
'Hoja_VEN.isVisible = True
VEN_Cell = Hoja_VEN.getCellrangeByName("A2")
RAddress = VEN_Cell.RangeAddress
'Hoja_VEN.isVisible = False
Hojas = Doc.Sheets
Hojas.insertNewByName("V_" + sucursal, 2)
Hoja_VSuc = Hojas.getByName("V_" & sucursal)
Cell_A1 = Hoja_VSuc.getCellrangeByName("A1")
CellAddress = Cell_A1.CellAddress
Hoja_VSuc.copyRange(CellAddress, RAddress)
Cell_A3 = Hoja_VSuc.getCellrangeByName("A3")
Cell_A3.string = entidad
Cell_B3 = Hoja_VSuc.getCellrangeByName("B3")
Cell_B3.string = sucursal

End Sub

Sub Borrar
Hojas = ThisComponent.Sheets
HojaEnum = Hojas.createEnumeration
While HojaEnum.hasMoreElements
	Hoja = HojaEnum.nextElement
	If Hoja.Name <> "INICIO" AND Hoja.Name <> "VENTA" AND Hoja.Name <> "denom" AND Hoja.Name <> "COMPRA" Then
		Hojas.removeByName(Hoja.Name)
	End If
Wend
end sub
pedrito76
Mensajes: 78
Registrado: Jue Jul 08, 2010 3:02 pm

Re: Una macro de vba a oobasic

Mensaje por pedrito76 »

Y que es lo que hace exactamente esta macro? :roll:
OpenOffice.org 3.2
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Una macro de vba a oobasic

Mensaje por FJCC-ES »

La macro “genera”:
1.Inserta una hoja nueva cuyo nombre depende del texto en al celda INICIO.C8
2.Copia VENTA.A2 a A1 de la hoja nueva.
3.Copia el texto de INICIO.C7 a A3 de la hoja nueva.
4.Copia el texto de INICIO.C8 a B3 de la hoja nueva.

La macro Borrar elimina todas las hojas excepto VENTA, INICIO, denom y COMPRA

Código: Seleccionar todo

Sub genera
'Usar el documento que llamo la macro
Doc = ThisComponent

'Hoja_IN = la hoja INICIO   
Hoja_IN = Doc.Sheets.getByName("INICIO")

'entidad = el texto de la celda INICIO.C7
entidad = Hoja_IN.getCellrangeByName("C7").getString()

'sucursal = el texto de la celda INICIO.C8 
sucursal = Hoja_IN.getCellrangeByName("C8").getString()

'Hoja_VEN = la hoja VENTA
Hoja_VEN = Doc.Sheets.getByName("VENTA")

'Hoja_VEN.isVisible = True

'VEN_Cell = la celda VENTA.A2
VEN_Cell = Hoja_VEN.getCellrangeByName("A2")

'Guardar el RangeAddress de VEN_Cell para copiar la después
RAddress = VEN_Cell.RangeAddress

'Hoja_VEN.isVisible = False

'Hojas contiene todas las hojas del documento
Hojas = Doc.Sheets

'Crear una hoja nueva con el nombre "V_" + sucursal 
Hojas.insertNewByName("V_" + sucursal, 2)

'Hoja_VSuc = la hoja nueva 
Hoja_VSuc = Hojas.getByName("V_" + sucursal)

'Cell_A1 = la celda A1 de la hoja nueva
Cell_A1 = Hoja_VSuc.getCellrangeByName("A1")

'Guardar el CellAddress de Cell_A1 para copiar VENTA.A2 
CellAddress = Cell_A1.CellAddress

'Pegar VENTA.A2 en celda A1 de la hoja nueva
Hoja_VSuc.copyRange(CellAddress, RAddress)


'Cell_A3 = la celda A3 de la hoja nueva
Cell_A3 = Hoja_VSuc.getCellrangeByName("A3")

'Poner el texto guardado en entidad en la celda A3
Cell_A3.string = entidad

'Cell_B3 = la celda B3 de la hoja nueva
Cell_B3 = Hoja_VSuc.getCellrangeByName("B3")

'Poner el texto guardado en sucural en la celda B3
Cell_B3.string = sucursal

End Sub 
short
Mensajes: 10
Registrado: Vie Jul 30, 2010 8:34 am

Re: Una macro de vba a oobasic

Mensaje por short »

Perdonar, por no explicarla bien. Efectivamente es una hoja excel, que tiene dos botones (inicio, compra) y dos cuadros de texto entidad y sucursal. Esta hoja excel, lo que hace es al pinchar en el boton compra, lanza la macro genera y abre una nueva ventana pasandole los compos entidad y sucursal que son (C7 y C8).

He intentado poner la macro que me habeis facilitado y me da problemas en "Hojas.insertNewByName("V_" + sucursal, 2)" me dice que hay un error de sintaxis. Puede ser por la versión de OpenOffice que tengo instalada? Tengo la versión 3.

Gracias por vuestra ayuda

Un saludo
openoffice 3 en windows xp
short
Mensajes: 10
Registrado: Vie Jul 30, 2010 8:34 am

Re: Una macro de vba a oobasic

Mensaje por short »

Chicos estoy descubriendo que lo que hace es abrir una hoja oculta que contiene unas tablas.
openoffice 3 en 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 »

Si, la muestra y después la oculta, pero esto no es necesario, la macro que te paso el compañero hace casi lo mismo, checalo por favor...

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