macro con rango dinamico
macro con rango dinamico
Buena tarde, tengo una macro que copia los valores filtrados de acuerdo al criterio seleccionado. En el código tengo un rango establecido desde el cual se copian los datos. Tal y como está funciona bien (A1:X300). Resulta que en el archivo del que filtro los datos, algunas veces adiciono columnas o filas y debo modificar ese rango con el fin que el filtro quede bien realizado.
Para solucionar el tema de estar modificando ese rango, use la formula: DESREF($A$1;0;0;CONTARA($A:$A);CONTARA($1:$1)) y la introduje en la línea 143 del código así:
Como está actualmente:
oRange = oSheet.GetCellRangeByName("A1:X300")
Como quedaría:
oRange = oSheet.GetCellRangeByName.Formula = "=DESREF($A$1;0;0;CONTARA($A:$A);CONTARA($1:$1))"
Pero al ejecutar se genera un error.
PD: En la función DESREF no incluí internamente Hoja3! debido a que mes a mes debo ir agregando hojas
Alguien me puede decir de que manera puedo hacer esto?
Muchas gracias
Para solucionar el tema de estar modificando ese rango, use la formula: DESREF($A$1;0;0;CONTARA($A:$A);CONTARA($1:$1)) y la introduje en la línea 143 del código así:
Como está actualmente:
oRange = oSheet.GetCellRangeByName("A1:X300")
Como quedaría:
oRange = oSheet.GetCellRangeByName.Formula = "=DESREF($A$1;0;0;CONTARA($A:$A);CONTARA($1:$1))"
Pero al ejecutar se genera un error.
PD: En la función DESREF no incluí internamente Hoja3! debido a que mes a mes debo ir agregando hojas
Alguien me puede decir de que manera puedo hacer esto?
Muchas gracias
- Adjuntos
-
- Cuadro_de_dialogo_Calc.ods
- (30.83 KiB) Descargado 189 veces
OpenOffice 3.1 en Windows Vista
Re: macro con rango dinamico
Por favor, asegura te publicar tu pregunta en el foro correcto, he movido este tema desde el foro incorrecto.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
- PepeOooSevilla
- Mensajes: 1480
- Registrado: Sab Abr 04, 2009 6:10 pm
- Ubicación: Sevilla (España)
Re: macro con rango dinamico
Hola.
Prueba modificando .Formula por .FormulaLocal.
Saludos cordiales.
Prueba modificando .Formula por .FormulaLocal.
Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Re: macro con rango dinamico
Buena tarde,
Coloque la modificación que sugiere el señor PepeOooSevilla pero sale el siguiente error:
Error de ejecución de BASIC.
Se ha producido una excepción
Type: com.sun.star.lang.IllegalArgumentException
Message: expected 1 arguments, got 0.
La linea quedo así:
oRange = oSheet.GetCellRangeByName.FormulaLocal =("=DESREF($A$1;0;0;CONTARA($A:$A);CONTARA($1:$1))")
El mismo error sale si quito los paréntesis que van después del igual
Quedo pendiente.
Gracias
Coloque la modificación que sugiere el señor PepeOooSevilla pero sale el siguiente error:
Error de ejecución de BASIC.
Se ha producido una excepción
Type: com.sun.star.lang.IllegalArgumentException
Message: expected 1 arguments, got 0.
La linea quedo así:
oRange = oSheet.GetCellRangeByName.FormulaLocal =("=DESREF($A$1;0;0;CONTARA($A:$A);CONTARA($1:$1))")
El mismo error sale si quito los paréntesis que van después del igual
Quedo pendiente.
Gracias
OpenOffice 3.1 en Windows Vista
Re: macro con rango dinamico
Eso es incorrecto:
Debes de usarlo como en tu primer mensaje:
entonces si:
pero... si, tu_formula esta mal, tampoco funcionará
En general, es mejor usar solo Formula y usar en el código los nombres de las funciones en ingles.
pero... viendo lo que tienes en la Hoja2 donde aplicas algo de esto, esa hoja esta bastante mal estructurada, solo mira los encabezados.
Código: Seleccionar todo
oSheet.GetCellRangeByName.FormulaLocal
Código: Seleccionar todo
oRange = oSheet.GetCellRangeByName("A1:X300")
Código: Seleccionar todo
oRange.FormulaLocal = TU_FORMULA
En general, es mejor usar solo Formula y usar en el código los nombres de las funciones en ingles.
pero... viendo lo que tienes en la Hoja2 donde aplicas algo de esto, esa hoja esta bastante mal estructurada, solo mira los encabezados.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Re: macro con rango dinamico
Buen dia don Mauricio
Debes de usarlo como en tu primer mensaje:
CÓDIGO: SELECCIONAR TODO EXPANDIR VISTA
oRange = oSheet.GetCellRangeByName("A1:X300")
Si uso esto, de acuerdo con lo que comenta, no hago nada pues al modificar algo que no abarque el rango, el filtro no me lo va a tomar y tendria que seguir haciendo las modificaciones manuales.
entonces si:
CÓDIGO: SELECCIONAR TODO EXPANDIR VISTA
oRange.FormulaLocal =("=OFFSET($A$1;0;0;COUNTA($A:$A);COUNTA($1:$1))")
Y con respecto a esto, solo use esta línea y no incluí lo sugerido inicialmente: oRange = oSheet.GetCellRangeByName("A1:X300")
Pero al usar oRange.FormulaLocal =("=OFFSET($A$1;0;0;COUNTA($A:$A);COUNTA($1:$1))") sale este error en esta linea:
Error de ejecución de BASIC.
Variable de objeto no establecida.
En ese sentido, declare estas variables
Dim FormulaLocal As Object
Dim OFFSET As Object
Dim COUNTA As Object
Alguien me puede ayudar con esto?
Debes de usarlo como en tu primer mensaje:
CÓDIGO: SELECCIONAR TODO EXPANDIR VISTA
oRange = oSheet.GetCellRangeByName("A1:X300")
Si uso esto, de acuerdo con lo que comenta, no hago nada pues al modificar algo que no abarque el rango, el filtro no me lo va a tomar y tendria que seguir haciendo las modificaciones manuales.
entonces si:
CÓDIGO: SELECCIONAR TODO EXPANDIR VISTA
oRange.FormulaLocal =("=OFFSET($A$1;0;0;COUNTA($A:$A);COUNTA($1:$1))")
Y con respecto a esto, solo use esta línea y no incluí lo sugerido inicialmente: oRange = oSheet.GetCellRangeByName("A1:X300")
Pero al usar oRange.FormulaLocal =("=OFFSET($A$1;0;0;COUNTA($A:$A);COUNTA($1:$1))") sale este error en esta linea:
Error de ejecución de BASIC.
Variable de objeto no establecida.
En ese sentido, declare estas variables
Dim FormulaLocal As Object
Dim OFFSET As Object
Dim COUNTA As Object
Alguien me puede ayudar con esto?
- Adjuntos
-
- Cuadro_de_dialogo_Calc.ods
- (24.51 KiB) Descargado 160 veces
OpenOffice 3.1 en Windows Vista
Re: macro con rango dinamico
Mi recomendación general es que si, hagas pruebas, pero con la documentación en la mano, declarar esas variables es erróneo, casi todo lo que quieres lo he documentado:
https://wiki.openoffice.org/wiki/ES/Man ... ndoConCalc
https://wiki.openoffice.org/wiki/ES/Man ... ndoConCalc
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Re: macro con rango dinamico
Buena tarde,
Estuve leyendo la documentación que refiere don Mauricio, pero no logro identificar que variable debo declarar en esta línea, la cual está presentando el error:
oRange.FormulaLocal ="=DESREF($A$1;0;0;CONTARA($A:$A);CONTARA($1:$1))"
El código completo es el siguiente:
Sub FiltroGuias()
Dim oDocument As Object
Dim oSheet As Object
Dim oRange As Object
Dim oSheet2 As Object
Dim oCrite As Object
Dim Salida As New com.sun.star.table.CellAddress
Dim Generar As Object
oDocument = ThisComponent
oSheet = oDocument.Sheets(0)
oRange.FormulaLocal ="=DESREF($A$1;0;0;CONTARA($A:$A);CONTARA($1:$1))"
oSheet2 = oDocument.Sheets(1)
oCrite = oSheet2.GetCellRangeByName("A1:X6")
With Salida
.Sheet = 1
.Column = 0
.Row = 12
End With
Generar = oCrite.CreateFilterDescriptorByObject(oRange)
Generar.CopyOutputData = True
Generar.OutputPosition = Salida
Generar.UseRegularExpressions = True
oRange.Filter(Generar)
Call descombinar
End Sub
Agradezco si alguien me colabora identificando el error. A manera de retroalimentación, lo que busco es que el rango de datos a analizar sea dinámico. Actualmente, en lugar de la línea:
oRange.FormulaLocal ="=DESREF($A$1;0;0;CONTARA($A:$A);CONTARA($1:$1))"
Tengo la línea:
oRange = oSheet.GetCellRangeByName("A1:X300")
Al ejecutar la macro no me genera error con el rango fijo. Pero con este rango, si adiciono alguna fila o columna, algunos valores se van a quedar sin ser analizados y por eso debo modificarlo manualmente.
PD: En la documentación leí que al usar FormulaLocal puedo introducir la fórmula utilizando el nombre de la función en nuestro idioma.
Adjunto el archivo con la línea de rango fijo para que vean que funciona como la tengo actualmente.
Quedo pendiente, muchas gracias
Estuve leyendo la documentación que refiere don Mauricio, pero no logro identificar que variable debo declarar en esta línea, la cual está presentando el error:
oRange.FormulaLocal ="=DESREF($A$1;0;0;CONTARA($A:$A);CONTARA($1:$1))"
El código completo es el siguiente:
Sub FiltroGuias()
Dim oDocument As Object
Dim oSheet As Object
Dim oRange As Object
Dim oSheet2 As Object
Dim oCrite As Object
Dim Salida As New com.sun.star.table.CellAddress
Dim Generar As Object
oDocument = ThisComponent
oSheet = oDocument.Sheets(0)
oRange.FormulaLocal ="=DESREF($A$1;0;0;CONTARA($A:$A);CONTARA($1:$1))"
oSheet2 = oDocument.Sheets(1)
oCrite = oSheet2.GetCellRangeByName("A1:X6")
With Salida
.Sheet = 1
.Column = 0
.Row = 12
End With
Generar = oCrite.CreateFilterDescriptorByObject(oRange)
Generar.CopyOutputData = True
Generar.OutputPosition = Salida
Generar.UseRegularExpressions = True
oRange.Filter(Generar)
Call descombinar
End Sub
Agradezco si alguien me colabora identificando el error. A manera de retroalimentación, lo que busco es que el rango de datos a analizar sea dinámico. Actualmente, en lugar de la línea:
oRange.FormulaLocal ="=DESREF($A$1;0;0;CONTARA($A:$A);CONTARA($1:$1))"
Tengo la línea:
oRange = oSheet.GetCellRangeByName("A1:X300")
Al ejecutar la macro no me genera error con el rango fijo. Pero con este rango, si adiciono alguna fila o columna, algunos valores se van a quedar sin ser analizados y por eso debo modificarlo manualmente.
PD: En la documentación leí que al usar FormulaLocal puedo introducir la fórmula utilizando el nombre de la función en nuestro idioma.
Adjunto el archivo con la línea de rango fijo para que vean que funciona como la tengo actualmente.
Quedo pendiente, muchas gracias
- Adjuntos
-
- Cuadro_de_dialogo_Calc.ods
- (22.19 KiB) Descargado 164 veces
OpenOffice 3.1 en Windows Vista