|
NavegaciónInicio de sesiónEn lÃneaEn este momento hay 0 usuarios y 26 invitados en lÃnea.
|
FormulaArray de más de 255 caracteres desde VBAEsta mañana hemos tenido un problema serio en la oficina. Estamos tratando de introducir una fórmula matricial en unas celdas mediante VBA. Todo correcto hasta que en una de las fórmulas se producÃa un error, motivado porque la longitud de la cadena con la fórmula no puede exceder los 255 caracteres. No los puede exceder en VBA, porque manualmente sà se pueden escribir fórmulas matriciales más largas. Qué curiosa limitación. Supongo que aunque han actualizado Excel para que admita textos más largos trabajando normalmente (esto ya con la versión 2000 o antes), no han tenido tiempo de actualizar las clases de VBA para que se comporten de la misma manera. ¿Cómo lo hemos solucionado? Tras numerosas pruebas infructuosas, lo que resolvió el problema ha sido tratar de reproducir con la macro la introducción manual, mediante la instrucción SendKeys. Este método envÃa pulsaciones de teclas al sistema, es como si pulsases las teclas manualmente. La solución ha sido poner en la primera celda del rango la fórmula normalmente (para la fórmula no matricial no se produce el error si la cadena supera los 255 caracteres), luego seleccionar el rango que ocupará la matriz y con SendKeys reproduzco lo que harÃa a mano, esto es, pulsar [F2] para editar la fórmula y después pulsar [Ctrl][Mays][Intro] para introducirla como fórmula matricial... y sorprendentemente Funciona. Sólo hay que tener la precaución de que se encuentre activa la celda que queremos editar, como si lo fuésemos a hacer a mano. Otra precaución es devolver el control al sistema operativo para que interprete las pulsaciones. Esto se consigue con el método DoEvents antes de las instrucciones SendKeys. Espero que este truco pueda servir para resolver ésta y otras situaciones en que existe un desfase entre lo que Excel (o culaquier otro programa) puede hacer manualmente y lo que puede hacer desde programación con una macro. ¿sabes Excel, pero necesitas más? entonces mira este manual
Enviado por pacomegia el 2 Abril, 2009 - 22:04. Re: FormulaArray de más de 255 caracteres desde VBAEnviado por Visitante el 19 Enero, 2012 - 20:11.
Justamente tengo este inconveniente, pero como no conozco mucho la forma de utilizar SendKeys, me gustarÃa puedan ayudarme con un ejemplo, aplicado a la fórmula que muestro: "SUM(IF(planillamjt!E2:E1000=""FEMENINO"",IF(planillamjt!L2:L1000=""EMPLEADOS"",planillamjt!S2:S1000+planillamjt!U2:U1000 Aclaro que mi intención es aplicar este código a un botón que esta en una hoja, los datos a sumar están en otra ("planillamjt") y el resultado se tiene que escribir en una tercera. Gracias por la ayuda. Robert ![]() Re: ejemplo SendKeysEnviado por pacomegia el 20 Enero, 2012 - 09:27.
por ejemplo, tu código podrÃa ser algo asÃ:
------ Re: ejemplo SendKeysEnviado por Visitante el 20 Enero, 2012 - 12:31.
Muchas gracias, me funcionó perfectamente. Re: ejemplo SendKeysEnviado por Visitante el 20 Enero, 2012 - 14:05.
Molesto una vez sobre el tema. He probado esta solucion en una planilla de ejemplo y como dije funciona perfectamente. Pero cuando quise aplicarla a mi planilla de trabajo, me di cuenta que asi como esta el código, solo funciona cuando el botón se encuentra en la misma hoja donde quiero colocar la fórmula. Mi caso es particularmente asi: El botón esta en hoja1. Los datos a sumar están en hoja2. El resultado se debe colocar en hoja3.  Probè activando la hoja3, escribe la formula, pero no la convierte a matricial. Y para empeorar tal vez las cosas, no tengo 1 sola fórmula. Tengo varias. Entonces pregunto también: ¿Doevents lo debo escribir 1 sola vez? o ¿al final de cada fórmula? Muchas gracias! ![]() Re: ejemplo SendKeysEnviado por pacomegia el 20 Enero, 2012 - 14:50.
SendKeys se comporta como cuando lo haces a mano con el teclado, asà que para escribir algo en la hoja 3, la hoja 3 tiene que ser la hoja activa, y para introducir una fórmula en la celda A5, esa celda A5 debe ser la activa. debes mandar las teclas al sistema cuando edites cada celda, [si te das de alta como usuario e inicias sesión, tus comentarios se publicarán en el acto, no quedan en la lista de aprobación, y no aparecerás como "visitante", y además recibirás un email de aviso cuando alguien conteste]. ------ Re: ejemplo SendKeysEnviado por marluca el 20 Enero, 2012 - 17:47.
Una vez mas debo decir que la ayuda que me dieron dio resultado.Active la hoja, luego active la celda y funciona. Pero habia sido, las pruebas que realizo no son las mismas que en mi planilla real.Porque los botones en mi planilla de pruebas estan colocadas directamente en la hoja, pero en mi planilla real, el botón está dentro de un formulario. Aqui la gran diferencia. Y por esto creo entender que no me funciona. Entonces lo que obtengo es la formula pero no la hace matricial. ¿Hay una solución para esto? Agrego planilla con el ejemplo de boton en la hoja (funcionando) y boton en un formulario (sin funcionar), para mejor comprensión. Robert B.
![]() Re: ejemplo SendKeysEnviado por pacomegia el 20 Enero, 2012 - 19:01.
el formulario toma el control y no te deja modificar celdas (a mano tampoco te deja), UserForm1.Show vbModeless ahora sà funcionará lo de las teclas, pero puede que no te interese, porque el usuario de la aplicación también puede toquetear cosas de la hoja mientras el formulario se muestra..  ------ Re: ejemplo SendKeysEnviado por marluca el 20 Enero, 2012 - 21:32.
Problema resuelto! Muchas , pero muchas gracias. Robert |
cargando...
Buscar en necesitomas.comExcelómetroTemas nuevosLo más vistoHoy: |
Re: FormulaArray de más de 255 caracteres desde VBA
muy bueno esto de SendKeys, para cuando falla todo lo demas, esto si que es automatizar al usuario, reproduciendo sus pulsaciones del teclado.
en cualquier caso, muy raro que con la macro se comporte de una manera y haciendolo a mano de otra