Esta no será una entrada que trate sobre "la forma de hacer algo" con VBA, sino que está realizada en base a una consulta que recibí en un post, junto a otras varias por el estilo que hicieran llegar a mi casilla de correo.
La pregunta casi siempre es: "donde puedo aprender a programar macros" o "que sitio web me recomiendas para 'empezar' con las macros".
Digamos que, para hacerla fácil, con poner dos o tres links respondería a la consulta y listo, pero el tema va un poco mas allá y merece ser tratado, ya que mucha gente desea y/o necesita aprender sobre esta materia.
Si bien no es el "camino óptimo" (el cual tampoco creo que exista), comentaré como fue mi experiencia personal con Excel y su poderoso entorno VBA.
Nunca realicé ningún curso sobre programación de macros. Es mas, hasta pasados los 25 años no tenía PC (hoy tengo 38, así que calculen que en aquellas "épocas" [ya hablo como viejo] no era tan sencillo conseguirla como se hace actualmente), me conectaba poco y nada a Internet (sufriendo de un dial-up de espantosos 2,8/3,5 kb) y casi siempre que agarraba una computadora metía la pata. De Windows 98 no puedo hablar por que casi no lo manejé, dando los primeros pasos con el ya muy mejorado XP.
Pero bueno, por cuestiones laborales decidí no mantenerme alejado mas tiempo de la informática, y empecé con Excel, al cual dejé al segundo día, por que no entendía absolutamente nada de nada.... aunque vi que era una herramienta de trabajo impresionante. Pero, abrumado, no lo toqué mas.
Luego, en un instituto de la maravillosa ciudad de Mendoza (Argentina), comencé un curso de programación en Visual Basic 6.0, con lo cual adquirí los conocimientos básicos sobre la sintaxis de este lenguaje, aprendiendo sobre eventos, propiedades, métodos, procedimientos, funciones, estructuras de control y algo de objetos. De allí solo hubo un paso al manejo de bases de datos y algunas otras yerbas, con lo cual me aboqué al desarrollo de programas, generalmente, contables. Esto del curso fue una base muy sólida, ya que ahora sabía como "manejar" Visual Basic 6.0.
Empecé a estudiar una licenciatura en sistemas, la cual dejé cuando aparecieron materias como "deontología", "filosofía", "religión", "marketing", "seminarios de...." y otras tantas que se hallaban muy alejadas de mi propósito: programar. Pero... y siempre hay un "pero", me sirvió para conocer sobre algoritmos: fragmentos de código sobre como ordenar una lista (burbuja, burbuja mejorada, el método 'de la baraja', etc), de búsqueda (binara, secuencial), manejo de archivos de texto, matrices multidimensionales, etc, etc, etc. Ahí empecé a leer libros específicos sobre algoritmos, mismos que luego me permitieron programar los complicados algoritmos genéticos o el de dijkstra, este último mas conocido por ser el que se emplea para ubicar el camino mas corto entre dos puntos. Si, ese, el de los GPS.
A estas alturas ya traía un buen bagaje: conocer como se escribe en Visual Basic 6.0 + teoría/práctica de algoritmos + muchas horas programando.
Un día, como tantos otros, paso caminando por el escritorio de un compañero de oficina y ahí es donde la historia cambia hacia Excel: veo que, estando dentro de este programa, las hojas se empiezan a mover solas, suben y bajan "cosas", se borran filas.... todo "solo", sin que el usuario esté haciendo nada. Le digo: "-Me querés explicar que fue eso?". "-Macros", me contestó muy escuetamente. También ahí empecé a darme cuenta del triste y egoísta camino de los programadores: no compartir nada. Por suerte eso ha cambiado mucho desde la puesta en marcha "masiva" de Internet, pero en aquellos tiempos era muy extraño aprender algo por que otro te lo enseñaba.
Así que tomé Excel en serio y a practicar de ha dicho. Busqué información sobre que diablos eran esas macros y le di para adelante, hasta llegar hoy a tener este blog.
Fui un completo autodidacta en la materia, aplicando mis conocimientos previos y algún que otro material de lectura adicional sobre Excel y Visual Basic avanzado.
"Ahá, así que macro es una abreviatura de 'macroinstrucción', con el objetivo de automatizar tareas"... ah, y se pueden grabar... y encima después puedo analizar el código grabado... perfecto, sigamos entonces.
O sea que si con Range("a1").Font.Bold=True la letra de esa celda se pone en negrita..... con False la vuelvo a la normalidad. Y un rango no es mas que una matriz, y si a ese rango lo multiplico por varias hojas... tengo una matriz multidimensional... perfecto, sigamos.
Y así, sigamos con todo.
La lógica siempre es la misma, solo tuve que aplicar mis conocimientos sobre funciones, algoritmos, métodos, eventos, etc, etc, a los que tiene Excel. No fue fácil y he invertido muchas horas en esta tarea, rescatando de aquí algo fundamental: muchas horas.
El trabajo me ayudó una enormidad: estoy dentro de una institución financiera y, como adivinarán, Excel es ideal para estas tareas. Cuando vieron que lo podía manejar, me llovían pedidos "Che, necesito que esto haga tal cosa", "Hey, quiero esto otro"... y así con cada proyecto se me planteaban nuevos desafíos, como hoy también aprendo de las consultas que me realizan en el blog.
Por experiencia personal, que es sobre lo único que puedo hablar con propiedad, les recomiendo a todos aquellos que quieran comenzar con las macros que primero conozcan sobre Visual Basic 6.0 y luego pasen al ámbito de VBA; estamos hablando del mismo lenguaje, solo que aplicado a Excel. Y leer sobre algoritmos (hay mucha bibliografía al respecto) para "abrir la cabeza".
Resultará un requisito indispensable el tema de las horas. Programar es como cualquier otra profesión, no conozco abogados, médicos o arquitectos que no se hayan pasado días y días y días estudiando. Y, sin entrar en comparaciones, esto es lo mismo: a leer y practicar, no queda otra.
Mas tarde me dediqué a la administración de redes y servidores (nada que ver, pero era una materia que tenía pendiente) y a la programación de sitios webs dinámicos con Php&MySql, Javascript, ActionScript (Flash), DHtml, Css, etc, etc, etc. Recién ahí "gané unos pesos" con mis conocimientos, trabajando solo o en conjunto con diseñadores web, que requerían de ciertos scripts para "darle vida" a sus sitios. Y si bien me metí con lenguajes muy distintos (Php/Javascript tiene una sintaxis mas para el lado de C), aprendí sobre cosas que luego llevé a Visual Basic y por ende a Excel, por que como ya dije, la lógica es la misma, aunque la sintaxis pueda ser extremadamente distinta (y complicada de entender).
Lo mencionado en este párrafo no es "conditio sine qua non", pero me sirvió y no quiero dejar de compartirlo.
Actualmente mi relación con Excel es sencillamente enfermiza. Lo considero el mejor programa alguna vez creado, insuperable. Cada vez que observo un sistema, rutina, código... lo que sea, de forma inmediata pienso como lo haría en Excel. Casi raya con la locura, pero me sirve como un gran ejercicio y no pasa día en que no me sorprenda sobre el verdadero alcance de esta herramienta. Estimo que nunca terminaré de aprender, resulta imposible conocerlo a fondo.
Ojalá tuviese mas tiempo para dedicarle, pero entre el trabajo, la familia, el nuevo estudio que comenzaré (el cual está orientado a las finanzas y nada tiene que ver con Excel... aunque ya voy a encontrar la forma de vincularlos, jaja), me es una quimera el intentar seguir "exprimiendo el reloj", por que sólo da 24 hs. por día. Pero bueno, "se hace lo que se puede", como reza un dicho muy popular en Argentina.
La función quedaría
=VBA(Visual Basic 6.0; Algoritmos; Excel; Estudio; Muchas_Horas;[otras]), en donde solo el último argumento es opcional.
Y, obviamente, la ayuda que desde aquí le pueda prestar al que quiera empezar.
Muchas gracias por compartir tus conocimientos, leo tu blog siempre que publicas algo y aprendo mucho cada vez, también he sido autodidacta pero empecé mucho después que tu así que aun tengo mucho camino por recorrer pero gracias a vos se hace mucho mas fácil.
ResponderEliminarOv10: gracias por tus palabras, en serio.
ResponderEliminarCualquier ayuda que necesites, a tu disposición.
Un abrazo
muy interesante tu blog hermano,de igual forma me gustaria entrar en ese mundo de las macros aunque apenas estoy empezando (a mis 33a#os de edad )en el mundo de la programacion..estoy leyendo libros de fundamentos de programacion, metodologia, aprendiendo un monton de cosas sobre las q no tenia idea de se podian hacer actualmente voy paso a paso instruyendome en lo del pseudocodigo para empezar y una vez este mas diestro en la materia me adentrare en este lenguaje de programacion ( visual basic )para el manejo de macros en excel y aparte de esto tambien pulirme en el campo de la formulas y funciones de esta maravillosa herramienta...saludos consegui este blog hace poco y la verdad me parece muy bueno, siempre estoy leyendo tus post..a proposito he estado intentando realizar el sudoku con formato condicional e open office y por alguna razon no he resuelto como hacerlo en el formato condicional que esta ofrece, si puedes darme un tip para ello o una breve explicacion..te lo agradezco de antemano..
ResponderEliminar1zixer1: gracias por tu comentario.
ResponderEliminarLa verdad que no soy usuario de OpenOffice (¿no migraste a LibreOffice?), lo he utilizado un par de veces, pero nada mas que para conocerlo un poco. Ni siquiera lo tengo actualmente instalado... aunque debería, ya que es muy poderoso y gratuito.
Si encuentro algo "raro" te aviso que puede ser.
No he migrado a open oficce pero si tengo instalado las dos suites de ofimatica en mi Pc..la planilla de calc(openoffice)se puede comparar a excel 2003 al menos en cuanto interfaz y funcionalidad..aunque dudo que nunca se pueda equiparar al potencial que ofrece excel 2010
ResponderEliminarsi, ni hablar. Ojo: el resto de las aplicaciones "open source" son sencillamente espectaculares, cubren un inmenso abanico de herramientas y la interfaz es muy parecida a la de Excel, por cuanto la curva de aprendizaje no es pronunciada.
ResponderEliminarpero como Excel... no hay.
Que tal como estas estoy aprendiendo a utilizar la herramienta VBA de excel, hace poco encontré tu blog y me ha gusto mucho he aprendido mucho, encontré que tienes una publicación acerca de como tomar datos de otros libros por medio de una herramienta que le llamas ADO me gustaría aprender mas sobre ese tema. Espero que puedas ayudarme.
ResponderEliminarGracias Roberto. Con ADO (activex data object) se pueden tomar datos desde practicamente cualquier origen, aunque obviamente funcionará mucho mejor si son productos de Microsoft (como el propio excel o access). Yo aprendí a utilizarlo de mis trabajos en Visual Basic 6.0
ResponderEliminarTengo un par de entradas al respecto, decime en que necesitas ampliar la información y lo vemos.
un abrazo.
Muy interesantee!!!
ResponderEliminarSoy economista y analizo información económica.
No se de computación pero aprender un poco de vba te puede ahorrar horas y horas de hacer click.
Estoy aprendiendo grabando las macros y leyendolas. Pero la nota es HIPERMOTIVADORA.
MUY BUENA!!!!
Gracias por tus palabras, siempre ayudan a seguir adelante con esta labor del blog. Realmente Excel te viene perfecto, dado que en si mismo es una herramienta matemática y financiera incomparable, abarcando cualquier aspecto en estas materias. Y el tema de las macros es ideal para automatizar y ahorrar varias horas de trabajo.
ResponderEliminarSuite y cualquier duda, a tu disposición. Un abrazo.
Muy interesante lo que cuentas. Gracias por compartir tus conocimientos y experiencias.
ResponderEliminarUn abrazo.
Muchas gracias Luis.
ResponderEliminarHay algo en la mayoria de las personas que aman a excel, (tu, yo, jajaja y otras tantas) que tienen en comun, es que por causas ajenas a ellas , la mayoria por el trabajo, nos hemos echo adictos a excel, y hemos tenido que aprender de manera autodidacta, y con buenos resultados, para mi ha sido asi, solo que hasta el momento habia solo trabajado con formulas, y hasta apenas sera como un año he tenido que empezar a utilizar las macros, y bueno gracias por el tip, de que libros leer, asi lo are y mientras me apoyare en ti como MASTER para resolver algunas dudas gracias
ResponderEliminarsalu2
Gracias Luis, sos muy amable. Por varios meses me vi alejado del blog, pero estoy retornando de a poco. Cualquier cosa en la que te pueda ayudar me avisas.
ResponderEliminarHola Damian, en primer lugar para agraderte el aporte que haces para los que nos gusta Excel y que vamos aprendiendo mas de esta maravillosa herramienta, ahora tengo una consulta que hacerte, tengo una base de datos, en donde hie una plantilla de busqueda por número de folio, y esa ya la tengo aprobada, solo que hay número que se duplican, y no se como colocar otro boton de comando en donde me haga una busqueda "siguiente" para ver si hay más datos con ese número de folio (no se que lenguaje debo colocar), espero me haya expliacdo, y gracias de antemano
ResponderEliminarestimado: disculpa la demora, pero tu consulta ameritaba un post:
ResponderEliminarhttp://damianexcel.blogspot.com.ar/2012/07/busqueda-recursiva-con-macros.html
espero que te sirva, cualquier cosa me avisas.
gracias x tu mensaje
Hola, me parece espectacular tu trabajo, esto me motiva a seguir aprendiendo... sigue así.. saludos desde Colombia
ResponderEliminarGracias Alvaro, un abrazo
ResponderEliminar