Etiquetas
argentina banca bancos bolsa China crisis desempleo deuda dinero economía eficiencia empleo empresas España eua futuro gobierno guerra ideologia salud
Últimos comentarios
Últimas entradas de los Blogs
Trucos y tretas en Excel VBA para programadores
13 de Diciembre de 2011
Este post no está hecho para novatos que no sepan nada del macros de Excel, sino aquellos que saben algo de programación de Visual Basic. Si eres neófito en macros de Excel en Visual Basic, deberías ver mi post Excel VBA y macros: Una herramienta muy útil para trabajar hojas de cálculo (1). Me han de perdonar la manera en que aparece el código, pero es un problema en la manera en que aparece el código HTML para desplegar código con indentación en este sitio. Especialmente en finanzas o en bolsa, pero también en negocios de todo tipo, programar macros de Excel suele ser sumemante útil y por eso he querido deicar este post a transmitir algunos trucos para ahorrarte tiempo. Cuando programamos código para macros de Excel VBA a menudo nos encontramos con que los detalles de cómo invocar tal o cual cosa de Excel termina siendo muy críptica y debes navegar por foros, tutoriales o incontables páginas ininteligibles de Microsoft que no te responden lo que andas buscando. Si sabes Visual Basic, lo más lógico es que para elaborar macros, trates de grabar una macro primero, y luego empiezas a ver el código de muestra para ver cómo hacer determinadas cosas. En este post se pretende proveer trucos de programación en Excel VBA para efectuar tareas que no se pueden derivar del código grabado en una macro en Excel. Estos trucos son el resultado de resolver una serie de problemas que en su momento significaron un dolor de cabeza. Obtener valor de una celda
Este ejemplo inserta el valor 23 en la celda de la fila 4 y columna 5. Luego la variable x toma ese valor y le suma 1. Cabe añadir que cada vez que llamamos una celda, una cantidad muy grande de código de Excel es invocada, de modo que si piensas trabajar con muchas celdas o muchas veces con la misma celda, es mejor que pases los valores a variables, en lugar de llamar a la celda en sí misma.
En este ejemplo, la celda de la fila 2 columna 3 es seleccionada, y la selección luego es objeto de centrado vertical y horizontal usando Selection. Usando rangosPasar de la notación de fila y columna a la de celdas suele ser un poco incómodo. Normalmente para seleccionar un rango usaríamos algo como esto:
Como has visto, lo que está procesando la función Range() entre comillas es una hilera de caracteres. Para efectos de escribir código, podemos usar esta expresión equivalente:
Convertir números en letras (pasar de la notación fila 5 columna 1 a "A5") suele ser sumamente incómodo. Para ello he construido una función que hace el trabajo.
La función convierte el número en letras, en caracteres. Cabe anotar que sólo sirve para llegar hasta columna ZZ, de modo que si se pasa de esa columna, esta función no te servirá. Para llamar esta función con las mismas coordenadas (5,1) y (8,2) harías algo como esto para convertir en hilera:
Como habrás notado he usado la función Format() que evita que se agreguen espacios al convertir de número a hilera, como pasaría con la función Str(). Acelerar la ejecuciónCuando un programa corre, todo lo que tiene que ver con actualización de pantalla es sumamente lento, y lo mejor es desconectar toda actualización de video. Para ello debes agregar el siguiente código al inicio de la macro.
Y este código al final.
Application.ScreenUpdating se encarga de encender y apagar la actualización de video. Application.DisplayStatusBar = True habilita la barra de estado que está en la parte inferior de la ventana de Excel, y allí despliegas mensajes asignando una hilera a Application.StatusBar. La idea de usar la barra de estado es que si la ejecución de la macro tarda mucho, es bueno que el usuario sepa que la macro está trabajando, y que no se ha quedado atascada. No hay nada que fastidie más que tener un programa atascado frente a uno. Por eso sería bueno que dentro de la macro agregues otros mensajes donde el usuario pueda ver que la macro va caminando, pero si pones mensajes con demasiada frecuencia eso ralentizará la ejecución, porque como dijimos, la actualización de video consume mucho tiempo de la máquina. Esto es especialmente útil cuando vas a correr una macro que pasa de un libro de Excel a otro o que se mueve mucho a lo largo de las páginas o celdas de manera muy intensiva. Obtener posición de la última celdaCuando tienes hojas de Excel de tamaño variable y necesitas ubicar la última celda ocupada (la que está más abajo y más a la derecha), puedes usar lo siguiente:
Si buscas en Internet acerca de cómo obtener posición de la última celda, encontrarás maneras muy diversas. Sin embargo, esta es la mejor que he encontrado. Si agregas valores más allá de la última celda, el valor se actualiza. El único problema es que si borras filas o columnas, este número no cambiará, sino hasta que abras de nuevo el archivo de Excel. Sin embargo eso es mejor que nada, y puedes verificar si encuentras celdas en blanco, así que eso no debería ser problema. Obtener los nombres de libros de Excel abiertos.En ocasiones ocupas una lista de los libros de Excel que están abiertos. Para ello te vales del objeto Workbooks de Excel.
El arreglo NombreDeArchivo almacenará los nombres de los archivos de Excel que están abiertos en un momento dado. Obtener la lista de páginas del libro de ExcelPuedes usar el siguiente código.
Los nombres se almacenan en el arreglo NombreDePagina. Obtener los nombres de las gráficas (charts) que hay en una página de ExcelHay ocasiones en que ocupas buscar todas las gráficas contenidas en una página de Excel. para ello te vales de ActiveSheet.ChartObjects
El arreglo NombreDeChart contendrá los nombres de las gráficas de la hoja de Excel en que nos encontramos. Obtener el nombre del libro de Excel en que te encuentras actualmenteExisten algunas situaciones donde ocupas saber el nombre del libro de Excel en que te encuentras actualmente.
El nombre de la hoja actual será guardado en la variable LibroActual. Cambiar de libro o de hojaSi deseas pasarte a otro libro abierto u otra hoja, puedes usar el siguiente código.
Este código hará que te pases al libro de Excel MiLibro.xls y a la página Sheet1 de ese libro. Como ves, el valor entre comillas puede ser reemplazado por una variable tipo String si lo deseas. Cómo lidiar con libros de Excel protegidos por password
Este código se encargará de eliminar la protección contra password. En este caso el password es XYZ. Cuando trabajas con hojas protegidas con password, obtendrás errores al tratar de acceder a material protegido y por eso debes desproteger la hoja para trabajar en ella. Cómo usar el portapapelesEl portapapeles no viene incluido en la versión básica de Excel VBA, así que primero tenemos que configurar algunas cosas.
Ahora que ya configuramos todo, veamos el código.
Este sería el método para crear el portapapeles en memoria.
Con este método puedes destruir el objeto portapapeles en memoria para liberar espacio.
Con este método copias un texto al portapapeles.
Con esta función extraes el texto del portapapeles.
Cómo configurar área de impresiónPara configurar el área de impresión ocupas la orientación portrait o landscape. He puesto las muestras de las líneas para ambos casos, aunque tú sólo ocuparías una. Si vas a ajustar a una o más páginas horizontal o verticamente, primero necesitas poner el modo Zoom en apagado y luego puedes configurar los ajustes. Y también debes delimitar el área de impresión que en este ejemplo es desde A1 hasta H25.
Otros trucosExisten trucos para optimizar el desempeño de Visual Basic, tales como:
Espero que estos trucos te sirvan, porque a mí me han servido mucho.
Guardado por: 1 usuario Trucos y tretas en Excel VBA para programadores |