[RESUELTO] Problema con macro oob

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Avatar de Usuario
nitocoli
Mensajes: 5
Registrado: Dom Abr 15, 2018 10:15 pm

[RESUELTO] Problema con macro oob

Mensaje por nitocoli »

Hola a todos... tengo un problema con un macro que no me funciona.
lo grabe utilizando OpenOffice 4.1.5 . a la hora de ejeutarlo no funciona... hice el mismo en excel 2003 y funciona perfecto...

el codigo generado en oob es este:

Código: Seleccionar todo

Attribute VB_Name = "Módulo1"

sub AUTO
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "StringName"
args1(0).Value = "0"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "C"

dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Flags"
args3(0).Value = "C"

dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, args3())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:InsertColumns", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:InsertColumns", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

rem ----------------------------------------------------------------------
dim args10(0) as new com.sun.star.beans.PropertyValue
args10(0).Name = "Flags"
args10(0).Value = "C"

dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, args10())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DataFilterAutoFilter", "", 0, Array())

rem ----------------------------------------------------------------------
dim args12(0) as new com.sun.star.beans.PropertyValue
args12(0).Name = "ToPoint"
args12(0).Value = "$D$1048576"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args12())

rem ----------------------------------------------------------------------
dim args13(0) as new com.sun.star.beans.PropertyValue
args13(0).Name = "ToPoint"
args13(0).Value = "$A$2:$F$8"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args13())

rem ----------------------------------------------------------------------
dim args14(0) as new com.sun.star.beans.PropertyValue
args14(0).Name = "Flags"
args14(0).Value = "SVDFN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args14())

rem ----------------------------------------------------------------------
dim args15(0) as new com.sun.star.beans.PropertyValue
args15(0).Name = "ToPoint"
args15(0).Value = "$G$7"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args15())

rem ----------------------------------------------------------------------
dim args16(0) as new com.sun.star.beans.PropertyValue
args16(0).Name = "ToPoint"
args16(0).Value = "$A$2:$F$8"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args16())


end sub

y el de excel es este:

Código: Seleccionar todo

Sub stock01()
'
' stock01 Macro
' Macro grabada el 14/4/2018 por NITO
'

'
    Columns("C:C").Select
    ActiveWindow.SmallScroll ToRight:=3
    Columns("C:R").Select
    Selection.Delete Shift:=xlToLeft
    Columns("E:E").Select
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 5
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 7
    ActiveWindow.ScrollColumn = 8
    ActiveWindow.ScrollColumn = 9
    ActiveWindow.ScrollColumn = 10
    ActiveWindow.ScrollColumn = 11
    ActiveWindow.ScrollColumn = 12
    ActiveWindow.ScrollColumn = 13
    ActiveWindow.ScrollColumn = 14
    ActiveWindow.ScrollColumn = 15
    ActiveWindow.ScrollColumn = 16
    ActiveWindow.ScrollColumn = 17
    ActiveWindow.ScrollColumn = 18
    ActiveWindow.ScrollColumn = 19
    ActiveWindow.ScrollColumn = 20
    ActiveWindow.ScrollColumn = 21
    ActiveWindow.ScrollColumn = 22
    ActiveWindow.ScrollColumn = 23
    ActiveWindow.ScrollColumn = 24
    ActiveWindow.ScrollColumn = 25
    ActiveWindow.ScrollColumn = 26
    ActiveWindow.ScrollColumn = 27
    ActiveWindow.ScrollColumn = 28
    ActiveWindow.ScrollColumn = 29
    ActiveWindow.ScrollColumn = 30
    ActiveWindow.ScrollColumn = 31
    ActiveWindow.ScrollColumn = 32
    ActiveWindow.ScrollColumn = 33
    ActiveWindow.ScrollColumn = 34
    ActiveWindow.ScrollColumn = 35
    ActiveWindow.ScrollColumn = 36
    ActiveWindow.ScrollColumn = 37
    ActiveWindow.ScrollColumn = 38
    ActiveWindow.ScrollColumn = 39
    ActiveWindow.ScrollColumn = 40
    ActiveWindow.ScrollColumn = 41
    ActiveWindow.ScrollColumn = 42
    ActiveWindow.ScrollColumn = 43
    ActiveWindow.ScrollColumn = 44
    ActiveWindow.ScrollColumn = 45
    ActiveWindow.ScrollColumn = 46
    ActiveWindow.ScrollColumn = 47
    Columns("E:BC").Select
    Selection.Delete Shift:=xlToLeft
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Columns("G:G").Select
    Selection.Cut
    Columns("C:C").Select
    ActiveSheet.Paste
    Columns("H:H").Select
    Selection.Cut
    Columns("B:B").Select
    ActiveSheet.Paste
    Selection.ColumnWidth = 1.43
    Columns("C:C").EntireColumn.AutoFit
    Columns("D:D").EntireColumn.AutoFit
    Columns("G:G").Select
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 5
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 7
    ActiveWindow.ScrollColumn = 8
    ActiveWindow.ScrollColumn = 9
    ActiveWindow.ScrollColumn = 10
    ActiveWindow.ScrollColumn = 11
    ActiveWindow.ScrollColumn = 12
    ActiveWindow.ScrollColumn = 13
    ActiveWindow.ScrollColumn = 14
    ActiveWindow.ScrollColumn = 15
    ActiveWindow.ScrollColumn = 16
    ActiveWindow.ScrollColumn = 17
    ActiveWindow.ScrollColumn = 18
    ActiveWindow.ScrollColumn = 19
    ActiveWindow.ScrollColumn = 20
    ActiveWindow.ScrollColumn = 21
    ActiveWindow.ScrollColumn = 20
    ActiveWindow.ScrollColumn = 19
    ActiveWindow.ScrollColumn = 18
    ActiveWindow.ScrollColumn = 17
    ActiveWindow.ScrollColumn = 16
    ActiveWindow.ScrollColumn = 15
    ActiveWindow.ScrollColumn = 14
    ActiveWindow.ScrollColumn = 13
    ActiveWindow.ScrollColumn = 14
    ActiveWindow.ScrollColumn = 15
    ActiveWindow.ScrollColumn = 17
    ActiveWindow.ScrollColumn = 18
    ActiveWindow.ScrollColumn = 19
    ActiveWindow.ScrollColumn = 20
    ActiveWindow.ScrollColumn = 21
    ActiveWindow.ScrollColumn = 22
    ActiveWindow.ScrollColumn = 24
    ActiveWindow.ScrollColumn = 25
    ActiveWindow.ScrollColumn = 26
    ActiveWindow.ScrollColumn = 27
    ActiveWindow.ScrollColumn = 28
    ActiveWindow.ScrollColumn = 29
    ActiveWindow.ScrollColumn = 30
    ActiveWindow.ScrollColumn = 31
    ActiveWindow.ScrollColumn = 32
    ActiveWindow.ScrollColumn = 33
    ActiveWindow.ScrollColumn = 34
    ActiveWindow.ScrollColumn = 35
    ActiveWindow.ScrollColumn = 36
    ActiveWindow.ScrollColumn = 37
    ActiveWindow.ScrollColumn = 38
    ActiveWindow.ScrollColumn = 39
    ActiveWindow.ScrollColumn = 40
    ActiveWindow.ScrollColumn = 41
    ActiveWindow.ScrollColumn = 42
    ActiveWindow.ScrollColumn = 43
    ActiveWindow.ScrollColumn = 44
    ActiveWindow.ScrollColumn = 45
    ActiveWindow.ScrollColumn = 46
    ActiveWindow.ScrollColumn = 47
    ActiveWindow.ScrollColumn = 48
    ActiveWindow.ScrollColumn = 49
    ActiveWindow.ScrollColumn = 50
    ActiveWindow.ScrollColumn = 51
    ActiveWindow.ScrollColumn = 52
    ActiveWindow.ScrollColumn = 53
    ActiveWindow.ScrollColumn = 54
    ActiveWindow.ScrollColumn = 55
    ActiveWindow.ScrollColumn = 56
    ActiveWindow.ScrollColumn = 57
    ActiveWindow.ScrollColumn = 58
    ActiveWindow.ScrollColumn = 59
    ActiveWindow.ScrollColumn = 60
    ActiveWindow.ScrollColumn = 61
    ActiveWindow.ScrollColumn = 62
    ActiveWindow.ScrollColumn = 63
    ActiveWindow.ScrollColumn = 64
    ActiveWindow.ScrollColumn = 65
    ActiveWindow.ScrollColumn = 66
    ActiveWindow.ScrollColumn = 67
    ActiveWindow.ScrollColumn = 68
    ActiveWindow.ScrollColumn = 69
    ActiveWindow.ScrollColumn = 68
    ActiveWindow.ScrollColumn = 67
    ActiveWindow.ScrollColumn = 66
    ActiveWindow.ScrollColumn = 65
    ActiveWindow.ScrollColumn = 64
    ActiveWindow.ScrollColumn = 63
    ActiveWindow.ScrollColumn = 62
    ActiveWindow.ScrollColumn = 60
    ActiveWindow.ScrollColumn = 59
    ActiveWindow.ScrollColumn = 58
    ActiveWindow.ScrollColumn = 57
    ActiveWindow.ScrollColumn = 58
    Columns("G:BQ").Select
    Selection.Delete Shift:=xlToLeft
    Columns("E:E").ColumnWidth = 10.57
    Columns("E:E").EntireColumn.AutoFit
    Columns("F:F").EntireColumn.AutoFit
    Columns("E:F").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=1, Criteria1:="0"
    Selection.AutoFilter Field:=2, Criteria1:="0"
    Range("A2:F2221").Select
    Selection.EntireRow.Delete
    ActiveWindow.SmallScroll Down:=-6
    Selection.AutoFilter Field:=1
    Selection.AutoFilter Field:=2
    Range("H6").Select
End Sub


alguien podra ayudarme a resolver el error y explicarme en que me equivoco. o si la funcion de grabar macros no sirve en open office??
utileze la pagina https://www.business-spreadsheets.com/vba2oo.asp vi que la recomendaron en este foro pero me dio como resultado este codigo que tampoco funciona

Código: Seleccionar todo

Sub stock01()
'
' stock01 Macro
' Macro grabada el 14/4/2018 por NITO
'

'
    Columns("C:C").Select
    ActiveWindow.SmallScroll ToRight:=3
    Columns("C:R").Select
    Selection.Delete Shift:=xlToLeft
    Columns("E:E").Select
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 5
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 7
    ActiveWindow.ScrollColumn = 8
    ActiveWindow.ScrollColumn = 9
    ActiveWindow.ScrollColumn = 10
    ActiveWindow.ScrollColumn = 11
    ActiveWindow.ScrollColumn = 12
    ActiveWindow.ScrollColumn = 13
    ActiveWindow.ScrollColumn = 14
    ActiveWindow.ScrollColumn = 15
    ActiveWindow.ScrollColumn = 16
    ActiveWindow.ScrollColumn = 17
    ActiveWindow.ScrollColumn = 18
    ActiveWindow.ScrollColumn = 19
    ActiveWindow.ScrollColumn = 20
    ActiveWindow.ScrollColumn = 21
    ActiveWindow.ScrollColumn = 22
    ActiveWindow.ScrollColumn = 23
    ActiveWindow.ScrollColumn = 24
    ActiveWindow.ScrollColumn = 25
    ActiveWindow.ScrollColumn = 26
    ActiveWindow.ScrollColumn = 27
    ActiveWindow.ScrollColumn = 28
    ActiveWindow.ScrollColumn = 29
    ActiveWindow.ScrollColumn = 30
    ActiveWindow.ScrollColumn = 31
    ActiveWindow.ScrollColumn = 32
    ActiveWindow.ScrollColumn = 33
    ActiveWindow.ScrollColumn = 34
    ActiveWindow.ScrollColumn = 35
    ActiveWindow.ScrollColumn = 36
    ActiveWindow.ScrollColumn = 37
    ActiveWindow.ScrollColumn = 38
    ActiveWindow.ScrollColumn = 39
    ActiveWindow.ScrollColumn = 40
    ActiveWindow.ScrollColumn = 41
    ActiveWindow.ScrollColumn = 42
    ActiveWindow.ScrollColumn = 43
    ActiveWindow.ScrollColumn = 44
    ActiveWindow.ScrollColumn = 45
    ActiveWindow.ScrollColumn = 46
    ActiveWindow.ScrollColumn = 47
    Columns("E:BC").Select
    Selection.Delete Shift:=xlToLeft
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Columns("G:G").Select
    Selection.Cut
    Columns("C:C").Select
    ThisComponent.CurrentController.ActiveSheet.Paste
    Columns("H:H").Select
    Selection.Cut
    Columns("B:B").Select
    ThisComponent.CurrentController.ActiveSheet.Paste
    Selection.ColumnWidth = 1.43
    Columns("C:C").EntireColumn.AutoFit
    Columns("D:D").EntireColumn.AutoFit
    Columns("G:G").Select
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 5
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 7
    ActiveWindow.ScrollColumn = 8
    ActiveWindow.ScrollColumn = 9
    ActiveWindow.ScrollColumn = 10
    ActiveWindow.ScrollColumn = 11
    ActiveWindow.ScrollColumn = 12
    ActiveWindow.ScrollColumn = 13
    ActiveWindow.ScrollColumn = 14
    ActiveWindow.ScrollColumn = 15
    ActiveWindow.ScrollColumn = 16
    ActiveWindow.ScrollColumn = 17
    ActiveWindow.ScrollColumn = 18
    ActiveWindow.ScrollColumn = 19
    ActiveWindow.ScrollColumn = 20
    ActiveWindow.ScrollColumn = 21
    ActiveWindow.ScrollColumn = 20
    ActiveWindow.ScrollColumn = 19
    ActiveWindow.ScrollColumn = 18
    ActiveWindow.ScrollColumn = 17
    ActiveWindow.ScrollColumn = 16
    ActiveWindow.ScrollColumn = 15
    ActiveWindow.ScrollColumn = 14
    ActiveWindow.ScrollColumn = 13
    ActiveWindow.ScrollColumn = 14
    ActiveWindow.ScrollColumn = 15
    ActiveWindow.ScrollColumn = 17
    ActiveWindow.ScrollColumn = 18
    ActiveWindow.ScrollColumn = 19
    ActiveWindow.ScrollColumn = 20
    ActiveWindow.ScrollColumn = 21
    ActiveWindow.ScrollColumn = 22
    ActiveWindow.ScrollColumn = 24
    ActiveWindow.ScrollColumn = 25
    ActiveWindow.ScrollColumn = 26
    ActiveWindow.ScrollColumn = 27
    ActiveWindow.ScrollColumn = 28
    ActiveWindow.ScrollColumn = 29
    ActiveWindow.ScrollColumn = 30
    ActiveWindow.ScrollColumn = 31
    ActiveWindow.ScrollColumn = 32
    ActiveWindow.ScrollColumn = 33
    ActiveWindow.ScrollColumn = 34
    ActiveWindow.ScrollColumn = 35
    ActiveWindow.ScrollColumn = 36
    ActiveWindow.ScrollColumn = 37
    ActiveWindow.ScrollColumn = 38
    ActiveWindow.ScrollColumn = 39
    ActiveWindow.ScrollColumn = 40
    ActiveWindow.ScrollColumn = 41
    ActiveWindow.ScrollColumn = 42
    ActiveWindow.ScrollColumn = 43
    ActiveWindow.ScrollColumn = 44
    ActiveWindow.ScrollColumn = 45
    ActiveWindow.ScrollColumn = 46
    ActiveWindow.ScrollColumn = 47
    ActiveWindow.ScrollColumn = 48
    ActiveWindow.ScrollColumn = 49
    ActiveWindow.ScrollColumn = 50
    ActiveWindow.ScrollColumn = 51
    ActiveWindow.ScrollColumn = 52
    ActiveWindow.ScrollColumn = 53
    ActiveWindow.ScrollColumn = 54
    ActiveWindow.ScrollColumn = 55
    ActiveWindow.ScrollColumn = 56
    ActiveWindow.ScrollColumn = 57
    ActiveWindow.ScrollColumn = 58
    ActiveWindow.ScrollColumn = 59
    ActiveWindow.ScrollColumn = 60
    ActiveWindow.ScrollColumn = 61
    ActiveWindow.ScrollColumn = 62
    ActiveWindow.ScrollColumn = 63
    ActiveWindow.ScrollColumn = 64
    ActiveWindow.ScrollColumn = 65
    ActiveWindow.ScrollColumn = 66
    ActiveWindow.ScrollColumn = 67
    ActiveWindow.ScrollColumn = 68
    ActiveWindow.ScrollColumn = 69
    ActiveWindow.ScrollColumn = 68
    ActiveWindow.ScrollColumn = 67
    ActiveWindow.ScrollColumn = 66
    ActiveWindow.ScrollColumn = 65
    ActiveWindow.ScrollColumn = 64
    ActiveWindow.ScrollColumn = 63
    ActiveWindow.ScrollColumn = 62
    ActiveWindow.ScrollColumn = 60
    ActiveWindow.ScrollColumn = 59
    ActiveWindow.ScrollColumn = 58
    ActiveWindow.ScrollColumn = 57
    ActiveWindow.ScrollColumn = 58
    Columns("G:BQ").Select
    Selection.Delete Shift:=xlToLeft
    Columns("E:E").ColumnWidth = 10.57
    Columns("E:E").EntireColumn.AutoFit
    Columns("F:F").EntireColumn.AutoFit
    Columns("E:F").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=1, Criteria1:="0"
    Selection.AutoFilter Field:=2, Criteria1:="0"
    Dim oSheet as Object[n]oSheet = ThisComponent.CurrentController.ThisComponent.CurrentController.ActiveSheet[n]ThisComponent.CurrentController.select(oSheet.getCellDim oSheet as Object[n]oSheet = ThisComponent.CurrentController.ActiveSheet[n]oSheet.getCellRangeByName($1)ByName(("A2:F2221")))
    Selection.EntireRow.Delete
    ActiveWindow.SmallScroll Down:=-6
    Selection.AutoFilter Field:=1
    Selection.AutoFilter Field:=2
    Dim oSheet as Object[n]oSheet = ThisComponent.CurrentController.ThisComponent.CurrentController.ActiveSheet[n]ThisComponent.CurrentController.select(oSheet.getCellDim oSheet as Object[n]oSheet = ThisComponent.CurrentController.ActiveSheet[n]oSheet.getCellRangeByName($1)ByName(("H6")))
End Sub
les agradezco mucho y me encantaria aprender mucho mas sobre OO . SALUDOS!!
OpenOffice 4.1.5 en Windows 10 X64
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Problema con macro oob

Mensaje por mauricio »

Si, la grabadora de macros sirve, pero para cosas sencillas y bien estructuradas.

Si agregas un archivo de ejemplos detallando lo que tienes y lo que esperas lograr, será más fácil ayudarte.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Problema con macro oob

Mensaje por fornelasa »

ummmm, varios temas:
1) La grabadora de macros de Excel es muy superior a la de Calc.
2) Tu macro Excel grabada está muy mal hecha, ¿por ejemplo para que sirve esto?

Código: Seleccionar todo

ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 5
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 7
    ActiveWindow.ScrollColumn = 8
    ActiveWindow.ScrollColumn = 9
    ActiveWindow.ScrollColumn = 10
    ActiveWindow.ScrollColumn = 11
    ActiveWindow.ScrollColumn = 12
    ActiveWindow.ScrollColumn = 13
3) ¿Quien te recomendó el vinculo de abajito? ..... digo, para de una vez demandarlo :mrgreen:
nitocoli escribió:utileze la pagina https://www.business-spreadsheets.com/vba2oo.asp vi que la recomendaron en este foro
4) Como ya lo han comentado, explica claramente lo que deseas hacer y envía un archivo ejemplo (si envías el archivo de Excel por favor quitarle toda la basura que trae el código).
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
nitocoli
Mensajes: 5
Registrado: Dom Abr 15, 2018 10:15 pm

Re: Problema con macro oob

Mensaje por nitocoli »

mauricio escribió:Si, la grabadora de macros sirve, pero para cosas sencillas y bien estructuradas.

Si agregas un archivo de ejemplos detallando lo que tienes y lo que esperas lograr, será más fácil ayudarte.

Saludos
fornelasa escribió:
Hola chicos. Gracias por su respuesta...
Explico bien asi se entiende el por q necesito el macro.
Trabajo en un grupo de auditoria. Utilizamos el sistema lince de zoologic. A la hora de guardar el informe. Se genera un archivo xls. Lo cual nosotros tenemos que modificarlo para obtener mas claro los resultados. Esto lo hacemos varias veces al dia y se pierde mucho tiempo. Por q no todos lo hacen rapidamente y se atrasa bastante...
Voy a detallar los pasos a seguir y a subir el archivo...
Borrar de la columna C a la R.
Borrar de la columna E a la BC.
Agregar dos columnas vacias en B y en C.
Cortar y pegar contenido de la columna G en la C y de la columna H en la B
luego borrar todos los datos que quedan de G en adelante ...
y a las columnas E y F . Seleccionarlas y hacer un filtro automatico. Seleccionar el rango 0 en ambas y borrar su resultado ( en esta parte seria por lo menos seleccionar hasta la fila 5000 o mas por q no siempre da los mismos resultados. Y luego en el filtro automatico seleccionamos todo en las dos columnas... y listo asi quedaria.

Este es el archivo .xls sin editar
STOCK.xls
archivo sin editar
(37 KiB) Descargado 231 veces
Este es el archivo .xls editado
OPENSTOCK.xls
archivo editado
(11.5 KiB) Descargado 245 veces
claramente el macro es para editar el archivo. en excel funciono pero la empresa utiliza aoo.
en aoo grabandolo no me funciona. y no entiendo el error que me da al finalizar. " se esperaba sub." ---
gracias espero no haberlos mareado mucho
OpenOffice 4.1.5 en Windows 10 X64
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Problema con macro oob

Mensaje por mauricio »

¿alguna razón en especial para mover las columnas A72 y A73 entre las columnas A1 y A2?
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Problema con macro oob

Mensaje por mauricio »

Para el filtrado por ceros, veo que en tu ejemplo los ceros se corresponden en las dos columnas, ¿siempre es así o pueden venir combinados y entonces por eso se filtra cero en las dos columnas?
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Problema con macro oob

Mensaje por mauricio »

Con EasyMacro es trivial:
https://gitlab.com/mauriciobaeza/easy-m ... s/index-es

Código: Seleccionar todo

 from libo import LIBO 


def main():
    app = LIBO()
    sheet = app.doc.active
    rango = sheet['A1'].current_region
    rango.columns.removeByIndex(2, 16)
    rango.columns.removeByIndex(4, 51)
    rango.columns.insertByIndex(1, 2)
    rango[0:,1].data = rango[0:,7].data
    rango[0:,2].data = rango[0:,6].data
    rango.columns.removeByIndex(6, 11)

    rows = []
    for i, row in enumerate(rango.data):
        if not row[-1] and not row[-2]:
            rows.append(i)

    for i in reversed(rows):
        rango.rows.removeByIndex(i, 1)
    return
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
nitocoli
Mensajes: 5
Registrado: Dom Abr 15, 2018 10:15 pm

Re: Problema con macro oob

Mensaje por nitocoli »

La razon de las columnas es para organizar mejor el codigo... el archivo q subi es un ejemplo... pero tiene que quedar ordenado por (codigo. Color. Talle y nombre del articulo... las dos ultimas son cantidad en stock. Y cantidad tomadas fisicamente... los resultados en 0 pueden dar mezclados por eso se realiza el filtro automatico
OpenOffice 4.1.5 en Windows 10 X64
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Problema con macro oob

Mensaje por fornelasa »

Creo, tal vez, esta macro hace más o menos lo mismo (es una macro para OpenOffice) , una macro ya muy recortada a la que tenias, la macro esta en VBA. Después cuando haya más tiempo la traduciré (bueno lo intentaré) :mrgreen:

Código: Seleccionar todo

Option VBASupport 1
Sub stock01()
     Columns("C:R").Delete Shift:=xlToLeft
     Columns("E:BC").Delete Shift:=xlToLeft
     Columns("B:B").Insert Shift:=xlToRight
     Columns("B:B").Insert Shift:=xlToRight
     Columns("G:G").Cut
     Columns("C:C").Select
     ActiveSheet.Paste
     Columns("H:H").Cut
     Columns("B:B").Select
     ActiveSheet.Paste
     Columns("G:BQ").Delete Shift:=xlToLeft
     Columns("E:F").AutoFilter Field:=1, Criteria1:="0", Field:=2, Criteria1:="0"
     Range(Range("A2"), Range("A2").End(xlDown)).SpecialCells(xlCellTypeVisible).Select     
     Selection.EntireRow.Delete       
     Columns("E:F").AutoFilter Field:=1, Field:=2
     Columns("A:F").EntireColumn.AutoFit
     Range("H6").Select
End Sub
Saludos, Federico.
Adjuntos
STOCK_II.ods
Limpiar datos
(13.68 KiB) Descargado 229 veces
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Problema con macro oob

Mensaje por fornelasa »

Aquí una versión para LibreOffice y ApacheOpenOffice en StarBasic.
Saludos.
Adjuntos
Stock_rap.ods
Limpiar datos.
(14.98 KiB) Descargado 236 veces
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Problema con macro oob

Mensaje por fornelasa »

nitocoli escribió:La razón de las columnas es para organizar mejor el código... el archivo q subí es un ejemplo... pero tiene que quedar ordenado por (código. Color. Talle y nombre del articulo... las dos ultimas son cantidad en stock. Y cantidad tomadas físicamente... los resultados en 0 pueden dar mezclados por eso se realiza el filtro automático
Si ok, bien.
Todos los 3 ejemplos de macro que se te han enviado (mauricio y yo) funcionan (creo) exactamente a como lo hace tu macro VBA.

Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
nitocoli
Mensajes: 5
Registrado: Dom Abr 15, 2018 10:15 pm

Re: Problema con macro oob

Mensaje por nitocoli »

fornelasa escribió:Creo, tal vez, esta macro hace más o menos lo mismo (es una macro para OpenOffice) , una macro ya muy recortada a la que tenias, la macro esta en VBA. Después cuando haya más tiempo la traduciré (bueno lo intentaré) :mrgreen:

Código: Seleccionar todo

Option VBASupport 1
Sub stock01()
     Columns("C:R").Delete Shift:=xlToLeft
     Columns("E:BC").Delete Shift:=xlToLeft
     Columns("B:B").Insert Shift:=xlToRight
     Columns("B:B").Insert Shift:=xlToRight
     Columns("G:G").Cut
     Columns("C:C").Select
     ActiveSheet.Paste
     Columns("H:H").Cut
     Columns("B:B").Select
     ActiveSheet.Paste
     Columns("G:BQ").Delete Shift:=xlToLeft
     Columns("E:F").AutoFilter Field:=1, Criteria1:="0", Field:=2, Criteria1:="0"
     Range(Range("A2"), Range("A2").End(xlDown)).SpecialCells(xlCellTypeVisible).Select     
     Selection.EntireRow.Delete       
     Columns("E:F").AutoFilter Field:=1, Field:=2
     Columns("A:F").EntireColumn.AutoFit
     Range("H6").Select
End Sub
Saludos, Federico.
Hola federico... muchas gracias este funciona perfecto. ahora veo q todo el codigo q me aparecia era al seleccionar las columnas. voy a empezar aprender a escribir el codigo directamente para ahorrar tantos pasos. quedo genial. saludos nuevamente
OpenOffice 4.1.5 en Windows 10 X64
Avatar de Usuario
nitocoli
Mensajes: 5
Registrado: Dom Abr 15, 2018 10:15 pm

Re: Problema con macro oob

Mensaje por nitocoli »

mauricio escribió:Con EasyMacro es trivial:
https://gitlab.com/mauriciobaeza/easy-m ... s/index-es

Código: Seleccionar todo

 from libo import LIBO 


def main():
    app = LIBO()
    sheet = app.doc.active
    rango = sheet['A1'].current_region
    rango.columns.removeByIndex(2, 16)
    rango.columns.removeByIndex(4, 51)
    rango.columns.insertByIndex(1, 2)
    rango[0:,1].data = rango[0:,7].data
    rango[0:,2].data = rango[0:,6].data
    rango.columns.removeByIndex(6, 11)

    rows = []
    for i, row in enumerate(rango.data):
        if not row[-1] and not row[-2]:
            rows.append(i)

    for i in reversed(rows):
        rango.rows.removeByIndex(i, 1)
    return
hola mauricio... este no me funciono. le agregue el sub al principio y al final sub end pero tampoco sirvio... gracias de todos modos y perdon por molestar... son unos genios. mil gracias por la buena onda. saludos
OpenOffice 4.1.5 en Windows 10 X64
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Problema con macro oob

Mensaje por fornelasa »

Hola Raul, que bueno que la consulta ha sido resuelta :super:

Solo como cultura general me gustaría comentar lo siguiente hablando de LibreOffice y Windows

El archivo libo.py al que hace referencia Mauricio lineas arriba debe copiarse y después almacenarse en la ruta de abajo ; si fuera necesario hay que crear todas las carpetas para obtener dicha ruta.

C:\Users\Federico\AppData\Roaming\LibreOffice\4\user\Scripts\python\pythonpath\

La macro presentada en python y que fue creada con easy-macro debe ser copiada a un archivo de texto con el programa bloc de notas o con Geany o con etc., dicho archivo lo podríamos nombrar como por ejemplo limpiar.py

El archivo limpiar.py debe ser almacenado en una ruta similar a:

C:\Program Files\LibreOffice 5\share\Scripts\python\python\

Ejecutamos limpiar.py con el menú herramientas <> macros <> organizar macros ……. Etc.


Imagen
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Responder