Inicio de sesión

Nombre de usuario o e-mail

En línea

En este momento hay 1 usuario y 66 invitados en línea.

FormulaArray de más de 255 caracteres desde VBA

Esta 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.
Se da así la paradoja de que puedes grabar una macro en la que das los pasos manualmente sin problemas, pero que luego no seas capaz de ejecutar la macro porque obtienes un error misterioso
Parece que es un error común a todas las versione de excel, de la 2000 a la 2007 (a ver si para la próxima versión...)
http://support.microsoft.com/kb/213181/en-us

¿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

Contestar

  • Etiquetas HTML permitidas: <a> <b> <blockcode> <br> <cite> <code> <dd> <div> <dl> <dt> <em> <h1> <h2> <h3> <h4> <hr> <i> <img> <li> <ol> <p> <strong> <sub> <sup> <table> <td> <tr> <ul>
  • Los enlaces a vídeos de Youtube y Google video se convierten automáticamente en vídeos embebidos
Más información sobre opciones de formato

Si te gusta, compártelo


apúntate a nuestro newsletter

cargando...
Buscar en necesitomas.com