Transcripciones
1. Introducción: actualización: Hola a todos. Entonces déjame empezar con una pregunta
retórica, que es, por qué debería tomarme el tiempo para
aprender macros de Excel o VBA, que es solo el nombre del
lenguaje
de programación que se escriben las
macros. Para. Fondo muy rápido sobre mí mismo, he trabajado más de 11 años
haciendo herramientas de software personalizadas, pero el lugar donde
trabajé en 2021, convertí en desarrollador
freelance de tiempo completo, creando herramientas para ayudar a
automatizar y la eficiencia para un montón de
diferentes tipos de negocios, que sigue siendo lo que estoy
haciendo profesionalmente ahora. Además de sobresalir en VBA, tengo mucha experiencia y
otros
lenguajes de programación como Python, C-Sharp, Java, e incluso alguna experiencia
en desarrollo web. Entonces, por ejemplo, JavaScript. Pero de lejos, pasé la mayor parte de
mi tiempo en Excel y VBA. Y eso se debe a que es una
de las herramientas más universales utilizadas en casi todos los
negocios de grandes a pequeños. Y la realidad es cuando
busco trabajo freelance, es donde están muchos empleos. Probablemente has hecho clic
en este video porque al menos
estás un poco
familiarizado con Excel. Debido a que es utilizado por
tantos negocios, eso generalmente significa
que
casi no requiere configuración tanto para
desarrolladores como para usuarios. Entonces, siempre y cuando
tengas instalado Excel, por lo general
eres bueno para ir. Las herramientas de automatización macro y el entorno de desarrollo de
VBA
están integrados justo en él. Obtener un proyecto fuera
del suelo suele ser tan fácil como compartir un
archivo con alguien. Para mucha gente, los
conceptos básicos de cómo hacer clic alrededor de ese archivo ya
estarán familiarizados con ellos. En su trabajo, usted y sus
compañeros de trabajo podrían incluso ya estar trabajando en
Excel todos los días. Entonces construir una automatización encima de tus procesos que
tienes ahora es bastante fluida. Y puedes
por supuesto, todavía hacer herramientas
completamente nuevas
completamente desde cero. Pero cuando la persona
vaya a usarlo, ya
tendrán esa familiaridad de nivel
base que hace que sea mucho
más fácil para ellos
acostumbrarse a la nueva herramienta y
reducir la cantidad de entrenamiento que necesitan para obtener cómodo con
el nuevo proceso. Vba también es mucho más poderoso de una herramienta que la
mayoría de la gente puede pensar. No solo automatiza Excel, que es lo que en
su mayoría sabemos si cuatro, sino que también puede tener control y automatizar casi cualquier
aspecto de su computadora. Entonces mucho de eso lo
verás en esta clase. Ahora si he podido
mantener tu atención, déjame describir un poco la
clase. Yo primero califico este curso específicamente para personas que
nunca habían escrito una
macro o una sola línea de código en su vida. Eso sigue aquí porque
ahí es donde
comenzaremos las lecciones. Pero he decidido seguir
sumando a esta clase. Entonces hay contenido que va desde principiante
absoluto
hasta intermedio, todo el camino hacia arriba a través de
altamente avanzado. Entonces voy a tratar de
hacer de esto una clase viva, lo que significa que
continuamente agregaré contenido y videos
para seguir mejorando en la clase y
mejorándola como un curso que te
llevará de principiante absoluto todo el camino a nivel
profesional
avanzada programación VBA. Y si solo te
interesa la programación y tal vez
quieras meterte en
otras cosas que no sean macros y BBA. Creo que esta es una gran
introducción para traer muchos de los conceptos que
son transferibles a otros lenguajes de programación. Si ese es el camino en el que
quieres seguir, tendré que admitir que algunas
de las grabaciones de aquí son las primeras que grabé
de mí mismo. Por lo que algunos de ellos son de hace más de
un año en este punto. Ojalá veas
que la calidad de sonido y video se pone un
poco mejor a medida que avanza. Así que perdóname por
los rudos. Si te encuentras con
alguna intermedia. Además, la clase está configurada una
manera que deberías
sentirte libre de
saltar de video a
video dependiendo de
lo que sea mejor para ti. La estructura general
de la clase es que los primeros
videos demostrarán conceptos
específicos
que se convertirán en los bloques de construcción para los
procesos plenamente funcionales más adelante. Por lo que esos están más
enfocados en temas específicos. Entonces los videos posteriores, te
haremos seguir
mientras construyo, por ejemplo, proyectos que podrías encontrar útiles en tu negocio o como una gran demostración de
los conceptos de bloque de construcción
que mostramos antes. Por ejemplo, el proyecto
y la liberación en este momento es una aplicación
que puede automatizar un montón de aspectos
del proceso de cotización para casi cualquier negocio
que hace cotizar, es importante para mí que
muestro cada paso del proceso sin ningún
tipo de estilo infomercial, constante de avance rápido un
par de horas por delante, dejándote solo un
poco confundido en cuanto a lo que pasó en
esa brecha de tiempo. Voy a mostrar
cada detalle aquí. Y solo puedes usar el avance
rápido si quieres, lo cual es agradable y fácil
con este formato de video. Incluso desde aquí, te
recomendaría que
saltes por los videos que solo un poco echen un vistazo al contenido de aquí. que a medida que vayas más abajo
a los proyectos, puedes obtener una pista
del tipo de contenido que estaremos cubriendo. Y luego puedes
decidir desde ahí, dónde quieres empezar o si quieres saltar a diferentes spots
y trabajar tu camino hasta esos videos más
avanzados. Sobre todo si tal vez
estás
entrando en esto y ya tienes un poco de fondo y los primeros videos son un
poco demasiado simples para ti. Se puede saltar adelante
a lo que serán proyectos
más avanzados
hacia el final. Y con eso, realmente espero que
disfruten estos tutoriales. Siéntase libre de
dejarme cualquier mensaje o comentario o comentario. Realmente aprecio tu
tiempo para ver estos videos. O si no los ves,
aprecio el tiempo que tardaste en llegar hasta
tan lejos en la intro. Así que gracias y disfruta.
2. Mostrar la pestaña de la página de desarrolladores: A medida que empiezas a caer junto con este tutorial y tira hacia arriba Excel en tu propio equipo. Podrías notar que no tienes una pestaña de Desarrollador aquí, como lo estoy mostrando en mi pantalla. Eso se debe a que por defecto la pestaña del desarrollador está oculta. Con el fin de mostrar la pestaña Desarrollador. Ir al archivo, aquí abajo a opciones en la parte de abajo a la izquierda, Personalizar cinta. Y luego por aquí a la derecha, quieres revisar la pestaña Desarrollador si no está marcada, y luego hacer clic en Aceptar. Y entonces ahora deberías ver tu pestaña de desarrollador, que te mostrará todas estas herramientas que vas a usar para crear tus macros.
3. Grabar Macros en la grabación: Quiero mostrarles cómo usar la función Record Macro. Y esto está integrado en excel y es algo que
utilicé mucho cuando empecé a trabajar por primera vez con macros. Entonces si subes aquí a la parte superior izquierda, verás este botón de macro de grabación. Puedes hacer clic en eso. Y luego aparece este foro y te pide el proporcionar un nombre para la macro que estás grabando. Vamos a llamarlo ejemplo macro y dar clic en Aceptar. Y ves que este botón en la parte superior izquierda cambia para dejar de grabar, lo que implica que estás grabando en este momento. Y eso es exactamente lo que está pasando. Todo lo que haga en mi hoja de cálculo aquí se está grabando, incluyendo hacer clic en estas celdas aleatorias. Ya verás que eso en realidad se está grabando y te reproducirías más tarde. Voy a crear algo realmente sencillo aquí. Entonces digamos que solo hago algo como resaltar estas celdas y quiero escribir un mensaje alto. Y entonces lo que acabo de hacer aquí fue todo grabado. Entonces si vuelvo a mi pestaña Desarrollador, aún tiene el botón Detener grabación, lo que significa que estamos grabando todavía, puedo hacer clic en parar. Entonces si vengo aquí, destaque estas celdas. Voy a deshacer lo que hice aquí porque vamos a volver a reproducir la grabación. Si voy a mi pestaña Desarrollador, hago clic en macros. Eso me muestra la lista de macros que tengo disponible. Y así ejemplo macro siendo el que lo grabamos, voy a dar clic en ejecutar. Y ahí tienes. Ves que acaba de reproducir las acciones que grabamos. Hay un ejemplo realmente simple de solo cómo puedes tomar una lista de acciones y reproducirlas y realizarlas con un clic de un botón. Y en este caso no en realidad un botón, pero te puedo mostrar cómo hacer eso también. Por lo que puedo subir aquí a Insertar lista. Aquí tengo un montón de componentes para formularios. Y el que voy a usar aquí es el control de botón. Y voy a hacer clic en eso. Y solo puedo arrastrar y soltar un botón aquí. Si me pregunta qué macro quiero ejecutar con este botón, estoy creando una macro de ejemplo rápido. Haga clic en Aceptar. Puedo cambiar el texto aquí. Y luego si despejo esto otra vez, click, di hola. Se puede ver que ejecuta la macro. Y sólo volveré a hacer esto. Vamos a grabar otra macro que despeje esto para que no tenga que seguir haciendo manualmente eso solo
dejará esto como macro para que estamos grabando. Dejé de grabar. Voy a insertar, crear otro botón, arrástrelo, hacer ejecutar macro para. Y ahí, sí, ahora tienes dos botones. Uno que dice hola y otro que despeja TI.
4. Guardar el tipo de archivo XLSM: Hice esta macro básica aquí donde haces clic en el botón de decir hola y sombrea en todas estas celdas, por lo que te da un mensaje alto. Y luego, cuando hagas clic en Borrar saludo, solo
lo aclarará para ti. Por lo que puedes usar esto de ida y vuelta. Y entonces ahora tengo mi archivo y quiero guardar este archivo. Si subo aquí arriba arriba a la izquierda y hago clic en el botón Guardar, veo este mensaje aquí. Y básicamente me dice que estoy guardando este archivo como un tipo de archivo XLS. Y así ese es el valor predeterminado para un archivo Excel. Se puede ver eso aquí arriba en cabecera. Básicamente me está diciendo que este es un tipo de archivo de libro libre de macro, que significa que si lo guardas así, la macro que creé no se va a guardar Si hago clic en Sí aquí, próxima vez que abro este archivo, la macro que creé se va a ir. Entonces no voy a hacer eso. Voy a venir aquí. Voy a dar clic en No. Entonces me va a traer aquí a la guardar como menú. Entonces si vengo aquí a este desplegable, puedo hacer clic en esto y seleccionar una macro excel Libro habilitado o un tipo de archivo XLS. Voy a dar clic a guardar. No obtengo ese mensaje de error. Y este es un tipo de archivo que cuando traiga este archivo de nuevo arriba, o macros seguirán estando aquí.
5. Ver tu código: En el último video, fuimos por encima usando la función Record Macro aquí arriba en la parte superior izquierda, tal vez
te estés preguntando a dónde va el código que hemos grabado. ¿ Cómo puedo hacer una edición a eso si quisiera. Y así podemos ver esa macro es, y subir aquí a macros. Se puede ver ejemplo macro es lo que grabamos. Si haces clic en editar, eso te lleva
al editor de códigos para que veas lo que grabamos aquí. Hice clic en la celda K4. Cambié el color de fondo de esa celda a negro. Empecé a copiar y pegar esa celda hasta que hice este alto mensaje por aquí. Entonces otra forma que podría haber ido al código es simplemente venir aquí a Visual Basic que también abre este editor de código. Y entonces puedo navegar por aquí una vez que llegue aquí. Y entonces la tercera forma en que típicamente llego a mi código macro es
si resalta un botón y un truco aquí es si hago clic en este botón, no voy a simplemente resaltar el botón. Voy a ejecutar la macro. Y como no quiero ejecutar la macro, solo
quiero resaltar el botón. Voy a hacer clic con el botón derecho en esto y luego hacer clic fuera de este menú contextual. Y luego ahora los botones resaltados sin ejecutar la macro. Una vez resaltado este botón, puedo venir aquí para ver el código. Y eso me va a llevar directamente al código que iba a correr el botón. Y aquí estás en macro ejemplo. Y te volveré a mostrar si voy a despejar saludo, Ir a Ver Código. Ese botón iba a ejecutar macro para. Y así hay un par de formas en las que puedes llegar directamente al código de tu macro.
6. Caja de mensajes de de la VBA de que editor: Ahora que estamos mirando directamente al editor de códigos para nuestras Macros, puedo mostrarles que la estructura para cada macro está escrita en estas subrutinas. Entonces si uso un personaje apóstrofo, puedo dejar un comentario aquí. código macro va aquí. Destaca verde mostrándote que es un comentario y no
es código que realmente se ejecutará cuando juegues este código que está escrito aquí está en el lenguaje llamado Visual Basic para aplicaciones. Y se puede ver aquí arriba este Windows llamado Microsoft Visual Basic para aplicaciones, típicamente la gente se refiere a él como VBA para abreviar, VBA. Entonces si hay algo que no sabes hacer, la forma más fácil de hacerlo es simplemente ir a Google. Y hago esto todo el tiempo, incluso por cosas que he hecho un 100 veces. Y comienzas por escribir y VBA, y luego lo que sea que quieras hacer. Y así si escribo en el cuadro de mensaje de VBA, siempre
puedes probar el primer enlace. Y verás que puedes encontrar fácilmente la notación de código para lo que quieras hacer. Algunas cosas tardan un poco más en encontrar la respuesta a. Pero para tareas simples como esta, Google soluciones todo el tiempo sólo porque no memorizo la notación de cada comando de aquí. Por lo que aquí queremos buscar cómo hacer un cuadro de mensajes. Ves que esta notación está justo aquí. Sólo vamos a confiar en que vaya a volver aquí, escriba esto. Y si quería ejecutar esta macro, puedo hacerlo subiendo aquí a este botón Play y haciendo clic en él. Te vas, tienes el cuadro de mensajes. Voy a dar clic en Aceptar. Destacaré esto. Haré otra línea. Cambia estos dos. Aquí hay otro cuadro de mensajes. Y otra cosa que puedes hacer es en lugar de subir aquí y presionar play, puedo correr esta línea a la vez y lo puedo hacer con el botón de la FAA. Y así si presiono F8, ves este pop-up de flecha amarilla que me dice que línea que está a punto de correr. A medida que corro que este primer cuadro de mensaje aparecerá. Haré clic en Aceptar aquí, me lleva de vuelta y luego puedo ejecutar el siguiente cuadro de mensaje. Y luego siguiente paso, la macro esté completa. Algo más que quería ir aquí es que podrías notar que la macro de ejemplo está escrita en esta notación donde dice sub ejemplo macro, abrir y cerrar paréntesis, y luego n sub. Y esa es la notación aquí porque cada macro es esencialmente una subrutina. Y este editor automáticamente manejará eso para ti de alguna manera. Entonces si quería crear otra macro y escribo sub ejemplo macro a, si acabo de presionar Enter. Puedes ver que automáticamente creó la notación
para que puedas codificar y otra macro justo aquí.
7. Referencia celular: A medida que
creamos macros, vamos a querer que interactúe con nuestra hoja de cálculo. Entonces lo que podrías tener es una forma básica. Digamos que se ve algo así. Vamos a querer que nuestro código macro sea capaz de interactuar con esta hoja de cálculo. Y así si vengo aquí, tengo este buzón de mensajes. Puedo cambiar lo que dice ese cuadro de mensajes. Si lo ejecuto, va a decir lo que haya escrito aquí, hago clic en Aceptar. Voy a querer poner mi nombre Steve aquí en el buzón de mensajes. Entonces la pregunta es, ¿cómo hago eso? Puedo usar este signo de ampersand para combinar dos cuerdas juntas. Y así tengo el texto, Mi nombre está a la izquierda, y quiero obtener el valor de esta celda por aquí, y esta celda está en medio. Entonces puedo hacer eso usando la función de rango. Y el objeto de rango es básicamente una celda o grupo de células. Y aquí entre paréntesis está el nombre de la gama. Y vas a ver aquí, después de que escriba el rango, puedo golpear periodo. Y entonces esto me muestra este menú de todas las diferentes propiedades que tiene el objeto de rango. Y hay una tonelada de ellos aquí. Y el que quiero usar es el valor y ves que salta a eso. Y así eso me muestra que el valor es una propiedad válida que existe. Si escribo fuera de eso aquí, hemos actualizado nuestro cuadro de mensajes. Por lo que tomará el valor de la celda B2. Si ejecuto esto. Ahí vas. Dice que me llamo Steve. Otra cosa que debo mostrarte es cuando hago clic en este botón Reproducir, se va a ejecutar la macro en la que está resaltado mi cursor. Entonces si hago clic fuera de esta subrutina y luego hago clic en Reproducir, puedes ver que me pregunta qué macro quiero ejecutar. En este momento sólo tenemos una, pero si tuviera una lista de 100 macros, no
se puede averiguar cuál queríamos correr porque nuestro cursor no estaba sentado en una específica.
8. Naming una célula: Aquí a la derecha, tenemos esta macro básica que creamos. Simplemente va a mostrar un cuadro de mensajes que dice que mi nombre es. Y luego hace referencia a la celda llamada B diez. Y eso es por aquí. Y haga clic en jugar. Y ahí está el buzón de mensajes. Entonces una cosa que quiero mostrarles chicos, y esto es algo que ojalá supiera mucho atrás cuando empecé a hacer macros porque haría que mi código fuera mucho mejor y mucho más fácil de actualizar, es la capacidad de darnos un nombre específico que no sea su default btn. Y el problema de dejar la celda como referencia POR diez es que a medida que sigas desarrollando este archivo, esta celda puede moverse por todo el lugar. Y así por ejemplo, si agrego algunas celdas aquí y agrego una nueva fila, esto ahora es POR 13, pero mi código aquí todavía dice B diez. Y así si corro esto, ya no va a funcionar. Y entonces, ¿cómo resuelvo ese problema? ¿ Cómo se puede resolver eso es dándole un nombre a esta celda. El modo más rápido para mí de hacer eso es seleccionar una celda. Se llama ser 13. Ahora mismo, puedo subir aquí arriba arriba a la izquierda y simplemente cambiarlo. Estoy cambiando esta celda para que se le llame nombre. Golpeé Enter, se acaba de registrar. Y si hago click en la celda ahora ves en lugar de decir ser 13, dice nombre. Estas otras celdas que no tienen nombres, aún
dicen su dirección original. Pero ahora si voy aquí a mi código y cambié mi nombre de rango para que me llamen nombre. Sé que estoy haciendo esto lo más confuso posible en este momento. Puedo ejecutar este código. Se va a conocer la referencia celular. Pero entonces si esta celda se mueve y agarré algunas filas,
las elimino, voy a correr esto. Y ahí tienes, todavía funciona. Y eso es porque si vuelvo a esta celda, cuando eliminé esas filas, sabía
que esta celda se llama nombre y se mueve con su referencia. Y puedo ver todas estas células nombradas. Si voy por aquí en las fórmulas, haré esto más grande para ti e iré a un gestor de nombres. Puedo ver todos los rangos que he nombrado en esta hoja de cálculo. Y así aquí se puede ver, de nuevo, lo más confuso posible, El nombre de esta celda es nombre. Y aquí mismo dice que se refiere a la hoja uno, celda B21. Y ahora mismo sólo tenemos uno. Pero si tienes muchas celdas diferentes a las que se les dieron nombres, verías todas listadas aquí.
9. Crea una carpeta: Les voy a mostrar cómo usar una macro para crear una carpeta. Y creo que este es un gran ejemplo de cómo puedes pensar en las macros como algo que automatiza tu hoja de cálculo. Pero al usar una macro, puedes hacer cosas que de otra manera no harías dentro de Excel. Algo como pasar por tu explorador de archivos y crear una carpeta. Entonces voy a venir aquí a mi editor de códigos a la derecha, voy a empezar una nueva subrútina. Y puedo escribir aquí mi nombre de macro. Si pulsas Enter, automáticamente creará un final a tu subruina. Puedo nombrar a esta carpeta crear. Y ahora quiero agregar una línea de código para poder crear una carpeta. Y la función crear carpeta es MKDIR. Y se puede ver aquí mientras abro los paréntesis, me está mostrando primero que reconoce esta función, que es algo bueno. Entonces eso significa que realmente existe. Y me está diciendo que lo que acepta dentro de sus parámetros, dentro de los paréntesis después de la función es una cadena y esa cadena es la ruta. Y así esa es básicamente la dirección de la carpeta que queremos crear. Entonces lo primero que quiero hacer es solo probar esta función. Y ya creé una carpeta aquí. Está en el C Drive. Se llama ejemplo C Drive, y ahí es donde queremos crear arte. Al volver a hacer clic en el editor de código aquí, solo
está apareciendo este error diciéndome que esta no es una línea de código válida. Por supuesto que no lo es. Es porque salimos de la ventana con la línea de código medio escrita. Voy a dar clic en Aceptar. Volveré a ello. Es una cuerda, así que lo vamos a poner entre citas. Vamos a escribir ejemplo de C Drive. Ahí es donde queremos nuestra carpeta y nuestro nuevo nombre de carpeta vamos a llamar a prueba, cerraremos esa cotización, cerraremos los paréntesis. Y vamos a probar esto. Hit play. Y ahí tienes, ves una nueva carpeta que se creó llamada prueba. A continuación vamos a combinar un concepto de nuestro video anterior donde podemos crear una carpeta basada en el contenido que hay en nuestra hoja de cálculo. Entonces por aquí atrás en nuestra hoja de cálculo, ya
había escrito esto. Tengo esta celda. Se llama nombres de carpetas. Aquí dentro. Dice Carpeta uno. Puedo nombrar a esta carpeta celular una. Si vengo aquí a esta cadena, puedo usar un ampersand para combinar una cadena juntos. Y voy a querer agregar carpeta de rango un valor de punto. Y así ahora cuando crea una ruta de carpeta, la ruta va a ser esto todo combinado juntos. Entonces C Drive ejemplo, y luego el valor de la carpeta rango uno, que en este momento sólo dice carpeta. Y así si voy por aquí, hago clic en esta macro, ejecuto el código. Vuelvo a mi carpeta de ejemplo y se van, tenemos otra carpeta llamada Folder one. Ves aquí hay un espacio que es el contenido de esta celda.
10. La depresión de errores: En nuestro otro video, lanzamos juntos esta macro rápida donde si
atropello a la derecha, va a crear una carpeta basada en lo que he escrito en esta celda de aquí, que se llama Folder one. Yo quiero mostrarles lo que pasa si hay un error en la macro. Y lo que sé va a pasar aquí. Si vuelvo a ejecutar esto, va a
haber un error porque va a intentar crear una carpeta en la ruta C Drive carpeta de ejemplo un extremo porque ya ejecutamos esta macro. Sé que ya hay una carpeta ahí con ese nombre. Y así vamos a tener un problema donde no va a querer hacer otra carpeta con el mismo nombre porque no puede sobrescribirla. Y así voy a correr el juego. Y ves que aparece este mensaje de error. Y te está diciendo que el error que tenemos es path file access error, runtime time error 75. Sucede que sé lo que esto significa y ya sabíamos que esto iba a pasar. Y el error del eje es porque es incapaz de crear la carpeta debido a una ya existente. Ahora si ustedes no sabían lo que esto significaba, si era una era diferente y no estaban seguros de lo que estaba pasando, siempre se podía
tomar este código de error de tiempo de ejecución. Simplemente agarraré esto, lo escribiré en Google y pondré la frase VBA hasta el inicio de la declaración. Y normalmente encontrarás algún tipo de discusión o resultados sobre cuál podría ser la causa de este error. Y luego a continuación, si vuelves al error en sí, tienes aquí dos botones realmente que vas a usar. Si llegas a final, sólo va a parar cuando se trata de hacer. Pero si golpeas Debug, te
va a llevar a la línea de código que causó el error. Y ésta es agradable y fácil porque sólo hay una línea de código. Y así, obviamente, sabíamos que esta era la causa del error. Pero si tuvieras una macro con cientos de líneas de código, esto te llevaría directamente a la línea que causó el error y resaltó amarillo. Otra cosa buena por saber aquí, y lo haré más grande es que si vienes a esta pantalla, verás que esto dice break, y eso significa que esto está en modo Run cuando tienes aquí una flecha amarilla, eso significa que esto es vivir y está tratando ejecutar una macro o está en proceso de intentar ejecutarla. Si haces clic en reproducir va a continuar hacia abajo tu macro desde donde está la flecha amarilla. Entonces si hago clic en Play, esto va a seguir funcionando. Todavía tiene un error aquí y voy a pegarle fin. Y así ves que ese descanso se fue, y eso significa que ya no está tratando de ejecutar una macro en este momento. Por lo que mejor puedo ilustrar eso. Voy a poner mensaje de debug print aquí, uno. Y luego del otro lado de la declaración, voy a agarrar este mensaje sin cita aquí también. Y si hago clic en ejecutar, obtenemos el error de nuevo. Golpeé debug. Y se puede ver que estamos en esta línea aquí donde está el error. Cuando escribo debug print en un mensaje. Puedes ver que aparece aquí abajo cuando ejecuta esa línea de código en lo que se llama tu ventana inmediata. Y así si golpeo stop y luego vuelvo a ejecutar esto, va a hacer exactamente lo mismo otra vez, va a ejecutar esta primera línea de código, se queda atascado en la segunda línea de código y ahí está tu mensaje. Si soluciono este problema, sin embargo, puedo venir aquí. Voy a tomar esta carpeta, la voy a borrar. Ahora. Si sigo corriendo, voy a seguir corriendo desde esta línea. No vamos a ver el mensaje uno aquí. La carpeta se va a crear con éxito y luego solo vamos a ver el mensaje dos. Y ahí tienes. Y estos mensajes sólo la pluma al fondo. Entonces viste un mensaje para aparecer aquí. No obtuvimos el error porque ya no había conflicto y carpetas existentes. Y hay carpeta uno otra vez.
11. Escribir datos a Cell: De acuerdo, entonces en otro video, les
mostré cómo tomar texto de su hoja de cálculo y usarlo en su macro. El lado opuesto de eso, que quiero mostrarles chicos es cómo usar su macro y luego escribir algo de nuevo en su hoja de cálculo. Para que yo pueda hacer eso. Si tomo un rango y puedo tomar cualquier cosa, lo
llamaré rango ser diez. Y decir que el valor de punto es igual a poner texto en btn. Y pondré eso entre comillas. Y yo dirijo esto. Ahí lo tienes. Es tan simple como eso escribir gravado con tu macro en
tu hoja de cálculo y combinando de nuevo algunos conceptos juntos, puedes agarrar una celda. Esto lo mostré en otro video. Puedes llamarlo, llamemos a este teléfono. Y entonces si vengo aquí, realidad
puedo cambiar de alcance a teléfono. Y si yo dirijo esto, ahí tienes. Y coloca el valor en tu celular de referencia telefónica.
12. Variables: Lo que les he mostrado antes es cómo hacer referencia a la información de la hoja de cálculo. Entonces aquí mismo tengo este macro ejemplo. Cuando hago clic en él, me muestra un cuadro de mensaje y
toma el valor de la celda B1 de aquí. A continuación quiero mostrarte nuestras variables que puedes usar directamente en tu código VBA. Porque a veces no quieres sacar información de tu hoja de cálculo. Hay información que quieres manejar solo en tu código. Entonces vendré aquí, crea unas nuevas líneas. Eso lo limpiaremos. denotación para crear una variable es dim, variable uno. Como vamos a hacer esto, un tipo de cadena es string es básicamente texto. Y así ahora que he declarado esta variable, ahora puedo usarla. Y puedo escribir variable uno igual a texto diferente aquí. Y ahora es en cualquier lugar que use esta variable, uno estará haciendo referencia a la cadena que la declaramos aquí. Entonces vendré aquí a nuestro buzón de mensajes. Puedo cambiar esta referencia que
ahora mismo hace referencia directamente a nuestra hoja de cálculo, la celda B1. Voy a cambiar eso a variable uno. Y si ejecuto esto, el otro cuadro de mensajes aparece con el valor de nuestra variable.
13. Integra en matemáticas básicas: Y nuestro otro video te mostramos que puedes crear una variable. Primero lo declaro con esta variable DEM como cadena. Y luego puedes asignar un valor a esa variable, y luego puedes usar esa variable. En este caso, lo ponemos en un cuadro de texto. Y así si ejecutamos esta variable, uno es texto diferente aquí. Otro tipo de variable distinto de una cadena que usarás muy a menudo son los números. Muy a menudo estarás usando enteros, que son números sin puntos decimales. Entonces podemos cambiar esto a un entero. Y como hemos declarado variable uno es un entero aquí donde le asignamos algún texto que no va a funcionar. Y así si ejecutamos esto, ves que tenemos un error. Es un desajuste de tipo. Y eso es porque estamos asignando una cadena, una variable que es un tipo entero. Y hit debug, te muestra la línea que salió mal. Sólo vamos a dejar de ejecutar esto aquí. Voy a cambiar variable un valor a uno. Voy a crear un nuevo entero. Y eso se llama resultado. Y podemos hacer algunas matemáticas extremadamente básicas aquí. Resultado es igual a Variable uno más variable uno. El resultado es el resultado. Vamos a ejecutar esto. Y ahí vamos. Creamos una variable, le
asignamos un número, hicimos algunas matemáticas. Y aquí está el resultado.
14. 1.12.2 Integer vs. largo: Este debería ser un video rápido. Y éste solo quiero mostrarte la diferencia entre
los tipos de variables entero y lo que estoy más
a menudo usado ahora, que es la diferencia entre el tipo variable entero
y una variable tipo. Voy a poner el
nuevo aquí tanto tiempo. En el último video,
presentamos
las ideas muy básicas de variables y haciendo
algo con ellas. Y utilicé un entero. Pero muchas veces me verás usar una idea similar
al entero, pero en cambio, voy a
usar el tipo de variable larga. Y esto es algo que es
muy específico para VBA. Si te metes en otros lenguajes de
programación o ya tienes alguna
familiaridad con ellos, sabrás que los enteros
extremadamente comunes. Y se usa todo el tiempo. Básicamente es un número entero. Pero una peculiaridad sobre los
enteros en VBA es que solo pueden
ser valores entre, aquí están los números exactos, pero básicamente
negativos 32 mil a 32 mil positivos. Así que sólo voy a demostrar
que aquí muy rápido. Si hago esta celda por aquí, 32 mil, me
falta un 0 aquí. Y luego tengo este código
muy básico donde estoy configurando
i como un entero y luego configurando yo como el
valor dentro de la celda A1. Ponemos i y luego lo
imprimimos aquí. Ahora eso funciona bien. Pero si vengo por aquí, acaba de hacer esto 33 mil, que lo está empujando fuera
de nuestro rango por aquí. Y ejecuto esto, obtengo
este error de desbordamiento. Y eso
nos está diciendo que el valor de 33 mil no puede
entrar en la variable I. Así que no me meteré en la
informática de todo. Básicamente, si te
interesa, puedes leer al respecto. Tiene que ver con un entero
siendo un tipo de almacenamiento de 32 bits. Eso probablemente no sea en lo que
quieras meterte en este momento. Todo lo que necesitas saber
es que los tipos enteros tienen esta limitación dentro este rango de números
que puede aceptar. Ahora, mientras tanto, a lo largo es
lo mismo exacto. Sólo puede manejar valores
más altos. Entonces si cambio
esto a j en su lugar, que es la
variable larga que creamos. Ahora, J se convirtió en 33
mil realmente fácilmente, e hizo nuestra impresión de debug aquí. Por lo que somos capaces de utilizar
estos valores más grandes cuando usamos el tipo de
variable larga sobre entero. Así que cuando me veas usar esto probablemente
con bastante frecuencia en el futuro, sabrás que es básicamente lo mismo que un entero. Sólo sin esta limitación.
15. Si declaraciones: Ahora vamos a repasar si las declaraciones. Aquí es donde realmente estamos agregando algo de inteligencia a nuestro código, donde el código es capaz de tomar una decisión por nosotros. Lo que quiero hacer es que nuestro código revise el número que hay en esta celda de aquí, y luego dime si ese número es mayor a diez o no. Y esto es algo que se puede hacer con una fórmula. Pero yo sólo quería mostrar esto como un ejemplo que se puede hacer también a través de una macro. Y con la macro puedes construir esto para llegar a ser mucho más complicado de lo que normalmente puedes con una fórmula. Por lo que al techo es mucho más alto. Entonces voy a venir a mi macro. Voy a crear una variable para mantener nuestro valor de entrada por aquí. Voy a escribir valor de entrada dim como entero. El valor de entrada es igual al valor de punto del rango B7. Y ahora para nuestra declaración if, vamos a escribir if y luego notación para una declaración if es si condición paréntesis va aquí. Volveré y arreglaré eso. Entonces no le gusta eso porque claro que esto no es una condición real. Y si, y así si creamos aquí nuestra condición, valor
de entrada es mayor a diez. Ahora hemos creado una declaración condicional donde sólo vamos
a ejecutar el código que está entre el if y el fin si, cuando se cumpla esta condición. Y si cumplimos con esa condición, se dará el resultado en la celda B8 igual a sí. Y paso a través de este código. Voy a usar el atajo de FH. A donde vayas, correremos esta primera línea. Declaramos la variable de entrada. Verificamos la declaración if, y no cumplimos con la condición aquí. Y así nos saltamos esta línea de código. Ahora, probemos un número diferente aquí. Diremos 11. Y si vuelvo a ejecutar esto, y ahí mismo se puede ver ya que se cumple esta condición, ahora estamos en esta declaración y vamos a ejecutar esta línea de código. Pero aquí vamos a tener un problema. Y así si vuelvo aquí, pero el número tres y vuelvo a correr esto, en realidad corrieron una fracción aleatoria de segundos, así que tal vez no puedas decirlo. Pero cuando nos caemos, lo que sabemos sucedió es que el valor tres no cumplió con la declaración. Y así todo lo que hizo fue dejar aquí este valor. No agregamos otro sí, pero no se puede decir. Entonces solo voy a poner un cuadro de mensajes aquí para que veas que en realidad corrió y no pasó nada. Y así no queremos que sí. Para quedarse aquí. Eso es de la última vez que corrimos esto cuando la entrada era de 11. Lo que vamos a hacer es crear una declaración if else. Con esta afirmación else, el código que entra aquí va a ser lo que pase si no cumples las condiciones de la declaración if aquí arriba. Y así si no cumplimos con eso, vamos a hacer lo mismo. Igual no. Y volveremos a ejecutar esto, completo. Y se puede ver ahora cuando no cumplimos con la condición mayor a diez, se ejecuta esta línea de código, la declaración else. Y así si volvemos a 11, corremos esto de nuevo, cambiará de ida y vuelta.
16. Bucle for: En este video, quiero mostrarles chicos para bucles. Y estos fueron la automatización realmente sucede donde se
puede lograr una tonelada de acciones de forma automática. Y así primero, quiero mostrarles un bucle de cuatro extremadamente básico. Ni siquiera necesitamos ningún contenido que haya terminado en nuestra hoja de cálculo de la izquierda. El for-loop notación es cuatro. Y luego necesitas una variable que es esencialmente tu contador. La notación típica es simplemente usar la letra i es igual a 123, digamos. Y luego siguiente I. Y así voy a crear un cuadro de mensajes aquí que muestre el valor de i. Y cuando ejecutemos esto, la primera vez que pasemos por este código voy a empezar a una aquí. Esto va a exhibir uno. Y luego cuando llegues a este fondo de la declaración for, se va a aumentar la variable i por una. Y entonces así volverá a la parte superior del bucle y se ejecutará con i igual a dos. Y lo hará todo el camino hasta que sea igual a tres. Y entonces será la última vez que esto se ejecute. Y sabrá dejar el bucle después de que llegues a este criterio por aquí. Y así déjame correr esto. Aquí tienes tu caja de mensajes de i igual a 123. Y luego terminamos. Ahora quiero mostrarte cómo podrías usar algo como esto
para interactuar con tu hoja de cálculo. Entonces aquí tengo tres mensajes. Entonces voy a crear un encabezado para esta lista aquí, control en
audacia sea control u Y aquí tengo tres mensajes, y voy a llamar a esta lista de mensajes. En este momento esta celda de aquí recibe el nombre de la lista de mensajes. Entonces voy a usar eso como punto de referencia. Por ahora. Voy a comentar esto. Y puedo comentar esto poniendo estos apóstrofos por aquí. Y eso da vuelta a estos verdes. Les hace comentarios para que no se vayan a correr. Si vuelvo a presionar play, básicamente no
hay códigos y no pasó nada. Algo que aún no te he mostrado es que si hago referencia a esta lista de mensajes celulares, que de nuevo es vender ocho por aquí, puedo usar esta función que forma parte de un rango llamado offset. Y ves que te da un desplazamiento de fila o desplazamiento de columna. Y así desde la celda a la que estás referenciando lista de mensajes aquí, puedo darle un número que es mi desplazamiento de fila, que le dice que quieres compensar esta celda por una, lo que me traerá aquí para el mensaje uno. Mensaje apareció una y otra vez porque salí esta línea cuando no era una línea de código válida. Volveré a ello aquí. No quiero mover mi columna en absoluto porque seguimos en la misma columna. Si escribo uno, estaremos moviendo una celda hacia la derecha. Dejaremos eso como valor 0. Y si vuelvo a envolver esto en un cuadro de mensaje, así obtenemos la salida del CD. Yo correré esto. Y debido a que estamos en la lista de mensajes, bajamos un desplazamiento de fila. Aquí vemos mensaje1. Ahora comenta esto y podemos usar la misma idea en un bucle. Yo bajaré aquí. Y la otra cosa te mostraré muy rápido ya que estoy escribiendo estos apóstrofos. Una forma más rápida es si voy a ver barra de herramientas y editar, esto me da esta barra flotante por aquí. Yo puedo arrastrar esto arriba y este botón aquí mismo, vamos a comentar o el que está a la derecha del mismo. Descomentaremos todo un bloque de código. Pero entonces, ¿cómo puedo usar este offset que acabamos de demoler en nuestro bucle? Por lo que en nuestro cuadro de mensajes, sabemos que el valor de i va a correr tres veces con i igual a 12. Y luego tres, vamos a agregar una referencia celular igual que aquí arriba, lista de mensajes. Y en lugar de poner uno aquí como lo hicimos arriba, vamos a usar la variable i que cambia cada vez que se ejecuta el bucle. Entonces cambio esto y hago de esto un I. Y así cada vez que atraviesa este bucle, el valor en esta declaración va a cambiar. Y así correré esto aquí. Primer mensaje de bucle 1, segundo mensaje de bucle 2, tercer mensaje de bucle tres. Y así a medida que tomamos esta idea y la aplicamos a macros más complicadas, puedes empezar a ver cómo se pueden utilizar estos bucles para realizar tareas repetitivas.
17. ¡Para la automatización continuada de los Loops: En otro de nuestros videos, te
mostré cómo podrías usar la macro para crear una carpeta. Quiero combinar estos dos para mostrarte lo útil que puede ser el bucle for. Y así acabo de crear este ejemplo donde si lo ejecuto, va a recorrer los mensajes en cada una de estas tres celdas. A medida que pasa por esto para bucle tres veces. Yo, vengo por aquí. Voy a cambiar esto a lista de carpetas, carpeta uno, carpeta a carpeta tres. A esto se le llama lista de mensajes. Quiero eliminar esta referencia aquí y cambiar esto para que se llame lista de carpetas solo por precisión. Te mostré en otro video puedes venir a fórmulas may manager en esta hoja de cálculo, aquí están todas las celdas nombradas que he creado. Aquí está la lista de mensajes. Aquí puedo eliminar esta referencia. Sí. Y se puede ver este nombre celular ha vuelto a su original un ocho dirigido. Y así ahora voy a nombrar esta lista de dos carpetas. Volveré a mi vista de pantalla dividida. Y ahora podemos tomar el mismo concepto antes de tener este cuadro de mensajes. Voy a cambiar esto para hacer directorio a partir de nuestro otro video, tal vez
recuerden que así es como se crea una carpeta en nuestro sistema. Y la entrada a la función make directory es la ruta donde desea que se cree la carpeta. Y así hice una carpeta ya llamada C Drive ejemplo. Esa es la carpeta que queremos que se creen nuestras nuevas carpetas. Y esto usa el ampersand, combina nuestras cuerdas juntas. Tenemos que cambiar esto a lista de carpetas. Y cuando estamos buceando antes, lo que estamos mostrando es que cada vez que este bucle se ejecuta tres veces va a ir 123. Y estas células por aquí. Y así ahora va a hacer lo mismo solo que en lugar de mostrar un cuadro de mensaje va a estar anexando esos nombres de carpeta a la ruta que se utiliza en nuestra función make directory. Entonces vamos a darle una oportunidad a esto. Ahí lo tienes. Parece que no pasó nada, pero eso probablemente sea porque corrió tan rápido. Todo acaba de pasar y no golpeamos ningún error. Si nos acercamos a nuestra carpeta de ejemplo, ahí lo tenemos doblez o 123. Y así los eliminaré. Y así podrás ver esta carrera en tiempo real. Si ejecuto esto, hay tres carpetas basadas en estos nombres. Y si quisiéramos volvernos realmente locos, voy a venir aquí. Si agarro esta esquina inferior derecha, puedo arrastrar esto hacia abajo. Ya ves Excel sabe que estoy tratando de incrementar el número ahí, o al menos es adivinar. Puedo tener diez carpetas. Yo quiero ejecutar este bucle diez veces. Mostrará la carpeta aquí. Hit run. Y ahí están tus diez carpetas. Y ahora realmente nos estamos poniendo en marcha en la automatización.
18. Proyecto de clase 01 Descripción y tuorial: Hola a todos. Si has llegado tan lejos a este video, eso significa que has completado todos los videos que he publicado hasta ahora para esta clase de lo que
considero la introducción a macros de
Excel y empezar de no haber trabajado nunca antes en ellas. Se me ocurrió este proyecto el cual incorporará muchos de los conceptos que pasamos en los otros videos para esta clase. Y así el proyecto que me gustaría darles a ustedes chicos es que tengo una lista de números por aquí. Y con esta lista de números, me gustaría que ustedes escribieran una macro que tome esta lista y transponga estos números por aquí a la derecha. Pero sólo traer los números de la derecha que tengan un valor que sea mayor a diez. Y aquí dentro también tendrás algunas otras cosas, como comenzar con el hecho de que este es un tipo de archivo XLS. Y puedes repasar las instrucciones en la parte superior para darte algunas metas por las que pasar y algunas pistas sobre qué hacer. También te pediré que crees algunos botones para ejecutar tu macro para realizar la tarea. Y el también despeja la lista para que pueda volver a ejecutar la tarea. Y luego cuando las macros terminaran de ejecutarse para aparecer un cuadro de mensaje que te hará saber que la macro está completa. Entonces ese es el proyecto para ustedes chicos. Adjuntaré este archivo a la clase, y así buena suerte con él y dejaré cualquier comentario y la conversación para la clase si tienes algún problema o pregunta en el camino. Y entonces lo que iba a hacer es que iba a completar esta tarea para poder publicarla como las respuestas para ustedes chicos si necesitan seguir adelante o necesitan cotejar. Y me imaginé que sólo lo filmo mientras termino este proyecto. Entonces si ustedes no quieren hacer trampa, ya pueden detener este video e ir directo al proyecto. Por lo que ahora vamos a seguir adelante y tratar de lograr este proyecto. Voy a pasar a la pestaña Desarrollador, ve a Visual Basic. No hay módulo aquí todavía. Y así en la clase En realidad teníamos un módulo creado a partir de la grabación de nuestra primera macro. Sin eso, puedo hacer clic derecho, ir a Insertar, ir a Módulos. Y aquí tienes, tenemos nuestro editor de códigos, cual ustedes chicos, los han reconocido, las clases. Voy a crear una subruina. Yo lo voy a llamar lista de clasificación. Ahí está la subruina. Y así quiero referirme a esta lista. Y no tengo nombre para esta celda, como mencionamos en nuestras clases, podemos referir a esta celda es justo antes de adolescente, pero en realidad quiero darle un nombre para darle una referencia más decisiva. Entonces voy a llamar a esta lista de números. Sólo para demostrar que eso funciona, voy a escribir valor aquí. Me gusta usar este cuadro de mensaje que es justo, solo para comprobar mi código. Si yo dirijo esto, ahí tienes. Tenemos lista numérica, pero en realidad no queremos usar esa celda. Queremos recorrer cada valor de estas celdas por aquí. Y así voy a teclear offset. Yo sólo voy a escribir uno por ahora. Y volveré a ejecutar esto. Y aquí vamos. Tenemos el número nueve, que es el primer ítem de nuestra lista, porque estamos uno abajo de la celda de lista numérica. Ahora sé que voy a querer recorrer esta lista aquí porque voy a querer revisar cada valor para ver si debo moverlo a la lista de la derecha. Entonces para i es igual y quiero ver cuántas veces necesito ejecutar este bucle. Si resalto esto, aquí
hay un pequeño truco de Excel. Si resalta esto en la parte inferior
, te da algunos datos básicos sobre lo que has destacado. Entonces el conteo es de diez, así que voy a querer correr este diez veces. Yo igual a uno a diez. Entonces estoy configurando un bucle que va a incrementarse yo diez veces. Voy a tabular esto y estableceré un punto final para el bucle siguiente, es decir. Y probemos esto. Nueve. Entonces veo el error que cometí aquí es mostrar un cuadro de mensajes mostrando nueve una y otra vez. Y creo que esto va a correr diez veces porque así es como muchas veces se va a ejecutar el bucle. Entonces, vamos a dar click a través de esto. Y eso es porque me fui. Este offset es uno. Y realmente quiero que esto sea i. Y así el valor de yo cambiaré cada vez que este bucle incremente la variable I. Y así si vuelvo a ejecutar esto, aquí hay 9118 y se van, puedo golpear enter aquí. Y ya ves incrementamos un bucle que pasa por cada una de estas células. A continuación, sabemos que queremos poner nuestros resultados por aquí. Y así al igual que con la lista de números, quiero crear una referencia absoluta para esta celda. Yo quiero darle un nombre a esta celda. Y así lo voy a llamar resultados. Y así como pudimos usar la función de desplazamiento para hacer referencia a estas celdas bajando. Podemos hacer lo mismo con nuestra lista de resultados por aquí. Déjame conseguir un poco más de espacio aquí para que podamos ver mejor nuestro código. Y así puedo referirme a esta celda aquí mismo, por
ejemplo, haciendo referencia a los resultados de rango. Ese offset en igual que por aquí donde
usamos la variable i para aumentar la lista hacia abajo, puedo usar de nuevo I, valor de punto. Y así ahora estamos hablando del valor de esta célula aquí. Y en la segunda vez que corre el bucle, seré dos y estaremos hablando de esta celda aquí abajo. Y así sólo un ejemplo hará que el valor de la celda i. Y así lo que espero que suceda es cada vez que se ejecute este bucle, voy a ir desde 1234. Y eso también compensará la bajada. Entonces tendrás de uno a diez abajo en esta lista, ¿verdad? Entonces vamos a abrir un poco esto. Entonces probemos este código aquí. Y así vamos a pegarle a Run. Y ahí tienes. Ves que a medida que este bucle
se incremente, está colocando el valor de i a medida que pasa por el bucle en esta lista por aquí, porque nos estamos compensando con la celda de resultados, que es la parte superior de esta lista. Ahora bien, en realidad no queremos estos números aquí. Lo que queremos hacer es estar moviendo estos números de esta lista a esta lista correcta si el valor es mayor a diez. Entonces déjame crear un poco más de espacio aquí. Y así como un peldaño, no
me voy a molestar en tratar de averiguar si el número es mayor a diez. Solo agreguemos este código y
lo actualizaremos para que solo pasemos estos números a la lista correcta. No nos molestaremos en comprobar si es mayor a diez. Como mencioné en mis clases, me gusta probar un poco la app de lógica a la vez en lugar de simplemente ir directo para el producto final. Y así aquí sabemos que estamos estableciendo el valor de la lista de la derecha, en lugar de configurarla como justo yo, sabemos que estamos obteniendo el valor. Nos dieron un error ahí porque esta no es una línea de código válida. Sabemos dónde dando un cuadro de mensaje donde tenemos el valor de la lista de números por aquí a la izquierda. Aquí estamos estableciendo el valor de la lista de la derecha. Y así si combino estos dos, ahí vamos. Ahora, la lista de la derecha sólo coincidirá con la lista de la izquierda aquí. Y ya no nos vamos a molestar en mostrar esto en el cuadro de mensajes. Entonces solo voy a comentar eso. Puedo borrarlo más tarde. Y así intentemos ejecutar esto y ver qué pasa. De acuerdo, entonces ustedes podrían ser capaces de ver el problema que estoy teniendo así como
estoy compartiendo estas ventanas izquierda y derecha, mis iconos están desapareciendo aquí arriba. Y eso es sólo porque estoy tratando de ver todo a la izquierda y estoy rebajando todo a la derecha. Entonces lo que voy a hacer es que en realidad voy a eliminar estas columnas por aquí. Y sólo saldremos de la memoria porque sabemos lo que estamos tratando de hacer aquí para que pueda mostrarles todo en la misma pantalla. Entonces aquí hago más amplia esta ventana. Vuelvo a ver tu botón de juego. Vamos a ejecutar esto. Y ahí vamos a medida que recorremos cada fila o simplemente colocando el valor de esta celda en la celda de la derecha, y baja esta lista de ida y vuelta. Y ahora queremos combinar la declaración if. Entonces tenemos este código ejecutándose, que trae valores de izquierda a derecha, pero sólo queremos hacerlo bajo ciertas condiciones. Y así puedo crear una declaración if. Donde. Y de nuevo, estoy recibiendo mensajes de error porque estoy dejando líneas de código incompletas aquí. Puedo agarrar esto, que es el valor del artículo de la izquierda. Y digamos, si estamos agarrando esto, lo voy a copiar y pegar aquí arriba. Y queremos decir si el valor de este número la izquierda es menor a diez, cierra la condición. Entonces vamos a realizar una línea de código la cual está moviendo el número hacia la lista de la derecha. Y vamos a acabar con eso con un endif. Y así quedará claro que intentaremos ejecutar esto. Y ahí tienes. Parece que aquí tenemos una macro exitosa. Pero una cosa que queremos hacer para limpiar esto, esto es bastante largo. Y así escribo esta declaración dos veces aquí. Y realmente no necesitas hacer esto, sino practicar uno de los conceptos que aprendimos en nuestra clase. Podemos crear una variable para mantener este valor. Y entonces podemos usar eso en estos dos lugares en lugar de la declaración completa del rango, el offset y el valor. Y así declararemos una dimensión variable. Llamaremos a ese número variable. Y lo llamaremos entero porque ninguno de estos tiene puntos decimales. Llamaremos a número igual. Y vamos a ir a rango, offset y valor. Que es el número que hay en cada una de estas celdas. Y en realidad una cosa que puedo hacer aquí, porque este bucle va a correr diez veces. No quiero declarar esta variable diez veces. Sólo necesito declarar una vez. Y así lo puedo mover fuera del bucle aquí. Y ahora los números declarados solo una vez, pero cada vez que se ejecute este bucle, el valor del número se
reasignará a cada elemento de esta lista a medida que i se incremente a través de la lista. Y así estas referencias aquí son las mismas que ésta. Entonces, en lugar de escribir la referencia de rango completo, solo
puedo escribir el número variable. Y puedo cambiar eso en estos dos lugares de aquí. Y así déjenme borrar esta lista. Yo pego play. Y ahí tienes. Se ve que el mismo código funcionó solo lo simplificamos con el uso de esta variable, el nombre de la variable, número. Entonces eso básicamente completa nuestra macro. Y así ahora sólo vamos a poner orden con los otros puntos de bala de este proyecto. Por lo que queremos guardar esto de un tipo de archivo XLS,
que es el tipo de archivo predeterminado de Excel. Y queremos hacer de eso un Cuaderno de Trabajo Habilitado para Macros. Y así vamos a ir a Save, Save As. Y vamos a cambiar esto a un Libro de Trabajo habilitado para macros. Y ahí tienes. Y ahora cuando presiono Guardar, no
recibo un mensaje de error diciéndome que mi macro se va a perder por el tipo de archivo. Siguiente bala está generando la macro. Eso es lo que ya terminamos. Queremos crear un botón que ejecute esta macro para que no tengamos que seguir adelante. El editor de código y juego de bateo. De otra manera podríamos ejecutar esta macro es haciendo clic en macros en ejecutar nuestra macro de lista de clasificación. Pero para hacerlo aún más sencillo de lo que es, queremos ir a Insertar, vamos a añadir un botón aquí. Vamos a crear ese botón. El macro que vamos a ejecutar son las listas de ordenamiento. Pero en realidad quiero mostrarles chicos, puedo hacer clic en Aceptar aquí y eso va a hacer que este botón ejecute la macro lista de clasificación. Pero si quiero cambiar eso, puedo hacer clic con el botón derecho en este botón, ir a asignar macro, y luego puedo cambiarlo en cualquier momento dos irán a ordenar listas, haga clic en Aceptar. Podemos cambiar el texto del botón para ordenar listas. Y vamos a probar esto. Despejaré esto, resaltaré la lista de ordenamiento de leet, y ahí tienes. Ahora estamos ejecutando la macro desde un botón. Y entonces la última bala que queremos hacer es crear un botón claro. Y así tengo un poco de error por aquí. Voy a cambiar eso. Vamos a añadir otro botón, iremos a Insertar botón aquí. Y es por eso que te mostré antes que podías asignar la macro más tarde. Todavía no tenemos una macro lista clara. Por lo que sólo voy a dar clic en Cancelar. Todavía crea el botón pero no asigna ninguna macro. Puedo hacer click en esto y no hace nada. Cambiará este texto a borrar. Y aún necesitamos una macro que vaya a despejar esta lista. Y así podríamos entrar en el editor de código y escribir aquí una nueva subrutina. Pero lo que hacemos realmente rápido y fácil es si solo grabamos una macro. Por lo que subiré aquí, haré clic en el botón Grabar macro. Por defecto se le nombra macro uno, pero puedo cambiar esto para borrar lista como nuestro nuevo nombre de macro. Voy a dar clic en Aceptar. Puedo tomar esta lista, resaltarla, presionar borrar, que borra una lista. Dejará de grabar. Ahora si vamos a este botón Borrar,
hago clic con el botón derecho en esto, ir a asignar macro. Aquí tenemos nuestra nueva macro grabada llamada lista clara. Daré clic en Aceptar y eso asignará el botón a la macro. Y si vuelvo a ejecutar esto, ahí está nuestra lista ordenada. Está claro. Y ahora se despeja la lista. Ordenar lista. Despeja la lista. Muy bien chicos, así que ahí lo tienen. Ahí está el tutorial sobre cómo completar nuestro proyecto. Espero que hayan disfrutado de esta clase. Por favor deje cualquier comentario y la conversación. Hazme saber cualquier pregunta que puedan tener ya que están pasando por la clase. O cualquier pregunta de macros de excel o Excel que ustedes puedan tener sobre cualquier otro tema. Y estaría encantado de responderles. Y me va a dar nuevas ideas para que más clases creen. Muchas gracias. Agradecéis que os toméis el tiempo.
19. 1.16 Esc Key to Stop Macro: En este video, solo
quiero mostrarte un par de cosas
que podrían ayudarte ya estás programando y cometiendo errores y
solución de problemas, que es cómo detener el código
en medio de correr. Entonces lo que configuré aquí
es un bucle muy básico. Tiene nuestro índice y
va a contar yo de uno a 100 mil. Y si corro esto, lo que vamos a ver es
que lleva un tiempo correr. Y podrías
establecer una situación como esta intencionalmente o no. Pero podrías hacer algo
donde tus macros se ejecutan durante mucho tiempo y has cambiado de opinión. Hemos hecho algo mal y queremos detener
lo que estamos haciendo. Entonces, de hecho, voy a
golpear esto hasta 1 millón. Por lo que realmente va
a llevar mucho tiempo. Voy a golpear a Play aquí. Entonces podemos ver que esto
va a llevar mucho tiempo. Y así queremos parar. Acabo de golpear la llave Escape. En realidad. Este es un ejemplo decente
porque no funcionó. Ya ves cómo este tipo de quedó insensible
en cuanto a ventanas, puedes ver que probablemente reconozcas esto por solo
usar tu computadora, que todo está
congelado en este momento. Básicamente, se
trata de tan duro correr
que se ha
apoderado de tu computadora y ahora
en realidad no podemos ejecutar nada. Lo que estaba tratando de
mostrarte es que
si golpeas escapar mientras se ejecuta
el código, entonces vas a detener
la macro en teoría. Pero sí golpeamos estas situaciones donde todo está
congelado y no responde. Ni siquiera está
tomando ningún comando cuando presionas
las teclas del teclado. Es sólo que no los está recibiendo. En este caso, estamos un poco
atascados, para ser honestos. Voy a dejar esta
manifestación en el video, aunque
no sea lo que planeé. Y creo que en este caso, porque es tan simple,
sigue tratando de hacer el trabajo. Así que ahora solo está atascado en este
proceso realmente largo donde está haciendo cosas durante
mucho tiempo. Y eventualmente se va
a estrellar el programa Excel o simplemente
va a seguir trabajando en esto y
eventualmente en realidad va a
contar hasta un millón. Y entonces
probablemente lo veremos por aquí en nuestra ventana de inmediatos. En esta situación,
estamos un poco atascados. Podríamos esperarlo o
podríamos hacer Control Alt, Eliminar y terminar la tarea. Y básicamente obligando a
Excel a cerrar. El problema con esas
situaciones, por supuesto, es que no ahorras
recientemente de lo que
podrías perder los cambios
que has estado haciendo recientemente. Por lo que en realidad voy a
seguir adelante y terminar con esto. Vamos a cerrar Excel aquí. Se puede ver Excel está usando toda la CPU porque sigue
ejecutando este bucle loco. Entonces esta es una buena
demostración de las situaciones que
podrían pasar si accidentalmente creas procesos
realmente largos o escribes código que
no es muy eficiente, mete en estos bucles,
instala todo fuera. Ahora te mostraré lo que en realidad originalmente
quería mostrarte,
que es que a medida que
ejecutamos este bucle, entonces si coges un
lo suficientemente rápido antes de que se haga cargo tu computadora y deja de
recibir comandos, que en realidad se puede detener una macro que se está ejecutando
actualmente. Y puedes hacerlo
pulsando la tecla Escape. Entonces parece que si
dejamos que esto funcione demasiado tiempo, se va a
apoderar de mi computadora. Pero al golpear play, puedo golpear escape muy
rápido si me doy cuenta. Y ves Excel era
receptivo en ese momento, y me está diciendo que
interrumpí el proceso. Y aquí puedo golpear a End, que sólo va
a parar todo. O si golpeo el error, se va a parar justo en la línea de código
que estaba ejecutando. Lo que vimos aquí es que en realidad
hay una línea en estas
situaciones que va demasiado lejos y luego el sistema podría hacer que Excel no responda, y entonces este
atajo no funcionará. Pero es básicamente
la clave de escape. Ahora otra pequeña
situación que
creo que vale la pena mostrar es si
hago un cuadro de mensaje
aquí y golpeo run, traté de hacer clic, Ok, si golpeo Escape aquí, no
está saliendo del código. En cambio es solo
salir del cuadro de mensaje. Y estoy un poco atascado en
este bucle de cuadro de mensajes. En situaciones como esta, solo
mantengo presionada la tecla de escape y simplemente presionarla y sostenerla. Y básicamente está enviando la clave Escape sin embargo
muchas veces por segundo. Y luego está atrapando
el escape
justo en el medio cuando la ventana se está cerrando y la
siguiente está apareciendo. Entonces entre ese tiempo, realidad
está obteniendo
el comando de escape que queríamos que Excel recibiera. En tanto, mientras el cuadro de
mensaje estaba abierto, estaba pensando cuando
presionamos Escape, solo
estaba tratando de
cerrar el cuadro de mensaje. Por lo que también puedes mantener presionado el
escape si terminas en un escenario extraño como este
con un pop up recurrente. Eso es todo lo que quería
mostrarte para este video.
20. 1.17.1 Haz una introducción en bucle: Una de las lecciones anteriores te
mostré un bucle de cuatro índices, que ya
tenemos un video encendido. Y este es el tipo más
común de bucle, que es que tienes
una declaración for, tienes un contador de índice
que típicamente se llama I. Y luego vas de,
en este caso 123, y va a bucle y incrementos hacia arriba uno a la vez. Entonces si ejecuto esto con F8, ya ves que pasamos por este bucle. Yo igual a uno. Cuando
decimos a continuación yo, eso va a
incrementarme yo por uno, así que va a ser 23. Entonces ese es el
final del bucle. Porque voy
de uno a tres. Ya sabemos que puedes
cambiarlo a diez por aquí. Y sólo voy a seguir adelante
y correr todo de una vez. Y va de uno a diez. En este video,
quiero mostrarles que hay diferentes
tipos de bucles. Hay algo más que lo que te
voy a mostrar en este video. Pero honestamente, no uso
muchas de las otras variaciones. Pero el otro importante
es el bucle do-while, que no tiene
la palabra para en él. Entonces eso es sólo para que sea
diferente de esa manera. Y te mostraré lo que es
diferente al respecto. Hay otro que
uso que rodará otro video sobre
llamado el para cada bucle. Pero aquí te mostraré
ese bucle do-while. Y así tiene una sintaxis similar donde tienes estas declaraciones
que envuelven tu bucle. Y luego en tu sangría
entre esas declaraciones, lo que vamos a
ejecutar en ese bucle. Pero en este caso, ves que es un poco diferente que todavía
declaramos I. Pero aquí me puse igual a uno. Básicamente lo que va
a pasar es en lugar de decir que soy de uno a diez, en realidad solo voy
a empujar esto. Entonces no es una distracción. Tenemos una condición aquí, y este bucle se va a ejecutar
si esta condición es cierta. Entonces esto es más una
verdadera declaración falsa en
comparación con nuestro for-loop, que no tiene una
verdadera declaración falsa. Tiene un contador que va de
algo a otra cosa. En este caso,
vamos a recrear lo que mostramos en
nuestro bucle de cuatro índices, donde tenemos una condición
donde vamos a correr yo es menos de tres. Eso sería similar a escuchar. Pero lo que notarás
es en este bucle mismo, va a correr hasta
que tenga menos de tres. Pero no dice
abiertamente lo que empiezo como, como parte de esta declaración de bucle. Entonces lo que tengo que hacer es fuera de nuestra
declaración de bucle por aquí, lo
estoy diciendo que empiezo como uno antes de que incluso diga
algo sobre el bucle. Entonces está fuera de
nuestro código para bucle, cuál es la condición que
se está configurando como. Ahora, si le pego a F8,
verás que yo es igual a uno. Si tengo menos de tres, vamos a entrar en nuestro bucle. Estamos menos de
tres en este momento. Entonces lo estamos imprimiendo. Y entonces aquí tengo que
decirle que se incremente. Por aquí. Vimos que
aumentaría uno cada vez que lleguemos a
esta línea de código. Y en cambio, eso no va a
suceder automáticamente aquí. Tenemos que escribir nuestra propia línea de código para incrementar yo por uno. Usted ve aquí mientras nos
bucle a través de tres. Y entonces ahora a medida que
pasamos equivale a tres, lo siento, equivale a tres la
última vez que hicimos la
impresión de la debug por aquí. Y luego añadimos uno más a mí, haciéndolo para en este
punto del código. Y entonces va a volver a
saltar para revisar esta condición. Ver que no es cierto. Entonces salta fuera de nuestro bucle. Entonces con esta configuración, podemos hacer
lo mismo que hicimos antes, que es cambiar esto a diez
igual que una demostración. Y si pego Play, ahí vamos. uno a diez. Acaba de mezclarme solo porque ya
tenía inflamación
ahí dentro. Pero si golpeo play,
vamos de uno a diez, igual que lo hicimos con nuestro bucle de estilo de cuatro
índices aquí arriba. Pero se puede ver en la
forma en que está escrito, la configuración es un
poco diferente y lo que tenemos que hacer es
un poco diferente. Ahora hay casos de uso específicos donde el bucle do-while es realmente útil en lugar del bucle de
cuatro índices aquí arriba, que puedo mostrar más adelante. Pero lo que te mostraré ahora es una razón por la que
generalmente por defecto
usar un for-loop sobre el bucle
do-while la mayor parte del tiempo. Y la gran razón para eso
es porque esto va a bucle hasta que esta
condición sea falsa. Entonces va a seguir corriendo. Sea lo que sea esto cierto. Tengo una línea de código aquí
donde incrementé i Pero quiero mostrarte
si vengo por aquí y olvidé teclear esa línea
de código y golpeo F8. Entonces yo iguala a uno aquí y estoy
pisando el código, tengo menos de diez e
imprimimos aquí. Vamos a comprobar
si tengo menos de diez, que es,
porque sigue siendo uno. Nosotros imprimimos aquí. Si sigo haciendo un
bucle por aquí, ves cada
vez que soy igual a uno, estamos haciendo bucle
mientras sean menos de diez. Entonces esta condición
va a ir para siempre. Yo nunca cambio. Y la condición verdadera o falsa aquí está
basada en el valor de I. Entonces esto va a
ser un bucle sin fin. Puedo golpear a F8 para siempre. Entonces el
bucle do-while tiene este tema que es vulnerable a este bucle
interminable por aquí. Entonces tal vez te preguntes
qué pasa si
golpeo play en lugar de golpear a FAA. Entonces vamos a seguir adelante y correr esto. Ves que esto está parpadeando el
número uno aquí porque
básicamente solo está mostrando una
interminable columna de unos. Y ahora mi computadora
se está congelando. Excel se está congelando. No puedo hacer clic en nada aquí. Y esto está bien en
camino a estrellarse. Ni siquiera me molestaré en esperar
esto y ver qué pasa. Pero esto irá
mientras estés dispuesto
a esperar básicamente. Y eventualmente Excel sólo
va a estrellarse y
te dirá que hay un problema como lo que sucede cuando
Windows se detiene. Entonces eso podría suceder
por sí solo o podrías esperar cinco
minutos así, pero va a ir para siempre. El camino de salida es el clásico
control alt delete. Y entonces vamos
a tener que forzar apagado Excel para que
esto realmente se detenga. O simplemente espere para siempre realmente. Este es el expediente en el que
estábamos trabajando. Tengo este material configurado para diferentes demostraciones más adelante, pero esa es una gran razón por la que
evite el bucle do while. Si no tengo que
usarlo donde no hay
especialmente una buena razón para usarlo porque es
realmente vulnerable a configurar una condición donde accidentalmente tienes
un bucle infinito. Y si lo uso, tengo que asegurarme de
que establezcas una condición que realmente
va a cambiar
si sales o no del bucle
eventualmente o no. Ahora que tenemos
son incremento de yo aquí correctamente y nuestros
bucles corriendo como debería. Nuevamente, hay una pequeña
variación que te voy a mostrar, que es que ahora mismo
tenemos esta declaración por aquí, lo
que significa que está revisando la condición antes de que comience
el bucle. Entonces si dije
algo como esto, lo que significa que vamos a correr si soy menor o igual a 0. Y sabemos que la IA
va a ser una aquí arriba. Entonces si golpeo F8, igual uno en esta condición
es falsa de inmediato, uno no es menor que 0. Por lo que ves se salta fuera de bucle y solo nada
pasó en absoluto. Otra variación de esto es que puedo tomar esta declaración
mientras. Lo cortaré y lo
pegaré aquí abajo. Y a pesar de que esta declaración no se cumple en ningún
momento del código, va a ejecutar nuestro bucle
porque no va a comprobar esta condición hasta que
lleguemos al fondo aquí. Entonces si golpeo F8, igual a uno. Y luego vamos
a realizar esta tarea e imprimir una. A pesar de que no esté
menos de 0 hasta que lleguemos aquí. Y luego se va a saltar app. Y básicamente si
pones o no esta condición en
la parte superior o inferior, le dice al código cuándo
revisar la condición. Y la razón principal
para configurarlo de esta manera es porque quieres que este
código se ejecute al menos una vez, sin importar cuál sea la condición,
aunque sea obvio,
como lo que es aunque sea obvio, simple
configuración tiene aquí, que nunca
se cumplirá la condición. Por lo que este código siempre se
ejecutará al menos una vez antes de que se detenga y no
termina realmente haciendo bucle. Entonces esa es la
primera introducción a este estilo de bucle diferente que se llama bucle do-while
por razones obvias aquí. Y a continuación hay un pequeño video de
seguimiento donde te
mostraré los casos de uso, por qué es posible que quieras
usar este estilo específico.
21. 1.17.2 Haz mientras usas el bucle: En el último video,
te mostré el concepto básico de un bucle do-while en lugar
de R for index loop, que teníamos un video
anterior encendido. Aquí, quiero
mostrarte un
ejemplo de caso de uso que muestre por qué es posible que quieras usar un
bucle do-while para ciertos procesos. En este caso, tengo
un poquito de datos de ejemplo en nuestra
hoja de aquí. Y lo que estoy configurando es una subrutina básica
que va a contar cuántas filas hay aquí y decirnos el número
de filas en nuestros datos. Por lo que he configurado
ya una subrutina aquí que los usos son
para bucle de índice, lo que me trae de uno a diez. Entonces se está tomando nuestro rango A3, así que escucha y luego
revisando usando nuestro índice, tengo que bajar cada celda y comprobar si hay contenido. Y va a bajar. Y luego cuando encuentre una celda
que no tiene contenido, va a decir que la
última fila es una por encima de eso. Entonces en este caso
va a ir 1234. Ve que no hay nada
aquí y detente y di, mi último recuento de filas debe
ser cuatro menos uno. Y la respuesta es tres. Así que eso es lo que
vamos a hacer aquí. Voy a golpear a F8 para
pasar lentamente por esto al principio. Ves que yo igual a uno. Voy a establecer esta
variable llamada
texto de prueba como nuestro valor de desplazamiento. Entonces tenemos un tres y luego
desde que equivale a uno para empezar, estamos en esta celda ahora mismo. Y luego
nos está diciendo que el texto aquí es 162020, ya que es una fecha. Y luego está comprobando
si
eran o no esa celda de
aquí está en blanco, lo cual no lo es. Por lo que ahora va
a seguir haciendo un bucle en paso hacia abajo. Y luego baja a
la siguiente, que es 123. Entonces no está en blanco. No entra
esto si declaración. El tercero, lo mismo. Y ahora lo que sabemos desde
aquí es que estamos en yo igual nuestro texto aquí
no muestra nada. Y así entramos en
nuestra declaración if. La última fila es yo menos una. Entonces tres, estamos usando
esta salida para declaración, lo que significa que
vamos a escapar nuestro bucle a pesar de que
no llegamos de uno a diez. Porque conocimos
esta línea de código. Vamos a
saltar de nuestro for-loop. Y dice que aquí
hay tres filas. Así que ahora si paro y
vuelvo a golpear Play, simplemente
pasa muy rápido. Hay tres filas. Si hice algo así como solo
añadir otro valor aquí, puedo volver a golpear play. Y se puede ver que dice que
hay cuatro filas. Entonces ese es el sistema aquí. Ahora bien, si voy a esta
otra hoja que tengo, aquí
hay muchas más filas
de información. No es tan obvio,
como vimos antes, que había tres filas que solo
podíamos contar nosotros mismos. Esto es mucho más probable
porque si hay tres filas, no
necesitamos una subrutina
para contar automáticamente. Sé que podríamos desplazar todo el camino hacia abajo y
contarlo a través de Excel, pero muchas veces
podríamos incrustar una función como esta directamente en
nuestra automatización. Entonces esta podría ser una
asadilla de código aquí en páginas de automatización que necesita averiguar
las filas dinámicamente. Entonces por aquí, te
imaginas que esto ya no va a funcionar porque nuestro
for-loop va de uno a diez. Y si pego Play aquí, se
puede ver que dice que
hay 0 filas. Y eso es porque
vamos de uno a diez. Entonces 123456, todo el camino a diez. Y nunca llegamos a un escenario
donde el texto esté en blanco. Entonces entonces para cuando se hace
este bucle, nunca
hemos tocado el escenario donde el texto está en
blanco en la celda. Y así la última fila simplemente nunca se establece como otra
cosa que no sea 0, que es su valor
predeterminado original. Puedes tener esta situación. Y lo grande
aquí es que no sabemos cuántas filas va abajo
esto. Y así tenemos este bucle
Eso nos está obligando a decirnos cuántas
veces podemos bucle. Hay un beneficio del
for-loop porque no tenemos estos bucles infinitos que
creamos en el último video, porque siempre hay
un fin a este bucle. Básicamente siempre
hay que decirle dónde comienza
y dónde termina. Entonces ahora podríamos hacer
algo así como mil e
intentaremos ejecutarlo. Por lo que sólo escogemos un número enorme para comprobar cuántas filas
y aún obtenemos 0. Y eso es porque hay
más de mil filas en esta tabla en el mismo
problema que pasó a las diez está pasando a mil. Entonces lo que podríamos hacer es simplemente
hacer de este un número gigante. Lo llamaremos 99 mil. Está corriendo. Y estamos
en 1290 filas aquí. Y venimos aquí abajo. 1293 es nuestra fila de Excel. Entonces esa es la respuesta correcta. Pero tuvimos este problema
donde no sabíamos a qué debe ir
el tope final de esto para el bucle de
índice. Y no queremos siempre
solo componer un número, aunque esa es una forma completamente
fina de hacerlo. En realidad se ve en algunos puntos en videos que
ya he grabado que podría estar más lejos en esta clase que uso
este método por aquí. Porque funciona bien si
sabes que nunca
vas a golpear más de 99
mil filas aquí, esta es una buena manera de hacerlo. Y entonces sigo
evitando ese problema. Te mostré en
el último video de hacer
accidentalmente
un bucle infinito. El motivo para usar
un bucle do-while, que ya he
configurado aquí, es porque no tengo que
inventar un número de
lo lejos que va a llegar esto. Este bucle
sucederá indefinidamente, y no tengo que
poner un tope final de cuándo dejar de buscar. Entonces cuando no sabes cuándo
quieres que el bucle se detenga, el bucle do-while solo
va a seguir revisando. Y así configuré este algoritmo. Bueno el FAA a través, que está haciendo
lo mismo exacto con un bucle do-while. Y estoy haciendo esto
mientras mi texto de prueba, que está revisando
la información en nuestra celda, no está en blanco. Y así va a seguir
haciendo bucle mientras no esté en blanco. Y luego en cuanto encuentre
un espacio en blanco, se va a parar. Una cosita que tenía
que hacer aquí es empezar. El texto de prueba tiene un comienzo. Y de esa manera en realidad
cumpliríamos con esta
condición aquí abajo. Otra forma en que podría hacer esto es mover esto hacia abajo al fondo, igual que mostré en
el video anterior. Entonces, por supuesto, hay un montón de formas
diferentes de
configurar estos algoritmos. Esto va a seguir haciendo bucle. Está haciendo básicamente
exactamente lo mismo, que está bajando cada celda. Aquí adentro. Tenemos que tener una línea de código que incrementa
yo a nosotros mismos. Pero va a
seguir revisando estos. Y si presiono el
botón de reproducción por aquí, está corriendo hasta 1290, que de nuevo, es
la respuesta correcta. Entonces este es el caso de uso más
común, al
menos para mí mismo, que
queremos usar un bucle do-while. Eso es si no sabemos cuántas veces
queremos hacer un bucle en absoluto. Y podemos evitar la necesidad de tener esta situación en la
que necesitamos llegar
a un número enorme. Y sólo tenemos que
sacar uno del aire
delgado y arreglarlo
para suponer que esto es cuando sí
asumimos que tenemos que parar y luego necesitamos saltar fuera del
bucle for cuando nos encontramos con una condición. Porque si no tenemos salida
para la cual se va
a saltar fuera de bucle, esta cosa va a ir a
99 mil pase lo que pase. Porque no
tenemos ningún código que
vaya a cortar el bucle corto. Entonces si vengo aquí y hago clic, verás que aquí no hay
más textos jóvenes. Y eso es porque todavía
sigue haciendo bucle en la debug, imprime celdas en blanco hasta 99 mil. Y de hecho, esto va
a durar mucho tiempo. Y así esto termina teniendo su propia susceptibilidad
a estropear el bucle. Y de alguna manera,
el bucle do-while aquí se convierte en la solución
más limpia. Y de hecho, ves aquí mismo, por costumbre, escribí exit do, que es la
misma notación que la salida porque sólo
esto es una declaración do. Por lo que esto también
saltará del bucle. Pero ahora que estoy explicando
lo que acabo de hacer, no necesito la salida hacer while loop porque para
cuando le pegamos esto, la próxima vez que llegue, entonces ya
vamos a probar para esta condición en
salto fuera del bucle. Entonces, por ejemplo, si golpeo a
F9 aquí y golpeo Play, está pasando por
todos nosotros mismos. Si encontramos nuestra última
fila, que es 1290, y luego le pego a F8, ya verás que tenemos aquí arriba
para probar el texto. En esa condición es falsa
y saltamos del bucle. Entonces en este escenario, no
tuve que poner una línea
de código para
saltar automáticamente del bucle porque ya se cumplió esta
condición. En tanto aquí arriba, para que yo deje
este bucle temprano, porque tenemos este techo al
que el bucle ya
piensa que necesita ir. Necesitamos tener esta salida para
envuelto en una condición if. Para que sólo en una condición
específica, salimos
temprano del bucle for. Eso es todo por ahora. Esa es la demostración básica
del bucle do-while y los casos más básicos de
por qué podría necesitar usarlo.
22. 1.17.3 Para cada introducción al bucle: En esta lección,
quiero repasar los cuatro bucle de cada estilo. Por lo que ves tenemos un bucle
aquí que dice para cada uno. En las lecciones anteriores, hemos repasado los bucles
FOR normales, que es el más estándar
donde declaras una variable que es un
entero. O a lo largo. En este caso, solemos
usar I como índice, pero usamos otras letras
o variables para. Y a medida que
avanza cada iteración del bucle, entonces nuestra variable aumenta una con el primer valor
hasta el último valor. Entonces si pasamos por
este código aquí, yo soy uno, y luego el siguiente
bucle, es 234, todo el camino hasta 100 aquí. Y en este ejemplo realmente
rápido, estoy usando nuestra
variable de índice para obtener el valor de la celda que está
en la fila I y la columna uno, que se puede ver por aquí, va a ser estos valores. Entonces cuando iguala a uno, tenemos el valor de celda
uno, luego 234. Y eso es porque
nuestro número de fila es la variable que está cambiando a través de cada iteración de. Esto es algo
que ya hemos
pasado en las lecciones pasadas. Acabo de golpear a F5
y ejecutar esto todo el camino a través y bucle
a través de todas estas variables. Voy a despejar esto ahora. Ahí está este otro tipo de
bucle que uso muy a menudo. Se llama el para cada bucle, no se usa como comúnmente, así que lo explicaré y
te mostraré aquí el caso de uso para ello. Y aquí ya
tengo un escrito donde tienes un objeto
que es un rango. Básicamente el para cada bucle, en lugar de tener
una variable de índice que cuenta de un
número menor a un número más alto. Toma algo por aquí del
lado derecho de la declaración, que es un montón de objetos. Y luego para cada uno está tomando un solo objeto para obtener
alguna analogía del mundo real. Podría ser algo así como
si tuvieras una pared de ladrillo, se podría decir algo así como por cada ruptura en pared de ladrillos. Y entonces tienes el siguiente
ladrillo es nuestra notación aquí. Y básicamente va a iterar
a través cada unidad en un grupo de unidades. Ojalá eso tenga algún sentido. Creo que éste sobre la marcha. Lo que tengo aquí es que
tengo una gama de celdas. Entonces la celda A1 a través de un 100 va a ser 100 va a ser
todas nuestras celdas que
tienen valores aquí, que ya vimos
en nuestro bucle anterior. Y creamos aquí una
variable objeto para un rango, que organizar es una celda
o grupo de celdas. Entonces esta expresión aquí mismo, para cada rango, en este rango, un uno a 100
básicamente está diciendo para cada celda en el rango de
celdas A1 a través de un 100. Y luego tomamos este rango y vamos a depurar,
imprimir el valor. Así que si
llego a F8 aquí, valor uno, y luego la próxima vez que pasemos a este rango, básicamente
estamos en la celda dos por aquí porque solo
vamos a pasar por cada cosa. En este grupo de cosas. Ves valor2, valor3, valor cuatro, y así sucesivamente, como
he mirado por aquí. Ahora corre esto todo el
camino y se puede ver que vamos todo el camino a 100 porque hemos pasado por cada unidad en este
grupo de unidades, que es A1 a 100. Incluso puedo añadir aquí,
tal vez añadir algo de claridad es que nuestra gama tiene todas estas
diferentes propiedades con ella. Puedo decir algo como depurar, imprimir nuestra dirección. Si borro esto
y vuelvo a golpear F8, aquí está nuestro valor uno, y se puede ver la
dirección del rango es A1, A2, A3. Porque estamos
pasando por cada célula en este grupo de células. La diferencia aquí,
como se puede ver, que no hay índice. Y no le estoy diciendo a este bucle cuándo tiene que empezar y
cuándo tiene que parar. Al igual que aquí, tenemos
que decir del uno al 100 y necesitamos saber que se
llama nuestro encuadernado inferior. Encuadernación superior. Pero aquí el bucle es
solo averiguar cuántas unidades hay en nuestro
grupo de unidades por aquí. Y si hice algo
como A1 a través de B10, 100 por ejemplo, puedo hacer esto. Y déjame parar esto para que
podamos empezar de nuevo. Averigua esto aquí abajo. Tenemos valor uno
y nuestros vestidos A1. Ahora tenemos un blanco
en nuestro vestido es b1. Así que vamos a venir aquí. A2, B2, B3, B3. Y ves que esta cosa está tomando la
decisión por sí sola. A1 a 100 ¿
todo esto bajó a 100? Y a medida que está pasando, cada célula de este grupo de células va
de aquí a aquí, a aquí a aquí y así sucesivamente. Y está averiguando qué células hay en
este grupo de células. Ese es este rango. Podemos ejecutar esto. Entonces esa es la idea principal de un bucle foreach hace solo
una introducción rápida. Toma tu grupo
de cosas y
va a pasar por cada cosa. Y luego puedes
usar esta variable dentro de tu bucle es típicamente la razón por la que
quieres hacer esto. Y no tienes
que preocuparte por estos números de índice numérico
que estamos usando aquí. Averigua esta
avería de la unidad para ti con el bucle. Otro caso de uso aquí que he preparado es lo mismo. Voy a hacer un bucle basado en índices, que es el estilo más común. Y otro caso de uso
para el, para cada bucle. Entonces aquí, si vengo aquí, ya ves que tengo estas
sábanas, 12345 por aquí. Estoy usando mi índice. Y si llego a F8 aquí, hice un error tipográfico por aquí. Esto es el siguiente, veo que nuestro próximo es siempre en
lo que se basa nuestro bucle. Entonces ya que estamos haciendo un bucle
for aquí abajo,
tengo que decir a continuación, yo, si usted viene aquí
por cada rango, cuando estoy terminando mi bucle, digo ir a la siguiente
gama. Por aquí. Por aquí, esto va a
correr de I equivale a uno
al recuento de hojas de trabajo
en este libro de trabajo, las hojas de trabajo y luego
el número de hojas de trabajo, que vemos por aquí
es de uno a cinco. Entonces si ejecuto esto, me equivale 1234 y ves que está seleccionando estas hojas para cinco y está activando estas aquí
abajo en la parte inferior. Y luego el mismo
concepto con las células y el rango de células
que hicimos antes. En cambio, puedo hacer esta
otra notación donde
tengo aquí un objeto de hoja de cálculo. Y luego estamos diciendo para cada hoja de trabajo en nuestro
grupo de hojas de trabajo. Entonces esto de aquí significa todas las hojas de trabajo
en nuestro libro de trabajo. Entonces puedo usar este objeto
de hoja de trabajo aquí. Y a través de cada iteración se va a pasar por
cada hoja de aquí. Y luego cuando digo activar, va a activar
esa hoja de trabajo. Entonces si escribo aquí, Activar hoja uno que
ya está activada ahora 2345. Entonces eso es todo. Eso es sólo una introducción básica
al, para cada bucle. El mágico de ello es que se
necesita un grupo de cosas y averigua cuántas de la
sola unidad hay ahí. Y sale
con eso para ti, igual que nuestro ejemplo aquí arriba, todo lo que tenemos que hacer es cambiar nuestro objeto por aquí en el lado
derecho del foreach. Y el bucle mismo
averiguaría cuántas subunidades hay en este
grupo de unidades por aquí. Por lo que ojalá eso
tuviera algún sentido. Agregaremos más a nuestra explicación de
por-cada bucles a medida que avanzamos. Pero esta es una
introducción básica de lo que es.
23. 1.17.4 Variante de tipo variable: En esta lección, quiero
presentarle el tipo de variable en
VBA llamado variante. Y para hacer eso, voy a hacer un par de demostraciones con justo lo que puede pasar con
diferentes tipos de variables. Ya nos has visto
usar enteros y cadenas, lo cual es muy común para tipos de
variables y cada lenguaje de
programación realmente. Así que he creado un par
de ellos por aquí, dos enteros, y luego esta variable de
cadena por aquí. Entonces tenemos estas variantes
que dejarán de lado por ahora. Puedes ver aquí abajo
que voy a establecer nuestro entero i1 igual al
valor de lo que está en el rango A1, que es uno por aquí. Entonces ves que nuestro entero uno
va a convertirse en rango A1. Y eso funciona bien. Verá, estoy flotando por aquí
y dice que I1 es igual a uno, como esperaríamos de esta celda de la izquierda. Ahora voy a tomar
nuestra variable de texto, que es nuestra cadena. Y voy a decir
igual celda A1 también. Entonces, si coloco el cursor sobre los textos, puedes ver que también
funcionó correctamente. Te está mostrando
que el texto es igual a uno. Pero hay una diferencia aquí
donde se ve sobre el texto, hay estas
comillas porque es una cadena. Eso es porque una cadena
puede aceptar cualquier carácter, letras, números, caracteres
especiales. Y entonces hay una comilla
que muestra eso. En tanto, si
vuelvo a subir a i1, no
hay comillas que
indiquen que esto es
sólo un valor numérico. Lo cual tiene sentido porque
quiero es un entero,
no una cadena. Ahora tenemos I2, que es un entero aquí arriba. Y vamos a establecer
que sea el valor
de la celda A2 de aquí. Y esperamos que eso no funcione. Entonces como le pegué a F8, verá que
tenemos un desajuste de tipo. Eso es porque i2
necesita ser un entero. Pero aquí la
celda es la letra a, por lo que el valor aquí y el tipo de
variable es incompatible. Y así obtenemos este
tipo de desajuste. Entonces esto surge todo el tiempo. Entonces tendríamos que
averiguar algo. O este fue un caso de uso real. O el valor incorrecto está por aquí en la celda A2 y no
queremos ese valor ahí, o no creamos
esta variable correctamente y deberíamos convertir esto en
una cadena o algo más. Entonces ese es este tipo de desajuste. Todo esto está configurado para
demostrar estas variantes. Entonces creé dos variables
que son tipos variantes aquí. Entonces v1 y v2. Solo voy a saltarme este tipo de
línea de desajuste que tenemos por aquí y saltar a v1. Y ambos son tipos variantes. Así que ya ves voy a hacer
algo con V1 y V2 aquí. Y voy a establecer este
V1 para que sea igual a la celda A1, que es el valor
uno de aquí. Yo dirijo eso. Y si pasas el cursor sobre V1, ves que se convirtió en uno. Y no tiene
comillas. Entonces eso te dice
que no es una cadena. Entonces esto es muy
similar a flotar por aquí a i1,
Eso es un entero. Ahora en V2, vamos a
conseguir la letra a aquí. Entonces si le pego a F8, ya
ves como funciona esto. Y esta es la letra
a con comillas. Entonces parece que
esto es una cadena, igual que nuestra
variable TXT de aquí. Entonces eso es algo interesante. Ves esto no tiene
comillas ni V1. Y entonces esto sí tiene
comillas para V2. Y ambas variables
son de tipo variante. Y ahora voy a depurar, imprime aquí este mensaje. Y este comando tipo llamado
es algo integrado en VBA que te dice el nombre de tipo de la variable
dentro de sus paréntesis. Entonces, cuando golpeé esto, en realidad
me acabo de
dar cuenta de que había dejado esta impresión de depuración. Entonces, si viste eso, eso fue un spoiler de lo que estoy a
punto de mostrarte. Entonces si ejecuto esto, ves que V1 aquí abajo es
una variable tipo doble. Y luego aquí abajo, el
tipo de variable v2 es una cadena. Entonces eso es interesante
porque los declaramos
aquí arriba , ambos como varianza. Qué son las variantes, es
una variable abierta, que se convertirá en
el tipo de variable cuando la uses por primera vez. Básicamente, cuando
declaras esto, es decir que no sabes qué variable es el tipo V1 o V2. Y luego la primera vez que lo
uses por aquí o aquí, va a tratar averiguar qué
tipo de variable quieres que sea. Va a dar su mejor
suposición en el lado para ti. Esta es una solución
para que no tengamos que conocer nuestro
tipo de variable antes de usarla. Eso es lo que es una variante. Es abierto. Y luego en tu primer
uso de la variable, va a hacer todo lo posible para
declarar ese tipo de variable. Y ya ves después de que
corrimos estas dos líneas, luego se convirtió en una cadena de doble
extremo respectivamente. Entonces si vengo por aquí
y vuelvo a intentar esto, comentemos esta
línea que crea un desajuste de tipo.
Intentemos esto otra vez. Voy a correr,
voy a aclarar esto. Y ves que el tipo aquí está vacío porque
no hay ningún tipo en vacío otra vez. Ahora en cuanto uses
estas variables V1 y V2, en este caso, se convierte en
un doble y una cadena. Y eso es porque cuando
ve este de aquí, es adivinar que
es un número. Curiosamente,
ves que lo está convirtiendo un doble en lugar de un entero. Y así es solo
hacer su mejor conjetura. Y esta es una de
las razones por las que no siempre usamos varianza
para todo, aunque parezca agradable y evita nuestro error de desajuste de tipo, va a hacer
su mejor conjetura, que no siempre es
lo que quieres. Entonces, cuando ve uno aquí, está asumiendo que
es un doble, lo que
significa que
va
a poder tener potencialmente puntos
decimales, aunque no haya puntos
decimales por aquí. Y luego se da cuenta
correctamente que para la letra a, tiene
que ser una cadena
porque no puede ser ninguno de estos otros tipos de variables
numéricas. Ahora bien, si hice algo como redeclare estos,
intentemos esto de nuevo. Así que haz esto una vez más y lo seguiremos
a través de su código. Cambiemos estos. Así que vamos a hacer B y
luego dos por aquí. Y luego cambiaremos
estos dos, A4 y A5. Así que ya ves que estamos un poco
cambiando las cosas es primera vez v1 es un número, y luego esta próxima vez que V1
se va a convertir en una letra. Entonces veamos qué hace con su mejor conjetura
sobre los tipos de variables. Vuelve aquí y
tenemos nuestro vacío, vacío. Los establecemos como un, como uno y un por aquí. Entonces se convierte en doble y cadena. Y luego ahora los vamos
a poner como B y dos. Y luego cadena en doble. Ver que cambiaron. Y eso te demuestra
que una variante, una vez que la declaramos,
sigue siendo adaptativa, aunque la configuramos aquí y la variante automáticamente
adivinó que es de tipo variable. Entonces podemos cambiar eso. No va a crear un desajuste de tipo como
lo hace cuando
establecemos un tipo de variable estricto aquí para nuestras variables estándar. Ahora una cosa más que quiero
probar es que quiero venir aquí y veamos cómo se
adapta para sobresalir por aquí. Entonces justo por aquí
ves que esto es un número. Si escribo a, está
por encima de la izquierda. Tengo uno, se
acabó a la derecha. Eso es porque nuestras
células también están tratando de averiguar qué
tipo de valor es este. Los números terminan automáticamente por defecto a ser justificados
a la derecha de la celda. Ahora bien, si venimos por
aquí y cambiamos esto a un tipo de celda de texto, ves que nuestro número uno justifica
automáticamente
por encima de la izquierda, al igual que la letra a sería, porque el texto
justifica automáticamente a la izquierda. Así que ahora volvamos aquí y aclaremos esto de nuevo.
Vamos a ejecutar esto. Tenemos nuestros vacíos. Y ahora viene v1 por aquí y puedes ver que no
hay comillas. Entonces ya podemos adivinar que nuestro tipo V1 sigue siendo un doble. Entonces eso te demuestra
que no
necesariamente se adapta
al hecho de que la hoja de cálculo de aquí
lo sabe como una cadena o un texto y lo está
justificando a la izquierda por el tipo de celda aquí arriba. Vba tipo de trabajo
separado de eso. Entonces ve el de aquí, todavía
está haciendo su
mejor suposición de que un uno por sí mismo es un
doble y no una cuerda. Lo cual tiene sentido por
qué pensaría eso. Ahora bien, si hiciste algo como
convertir esto en uno, por ejemplo, esperaríamos que el
a, eso es parte de ello. Verás, estamos recibiendo este
error en realidad porque este entero no puede aceptar uno. Vamos a saltar por aquí. Y lo siento, estoy haciendo un trabajo terrible
con estos mensajes aquí. V1 es una cadena porque
uno no es un número real. Entonces eso es todo. Así funcionan las variantes. No los abusamos por este tema aquí donde no
es muy rígido. Y eso puede hacer que tu código sea un poco más impredecible, lo que puede ocasionar algunos problemas. Al igual que cómo se podría esperar que el número uno sea
un entero o un largo. Y automáticamente es
adivinar que es un doble. Hace que las cosas sean un poco
menos controladas explícitamente. Entonces no es necesariamente
algo que queramos abusar, sino que tiene sus casos de uso indefinidamente en ciertos casos te hará
la vida mucho más fácil. Y vamos a mostrar algunos de esos
ejemplos en el futuro.
24. 1.17.5 Para cada bucle utilizando la variante: El último par de lecciones, a propósito
repasé el para cada bucle y también el tipo de variable
variante. Eso es porque quería
hacer esta rápida demo aquí, que combina estos
dos conceptos juntos. Entonces aquí mismo tengo
la misma demo que
hice en la lección para
cada bucle, que es que tenemos una
para cada bucle aquí y
tenemos una variable de hoja
que es una hoja de cálculo. Observe que aquí no hay S, es una hoja de trabajo singular. Y vamos a decir
por cada hoja de trabajo en todas las hojas de trabajo
en este libro de trabajo, notarás que las hojas de trabajo aquí tiene la S para plural. Y al igual que nuestras lecciones,
podemos pasar por aquí y se puede ver que estamos activando cada pestaña a medida que
avanzamos porque este SH, objeto se está incrementando.
Sigue corriendo. Esto aquí se incrementa a medida que nos bucle y así en el siguiente bucle
va a la siguiente hoja, la siguiente hoja de trabajo, en
la siguiente hoja de trabajo. Lo que podemos hacer aquí es a
propósito estropear las cosas. Entonces voy a cambiar esta
variable para que sea un rango. Al igual que el ejemplo antes organizar es una celda
o grupo de células. Y lo que esperamos
que suceda aquí es que VBA
va a confundirse porque las hojas de trabajo plural está hecho de muchas hojas de trabajo
individuales. No se compone de
muchos rangos individuales, al
menos no directamente. Y así sabemos que esta hoja de trabajo plural tiene un montón de diferentes hojas de trabajo
individuales en ella. No tiene un
montón de rangos en ella. Y así tenemos un desajuste de tipo,
que tenemos aquí mismo. Ahora voy a detener
esto por completo. Y luego por supuesto,
si volvemos en nuestro grupo de hojas de trabajo, sí
tenemos hojas de trabajo individuales. Entonces si tenemos nuestra singular
hoja de trabajo por aquí, así es como funcionaba
en nuestro primer ejemplo. Volvemos a trabajar correctamente. Por supuesto, como empezamos. Ahora con nuestro tipo
variable variante. Repasamos esa varianza, llamaremos a la dimensión
V como variante. Aquí hay un tipo de
variable no declarado que acaba de convertirse en el tipo de variable
en su primer uso. En realidad no es su primer
uso en cualquier uso, porque vimos que se adapta
incluso después de usarlo una vez. Entonces si tomo nuestra variable
variante aquí, v, Hagamos esto. Y ya ves que llegamos por
aquí sin un error y está funcionando igual que cuando
teníamos nuestra variable de hojas de trabajo. Si vine aquí y lo
hice depurar print cuatro, vamos a hacer nuestro nombre de tipo aquí, que usamos en nuestra última lección. Y vamos a revisar
qué es la variable tipo V. medida que pasamos por este bucle, se
puede ver que estamos
activando la hoja. Y de nuevo, he dejado
estos mensajes aquí arriba. Se puede ver que nuestra variable
VIE se ha convertido en un objeto de hoja de trabajo
porque la última vez que se utilizó fue con
esto para cada bucle. Y así VBA vuelve a
tomar su mejor conjetura al descubrir qué tipo de
variable que debe ser la v. Y en este caso, estamos
viendo que
incluso puede descubrir que
es una variable objeto, no solo un entero o una cadena o un doble o
algo así. Lo está usando. Y al darse cuenta de que en el contexto de
lo que se está utilizando como, necesita convertirse en una variable objeto
de hoja de trabajo. Y así ves que esto
sigue funcionando. Entonces esto es útil porque en algunos casos podrías
escribir un para cada bucle y podrías conocer la variable objeto
aquí que estamos usando, que es un grupo de cosas. Pero no conoces la variable objeto
singular que se hace esto. En este ejemplo que tengo,
es realmente sencillo. Contamos
con fichas de trabajo con S como plural. Y por supuesto, en eso hay un montón de hojas de trabajo singulares
sin la S por aquí. Entonces éste no es realmente necesario, pero te encontrarás con
otras variables objeto
que también son plurales, es un grupo de cosas
que no son tan obvias. Y en esos casos, podemos usar
una variante como lo hacemos aquí. O si queremos
ser más explícitos, incluso se
puede escribir
una demo como yo, averiguar que el tipo de
objeto es hoja de cálculo. Y luego vuelve a subir aquí y reescribe
tu código para ser más explícito y específico en tu llamada y crea
tu variable de hoja de trabajo. Ahora que sabemos que el
objeto que estamos
buscando en nuestro bucle foreach es una hoja de trabajo singular o
lo que pase a ser. Eso es todo. Solo quería juntar estos
dos conceptos porque los veo a
ambos como relacionados. Entonces estos son dos conceptos que ambos están
descubriendo algo para ti que
típicamente estamos más acostumbrados a tener que
averiguar nosotros mismos.
25. 1.17 Variables de objetos - Conjunto - Introducción: En este video,
quiero introducir la idea de variables de objeto. Pero trabajamos con antes
es variables típicas. Así que voy a
crear un ejemplo, uno que hemos visto antes, que es sólo una cadena que voy a
decir texto de dimensión como cadena, texto es igual a Steve. Incluso hacemos algo y
colocaremos esto en uno. El valor es igual a dx, dy. Vamos a ejecutar esto. Voy a golpear F8, paso
a través de dX t es igual t Y luego aquí lo
estoy enviando a
nuestra hoja de trabajo en la celda A1. Entonces esta es una
variable normal que declaramos. Entonces puede contener
alguna información en este caso porque la
llamamos variable tipo cadena. Entonces guarda alguna información de
texto. Y luego podemos hacer cosas
con esta variable. Algo que
aún no hemos cubierto son variables objeto. Las variables objeto son un
poco diferentes y puede ser un tema muy avanzado y podemos hablar de él durante mucho
tiempo y todos sus detalles. Pero sólo voy a apegarme a un nivel muy alto en este
momento en el contexto que lo usaremos ya que estás empezando a hacer
automatización, VBA. Si quitamos esto, sólo
voy a aclarar
esto aquí. Y luego creamos una nueva
variable llamada rango. Y diremos como rango. Esto se parece mucho a cómo
declaramos nuestra variable de cadena. Y esta es una gama, y
trabajamos con rangos. Los rangos son una sola celda
o un grupo de celdas. En nuestra hoja de cálculo. Decimos rango igual a rango A1. Digamos. Y luego voy a
correr esto. Golpeé a F8. Tenemos texto, y luego
tenemos nuestra gama. Vemos variable objeto o
con variable de bloque no establecida. Y lo veremos
todo el tiempo cuando estropeemos nuestras
declaraciones así. Y eso es porque no
podemos simplemente decir que esta variable naranjala es nuestro rango A1 porque es una variable objeto y no
una variable de datos estándar. Cuando tienes una variable de objeto, debes usar esta palabra
establecida al principio. Y esa es la única
diferencia que tenemos cuando estamos declarando esto en este momento,
para nuestro ejemplo
hasta ahora , hago clic en esto. Vemos que pasamos esta línea y no obtenemos
un error solo
usando la palabra establecida al
principio aquí, y ya hemos terminado. Entonces, ¿qué significa esto? ¿ Y por qué estos dos tipos de variables son diferentes
entre sí? Entonces vimos que
podemos hacer algo con nuestra variable de texto aquí. Podemos depurar impresión
y enviarla a nuestra ventana de inmediatos para que
podamos ver cómo se ve eso. Entonces ahora tenemos nuestra variable de texto y
podemos hacer cosas con ella. Esta
tareas muy simples como
enviarlo a nuestra ventana de
inmediatos. Ahora bien, ¿qué podemos hacer con
esta variable de objeto de rango? Puedes ver cuando
escribo este objeto rango de
variables y pongo ahí
el signo de periodo, ves todas estas
opciones aparecen. Hay diferentes cosas que
podemos hacer con él y diferentes propiedades que existen para ello. Para que pueda hacer algo
muy sencillo, como respaldo aquí para que
podamos ver nuestras opciones como
voy a seleccionar. Entonces configuramos nuestra gama para ser A1, y luego podemos seleccionarla, que no vamos a
ver nada porque ya
estamos en uno. Pero si hago clic fuera
de aquí y muevo este cursor de nuevo hacia arriba y vuelvo a
ejecutar esta línea. Aquí estamos seleccionando el rango. Esta variable de objeto de rango
tiene todas estas propiedades y métodos que podemos ejecutar
contra este objeto. En tanto, si volvemos
a nuestra variable de texto, ponemos aquí un periodo. Vemos que no obtenemos un desplegable para todas las
diferentes opciones que tenemos. Debido a que estas variables de
datos normales, su función principal
es solo contener cierta información para que
pueda utilizarla de nuevo más adelante. En tanto, estas
variables objeto son una referencia a un objeto que ya tiene todas estas definiciones
integradas en el fondo. Y luego todas esas
definiciones de propiedades y procesos a los que puedes llegar
haciendo estos comandos extra. Y eso es todo por este video. Solo quería ser una introducción
extremadamente básica a estas variables objeto cuando tenemos que
usar el conjunto de palabras. Y luego
seguiremos construyendo sobre
esto a medida que avanzamos.
26. 1.18.2 Vara de objetos: declare y lee todos los archivos en la carpeta: En este video, quiero
repasar una especie de dos cosas
separadas. En primer lugar, iba a
hacer una demostración que no sólo podemos
crear archivos y carpetas, que les mostré
en lecciones anteriores. Pero quiero
darles un ejemplo
de una función aquí donde podamos tomar una carpeta y leer todos los nombres de archivos que
hay en esa carpeta. Al tratar de
recordarme cómo funciona ese código, solo lo
escribí en Google, básicamente escribiendo
algo como VBA, leyendo nombres de archivo
desde una ruta de carpeta. Y tengo código que
se veía así. Y si ejecuto esto aquí, le alimento una ruta de carpeta
que tengo aquí. Y luego si golpeo run, mira hacia arriba todos los nombres de archivos
que hay en esa carpeta. Entonces si vengo por aquí, se
puede ver que está
sacando los archivos de esta carpeta y
colocándolos aquí en Excel. Por lo que tal vez te resulte útil por un montón de razones
diferentes. Y esto es solo el comienzo
de conseguir los nombres de archivo. Otra cosa común
que podría necesitar
hacer es abrir cada archivo en, hacer alguna automatización que
haga algo con todos los archivos de esa carpeta o algunos de los archivos
de esa carpeta. Entonces eso es lo que estoy mostrando aquí. Puedes mirar esto hacia arriba. Y no voy a profundizar demasiado en esta función
aquí que hizo esto. También puedes pausar esto
y mirar el código para referencia y ver
cómo funciona cada línea. Cuando hice esto, en realidad me
recordó algo
que quería
explicar para las variables
objeto, que estaba en el video anterior. Cuando encontré este
código fuera de un sitio web, tal vez StackOverflow sea
otro sitio web común. Lo que tienen aquí, y
lo verás muy a menudo, es que estamos creando esta variable. Es una variable objeto y literalmente es como objeto aquí. Y así esto solo
te está diciendo que es un objeto, pero no específicamente qué
tipo de objeto es. En el video pasado, mostramos objetos como un libro de trabajo o una
hoja de trabajo o un rango. Y vamos
a seguir teniendo ese objeto es esta categoría más amplia
diciendo que es un objeto, entonces se puede conseguir más específico. Y luego en la siguiente línea, establecemos este objeto en el objeto específico
que necesita ser. Entonces en este caso,
estamos trabajando con un objeto de sistema de archivos ya que
vamos a leer desde nuestro explorador de
archivos aquí. Y ves que configuramos nuestro objeto FSL en
crear objeto de sistema de
archivos de scripting objeto. Esto nos permite hacer las cosas aquí. En la próxima vez vemos o
fs o para nuestro objeto de sistema de archivos, estamos haciendo dot get folder. Entonces eso es lo que
te mostré, sucede cuando usas variables de objeto es que tienen todos estos parámetros y funciones y
métodos integrados en ellas. Y entonces ahora estamos
usando eso aquí. En el video anterior, repasé esta otra notación. No hice esto donde estamos
configurando la variable como un objeto anodino
y luego usando esta línea de crear objeto en
su lugar en el video anterior, hicimos algo como
yo sólo voy a hacer básicamente nuestro Objeto FSL. Voy a hacer que esta
variable sea diferente justo en esta notación, pero
haremos lo mismo. Y en lugar de hacer objeto, se
puede ver esto dice scripting ese objeto
del sistema de archivos aquí, cinco tipos de nombre de script. Aquí no aparece nada. Eso es porque al igual que
nuestro video anterior, nos falta nuestro objeto de sistema de
archivos en nuestra biblioteca de referencia. Por lo que quería herramientas
y referencias. Y si vengo aquí
y desplázate hacia abajo hasta tiempo de ejecución de scripts de
Microsoft aquí, y agrego esto, haz clic en la casilla de verificación y haz clic. Ok. Ahora igual que antes, puedo hacer scripting y
esto apareció ahora, pesar de que no
estaba allí antes. Y golpeo pestaña, y
al golpear periodo, tengo File System Object. Ahora en este punto, ya
estoy haciendo lo
mismo que hacen
estas dos líneas. En esta línea, creo el objeto
general y luego
lo llamo un objeto de sistema de archivos
desde la biblioteca de scripting. Aquí. Estoy haciendo exactamente lo mismo. Ahora tengo una
variable de objeto que es un objeto de sistema de
archivos de puntos de scripting. Ahora el beneficio de
hacerlo de esta manera, que es lo que mostré
en la lección anterior, es que porque esto sabe
lo que es este objeto y
agregamos esta biblioteca de referencia. Ahora, nuestro editor de código sabe cosas
diferentes
que pueden hacer con esta variable objeto. Porque ahora tiene toda
la biblioteca sobre lo que puede hacer el objeto
del sistema de archivos. Puedo decir cosas
como conseguir carpeta aquí y luego ves que está
apareciendo su lista y auto-llenado. Necesito un paréntesis
y me dice que necesito recibir una
ruta de carpeta aquí. Y básicamente estamos
recreando esta línea. Así que déjame mover esto aquí abajo. En realidad, acabo de
empezar por aquí. Obtener carpeta igual o FSL consiguió. Y luego tenemos
nuestra ruta de carpeta. Entonces estas dos líneas, ahora, esta línea y esta línea
hacen lo mismo. Y la gran diferencia aquí
es que primero necesitaba
agregar la biblioteca de scripting cuando vamos a Herramientas
y referencias. Por lo que se necesita un poco más de
trabajo para empezar, es que necesito hacer
eso aquí en nuestro editor. Pero una vez que hago eso, el beneficio es que cuando escribo dot FSL por aquí y golpeo periodo, tengo todas estas características
incorporadas ya. Ahora bien, si utilizo el original, usa esta notación
para nuestro objeto FSL, que fue creado así. Ahora si llego periodo, ves que no conoce
ninguna de las funciones. Los métodos son parámetros que
forman parte de este objeto. Y eso es porque cuando
estamos declarando esta variable
objeto, no
tiene idea de qué tipo de variable
objeto es esta. Entonces esta configuración para el objeto del sistema de archivos de scripting no ocurre hasta que se ejecute
el código. Entonces en este caso, nuestro editor, no sabe qué
tipo de objeto es en realidad hasta que se ejecuta, y luego se convierte en el objeto del sistema de archivos de
scripting. En esta notación, agregamos
nuestra biblioteca de referencia y ahora nuestro
propio editor de códigos sabe lo que
este objeto puede hacer. Y luego obtenemos esta
opción incorporada. En realidad termina siendo
exactamente lo mismo. Sólo me gusta hacerlo de esta manera porque hace que sea más fácil
escribir nuestro código y hacer
este editor y de
esta manera lo hace para que
no tengas que ir a Herramientas, referencias, y agregar la
biblioteca para que funcione. Entonces esto es más fácil para ese poquito de
configuración al principio. Quiero asegurarme de
cubrir esto. Porque si estás
mirando código en línea, muchas de las veces
verás que los usuarios usan este método. Y ahora ya sabes la
diferencia es cuando ves las dos notaciones que
significan lo mismo. Pero verás esto
mucho cuando estés recibiendo código de Internet, la gente lo publica porque es fácil copiar y pegar y no
tienes que
explicarle a la gente que
tienen que agregar esa biblioteca. Y luego una vez
que superas esa parte de declaración, el código en sí termina
funcionando exactamente igual.
27. 1.18 Objeto de libro de trabajo: Ahora que hemos hecho una
introducción a las variables de objeto, quería rodar una lección para
repasar algunos de los objetos
más comunes, variables con las que vamos
a trabajar en Excel. Y los vas a
reconocer enseguida. Los más comunes probablemente
funcionarán con libros
de trabajo,
hojas de trabajo, rangos. Recuerdo que las rabias son
esencialmente células. Entonces por supuesto que
reconoces esto ya los
digo en voz alta
y los teclee que son libros de trabajo son
nuestros archivos de Excel o hojas de trabajo o nuestras pestañas aquí
en la parte inferior y nuestras gamas. Entonces cualquiera que haya trabajado con Excel ha experimentado
trabajando con estos solo que
realmente no hemos pensado ellas como
variables
de objeto antes. Así que empecemos declarando
una variable de objeto, y diremos WB para
libro de trabajo como carga de trabajo. Entonces lo que tengo aquí es
el expediente en el que estamos trabajando se llama main. Ese nombre de archivo XLS en el que estamos
trabajando se llama main. Entonces si digo algo
como esto, en realidad, ni siquiera te preocupes por esta
línea que agregué hasta ahora. Yo diría Depurar por ello. Y digo este cuaderno de trabajo. Y si golpeo Control Space, se
puede ver que me está dando
estas opciones para autocompletar la palabra, este nombre de libro de trabajo. Y voy a imprimir eso. Y así si llego a F8, solo
tenemos una línea de código aquí. Y el nombre de este libro de trabajo
que estamos trabajando aquí, y el código es
punto principal XLS m. ahora
vamos a volver
aquí y tenemos este objeto de libro
que declaré aquí, como vimos en nuestro último lección. Si escribo esto en, digamos que el objeto WB es este libro de trabajo. Y correr a través de esto,
golpeamos un error ahí mismo porque esta es una variable
objeto y
necesitamos poner donde se establece
al principio para crear esta referencia cruzada entre WB, haciendo referencia a este libro de trabajo. Ahora que tengo eso, pasamos por esta línea. Y luego cuando miro
el nombre del objeto WB, aquí está, es main.xml SM. Entonces es lo mismo
cuando escribí WB es básicamente un atajo para
escribir este libro de trabajo. Y eso es porque he atado esas dos cosas
juntas aquí mismo. Ejecutar eso otra vez y
vemos que está hecho. Algo más que he hecho ha
terminado en esta carpeta, he creado
otros dos archivos aquí. Acabo de
llamarlo otro archivo uno y otro archivo a archivos de Excel. Una cosa de la que podrías tomar
nota aquí es que estos dos son solo archivos
normales de Excel. No son
archivos ASM excel para permitir macros. Podrían serlo si quisiéramos. Pero lo que estamos
pasando es comúnmente usado para que uses
un archivo de Excel, que es donde está todo
tu código que hace todas las cosas elegantes. Y entonces podría estar
abriendo otros archivos de Excel que
ya existen e interactuando con ellos o recibiendo información
de los otros archivos. Tal vez el otro archivo
pertenece a otra persona u otro departamento y estás tratando de sacar datos de ahí. Y así solo estás abriendo
ese archivo y luego tirando cosas en
tu archivo principal. Entonces aquí puedo declarar
algunas otras variables. Digamos que mencioné WB
a como en realidad lo
voy a llamar el
cuaderno de trabajo, WB. Wb. ¿ Qué? Queremos establecer esto como nuestro
otro archivo, uno por aquí. De hecho, voy a llamar a
esto aunque el otro. Sólo para que no nos
confundamos con el nombre. Estoy mezclando esto por aquí. En realidad voy a
llamar a este WB main. Llama a esto Nos referimos a
este libro de trabajo y luego WB, otro es igual. Y entonces, ¿cómo
conectamos a estos dos aquí? Utilizamos este libro de trabajo por aquí, que es una
función incorporada en VBA. Aquí. En cambio voy a
escribir libros de trabajo abiertos. Y entonces necesito el camino
de este archivo por aquí, y eso es lo que pongo un abierto. Te voy a enseñar. No estoy seguro si en realidad
necesitamos poner en el camino completo. En cambio,
sólo vamos a tomar este nombre de archivo por aquí. Y puede ser capaz de
detectar que este nombre de archivo de Excel está en la misma carpeta que
nuestro libro de trabajo actual. Entonces veamos cómo va eso
y corremos por esto. Sólo vamos a dejar
esto a un lado aquí mismo. Y ya ves, no
tuvimos que poner nuestro camino completo por aquí, solo poner el nombre del archivo
hizo lo primero que
verificaría es la
carpeta actual en la que se encuentran nuestros archivos principales. Ya que todos estos están
en la misma carpeta, podríamos simplemente poner el nombre del archivo y lo ves abrió esto. Ahora, si venimos por aquí
y decimos print w main, dot name, tenemos nuestra
principal y tenemos la UV, otra, consiguió nombre. Y revisaremos
ambos. Lo interesante aquí es que
este archivo ya está abierto. Entonces veamos si esto funciona. Tengo un error tipográfico por aquí. Tenemos este comando
que abre el cuaderno de trabajo. Ya están abiertos los Cuadernos de Trabajo. Por lo que se puede ver en realidad no tiene un
problema aquí mismo. Existe la posibilidad en
otras instancias que arroje un error
porque dirá que no
se puede abrir el libro de trabajo y ejecutar ese comando
porque ya está abierto. Pero VBA tiene eso
manejado ya, se da cuenta ya abierto. Y todavía va a establecer
estas dos variables de objeto como los archivos correctos y conectar WB otro con este
otro archivo, un archivo Excel. Y revisemos esto aquí. Aquí está nuestro principal, y luego aquí está nuestro otro archivo a medida
que venimos por aquí. Ahora, solo agreguemos otro. Por lo que tenemos más trabajo con
vamos a hacer otro libro de trabajo para vamos a establecer otras q
equivale a cosas de flujo de trabajo. Abierto. Otro archivo, uno. Entonces S x tiene que ser dos por aquí. Y vamos a ejecutar esto y
ejecutarlo línea por línea de nuevo. W Main es éste el otro. Lo ves simplemente parpadeó aquí
porque está conectando nuestro WB otro
objeto, WB otros dos. Ahora se abre. Puedes ver tus nombres de
archivo aquí arriba. Por lo que tenemos tres
expedientes abiertos en este momento. Y vamos a imprimir nuestros nombres
solo para mostrarte que ahora
son objetos activos de
esto comenzó de nuevo. Y podemos imprimir. Nuestra
ventana inmediata se está poniendo un poco abarrotada ahí,
así que vamos a despejarla. Y tenemos abiertos
los tres expedientes. Ahora mismo. Todo lo que hemos hecho es
imprimir sus nombres. Pero mientras esta macro
sigue activa, ves que aún no hemos terminado. Para que pueda arrastrar esta flecha alrededor. Continúas ejecutando código. Puedo hacer cosas como activar. Nuestro cuaderno de mayo aquí. Otro que se activa,
que se activa. Y entonces ahora tengo
estas tres variables aquí que representan
los tres archivos excel. Estoy activando nuestro archivo
principal uno aquí. Y luego otros FiO2. Ahora tenemos estos objetos que representan tres archivos diferentes. Y se puede empezar a
imaginar cómo podemos interactuar con los
tres archivos. Y a nivel de libro de trabajo, esencialmente un archivo Excel, puedes hacer todo tipo
de cosas diferentes. Pero lo que
te mostraré muy rápido es solo un ejemplo del tipo de cosas que puedes hacer que puedas hacer con un archivo
normal de Excel, pero ahora tienes el control
de a través del código. Así que ahora que tengo aquí abajo, tenemos objetos
para todos estos. Podemos activarlos. Y luego si solo
escribe uno de estos, ya que son los tres objetos del
libro de trabajo, tendrán las
mismas propiedades, lo que básicamente significa que
tienen las mismas propiedades y los mismos procesos
que están apegados a ellos. Rutinas y métodos que existen para este
tipo de objetos, que es un libro de trabajo
en este caso. Entonces como yo escribo aquí ves
todo esto sale. Y puedo hacer save, lo que básicamente significa que
si ejecuto este comando, entonces será el equivalente a
guardar ese archivo. Puedes hacer un Save As, y yo puedo cerrarlos. Entonces, por ejemplo, voy a seguir
adelante y cerrar esto. Así que imagina que hacemos algo
con estos archivos, interactuamos con los datos. Sé que estos están
en blanco ahora mismo, pero si tuvieras
datos en los tres, podrías empezar a obtener datos de uno y moverlos al otro. Y luego cuando
terminemos algunas cosas, ahora podemos seguir adelante y cerrar el otro archivo y luego
cerrar el otro archivo. Entonces ya ves, tenemos
mucho control
después de crear estos objetos de
libro de trabajo, donde podemos utilizar estos objetos casi como los tenemos en nuestra mano y realizar
diferentes comandos con ellos. Otra cosa que podemos
hacer es en lugar de abrir un archivo que
ya existe, podemos simplemente tipo de
comentar todo esto fuera. Empecemos por todos aquí. Podemos decir Workbook,
nuevo cuaderno de trabajo. Y en lugar de abrir
un libro de trabajo existente, que hicimos por nombre de
archivo antes, podemos decir set WD nu
equivale a la fuerza laboral. Agregar. Simplemente haciendo esto. Libros de trabajo, ese anuncio va
a crear un nuevo libro de trabajo, esencialmente un archivo de Excel, y luego configurarlo como
nuestro nuevo objeto WB. Por lo que ves tenemos
un nuevo libro de trabajo que acaba de abrir cuando
ejecutamos esa línea de código. Y no sólo
creó aquí un nuevo archivo, podemos decir WB, nuevo nombre. Y como
se espera, este va a ser el libro uno, que es el nombre de este archivo, igual que si iniciara un nuevo libro de trabajo. Entonces
aquí está el libro uno. Ahora podemos empezar a poner
información aquí. Y solo
tocaremos la vaina, que vamos a hacer
en nuestra próxima lección. Se puede decir hojas. Un rango de puntos, A2,
valor es igual hola. Aquí está nuestro nuevo cuaderno de trabajo. Vamos a usar
eso y podemos empezar a llamar a
este nuevo libro de trabajo, recrearlo, o usar uno que abrimos y
empezar a interactuar con él. Y luego cuando
terminemos con esto, incluso
podemos decir que WB
sabía eso ahorrar. Y acabamos de guardar
este archivo por aquí. Probablemente esté en
nuestra carpeta predeterminada donde sea que pueda
llamarse libro uno. Y así podemos pasarlo
aún más propiedades. Guardar Como puedes ver, si hacemos un Guardar Como
empezamos a conseguir otras propiedades
como nuestro nombre de archivo. Este ejemplo. Digamos que podemos
correr esta línea por línea. En realidad creamos
aquí un libro de trabajo
completamente nuevo porque estamos
ejecutando esto de nuevo. Colocamos Hello en la celda A2, y luego guardamos esto ya que
este es un archivo de ejemplo.
28. 1.19 Objeto de hoja de trabajo: Similar a lo que acabamos de hacer
para la lección de libro de trabajo, también
podemos trabajar
con hojas de trabajo. Por lo que tienes tu archivo Excel
más grande que es esencialmente
tu contenedor. Y luego dentro de ahí
tienes varias hojas. Así que acabo de añadir uno nuevo manualmente aquí y
tienes Sheet1 y G2. Podemos establecer un nuevo objeto de hoja, que voy a
llamar SH como hoja de trabajo. Muy similar a
los cuadernos y seguir mostrando cómo
nuestras variables objeto, donde tengo que usar
la palabra puesta aquí. Y puedo decir que set
sheet es igual a WB, que de nuevo es este hojas
de libro de trabajo. Aquí hay dos
llamadas diferentes. Yo también puedo decir calor. Y entonces ahora tengo
esta hoja de trabajo y puedo llamarla active. Y así ahora he puesto SH como hoja dos y luego
puedo activarla. Entonces si ejecuto este
xi2 y luego como lo activo, hemos activado G2. Aquí. Tengo diferentes opciones que puedo llamar en estos
paréntesis aquí es que
puedo llamarla hoja para comprar el
nombre o puedo usar un índice. Entonces si ves aquí,
dice índice, que cada vez que ves esto, generalmente
significa que
puedes usar un número para llamar a la hoja índice a aquí es
en realidad la hoja dos por aquí, porque es solo un
número índice de que este es uno y luego esto es dos
en orden secuencial. Entonces si estoy por aquí, digamos que vuelvo a correr esto, activamos la hoja dos. Y en este caso, realidad no importa si cambio el nombre por aquí porque no estoy escribiendo
el nombre de la hoja, estoy escribiendo el número de índice. Entonces vengo aquí ahora. Y nueva hoja a ella
sigue siendo esta otra pestaña cuando la activo porque
es la segunda hoja
en el libro de trabajo. Ahora, si cambio esto
por aquí, por ejemplo, ahora este nombre Sheet1
es nuestro segundo índice. Y así como declaro a
SH como esa hoja, vas a ver, voy a
crear una tercera aquí. Vamos a volver a Sheet1 porque uno es en realidad el
índice número dos. Y entonces entonces una vez que
hemos hecho esto, hemos creado este objeto
que los compra juntos. Y luego al igual que el libro de trabajo, tengo cosas diferentes que
puedo hacer con esta hoja. Por lo que ahora con esta hoja, tengo mi rango
igual que vimos antes. Puedo decir Hola. También puedo tener todas estas otras cosas
que harías manualmente con la hoja de cálculo cuando
estés haciendo clic a través de Excel. Entonces, por ejemplo, puedo decir
visible es igual a oculto. Y luego sólo para deshacer eso, voy a decir
visible es igual a visible. Entonces ahora tengo este objeto de hoja y puedo hacer
cosas diferentes con él. Al igual que lo hicimos para
nuestros objetos de libro de trabajo. Podemos crear muchas
referencias diferentes a diferentes hojas, y así es como vamos a
referirlas en el código. que podamos agarrar cosas de la hoja dos y moverla a
Sheet1 y viceversa, y crear esta web
de procesos ya que estamos interactuando tanto con
múltiples libros de trabajo múltiples hojas. Entonces te mostraré aquí SH es xi2. Agregamos algunos textos a la celda A2. Podemos ocultar la hoja dos y luego hacer que sea visible
es igual a visible. Y lo vamos a mostrar de nuevo. Esta podría ser la primera exposición que no recuerdo de
las lecciones pasadas. Voy a mostrarte
algo más aquí. Es si estás familiarizado con las hojas
más altas manualmente, vendrías por aquí y
puedes ocultar esta hoja. Y luego hoja a, o
en realidad creo que era Sheet1 está escondida aquí. Si vas a mostrar aquí, Sheet1, puedes mostrarla. Una cosa ya que acababa de escribir este ejemplo que me di cuenta es que también puedo hacer que esta
hoja sea visible igual. Y luego ves
que es auto poblando tres opciones que tengo aquí, ocultas y visibles, que ya
hemos usado y probado. Viste que eso
era lo visible aquí. En realidad hay una tercera
opción que está muy oculta. Entonces veamos qué hace eso. Si vamos a muy
escondidos y corremos eso, ves que hizo
lo mismo que esconder la sábana. Pero ahora si
vengo aquí a mostrarme, no
hay botón de mostrar. Y si hubiera otras hojas de trabajo
ocultas, y yo mostré esto aquí, digamos que escondo la
hoja tres también. Puedo venir aquí
e ir a mostrarme. Y ahora en nuestra lista
tenemos dos hojas, ocultas, hoja uno, hoja tres. Pero no puedo ver la Hoja
uno en esta lista. Y entonces un usuario que está
dando click en esta interfaz que no
tiene acceso al código VBA, ni
siquiera se da cuenta de que
hay una hoja aquí, y eso es lo que hace
muy oculto. La única forma en que puedo mostrarlo nuevo es ejecutar
esta línea de código en VBA y no puedo llegar a ella a través de nuestra interfaz de usuario
en Excel normal aquí. Entonces al correr esta línea, vamos a traer la
hoja uno de vuelta. Siempre estuvo ahí, pero
simplemente invisible para nosotros. Y la
parte realmente interesante aquí, creo, es que a través de VBA
aquí en segundo plano, realidad no sólo se puede
automatizar lo que una persona haría manualmente haciendo clic
a través de la interfaz de Excel. Pero estás obteniendo acceso a propiedades y funciones
adicionales que un usuario normal podría ni siquiera tener a su
disposición. Entonces cuando te estás
sumergiendo en este código, tenemos una larga lista de
propiedades y este es solo un ejemplo de
funciones que ni siquiera
podrías hacer
manualmente a menos que supieras venir
en el aquí y escribe el código en
VBA para tus funciones.
29. 1.20 Bibliotecas de referencia Introducción a objetos de Word: En los videos anteriores, mostré que no sólo
pueden las macros de Excel y el
código VBA que hemos estado escribiendo controlar la propia
aplicación Excel. Pero también puede hacer cosas
como crear carpetas. Entonces esas fueron demostraciones
que a pesar estamos codificando dentro de
Microsoft Excel, que el código de
aquí en nuestro VBA puede hacer cosas fuera de Excel
y controlar nuestra computadora. Para seguir agregando a eso, quiero mostrar
otro ejemplo de esto controlando
otra aplicación y una aplicación que
a menudo tiene mucho
sentido para es para Microsoft Word. Y Microsoft Word tiene su propio Editor de VBA y macros que puedes trabajar
directamente en Microsoft Word. Pero quiero mostrar
un ejemplo de cómo
podemos trabajar desde Excel, donde muchas veces hacemos algo como crear un botón por aquí. Y podemos hacer que Excel mismo
controle Microsoft Word. Y luego si estás
trabajando en una hoja de cálculo, puedes hacer que estos programas
interactúen de manera bastante fluida. Por lo que he ido adelante e
inicié esta subrutina de prueba. Lo único aquí es la prueba. Y quiero mostrarles un ejemplo
realmente sencillo. Voy a venir
aquí a la subrutina y voy a crear
una nueva variable objeto. Llamaremos a eso w, El doc
o documento de Microsoft Word. Vamos a establecer eso como un entonces si
escribo palabra aquí mismo,
no sale nada. Eso es porque
nuestro código VBA de
aquí no tiene este comando para trabajar con Microsoft Word. Y te mostraré
cómo podemos hacer que aparezcan
aquí
algunas nuevas opciones cuando estemos
trabajando en nuestro VBA. Podemos hacer eso
viniendo aquí a las herramientas. Iremos a referencias. Y luego en esto hay una
lista gigante de bibliotecas de referencia. Básicamente, son casi como apoyar extensiones para VBA. Para que veas todo tipo
de cosas aquí. Y el ejemplo al que vamos
a ir es si te desplazas
todo el camino hacia abajo, es un orden alfabético. Podemos aterrizar aquí en la biblioteca de objetos de Microsoft
Word. Por lo que estas son herramientas extra que nos
permitirán
tener nuevas características en nuestro VBA que no está
fuera de la caja. Entonces si hacemos clic en esto, está
bastante cerca de salir de la caja. Lo único que tienes que hacer
es hacer clic en esta casilla de verificación. Y si hago clic en OK, se
puede ver podemos
seguir escribiendo aquí. Y ahora si escribo palabra
que esto existe, que no estaba aquí antes, decimos periodo de trabajo. Y entonces en este caso, voy a decir documento. Entonces ahora nuestra variable objeto, Word doc o un objeto de
documento de Word. Y entonces ahora esto
va a venir con todo tipo de propiedades y métodos que podríamos llamar y usar como parte del objeto del
documento. Al igual que lo que pasamos en nuestra breve lección sobre variables de
objeto. Y ahora que tengo
este documento de Word y vamos a ponerlo como algo, digamos set es igual a documentos de
Word en. Entonces básicamente tenemos nuestra aplicación
Microsoft Word. Entonces tenemos nuestros documentos, y vamos
a añadir un documento en nuestro documento es
esencialmente un archivo. Entonces vamos a establecer nuestro documento de Word como un nuevo
archivo que se crea. Entonces voy a seguir adelante y
correr esto. Le pegaré a F8. Estamos por aquí en esta línea. Golpeé a F8 y se congeló un segundo ahí
y no pasó nada. Te voy a mostrar
algo más que aquí es interesante. Lo voy a explicar
primero y luego mostraremos que eso es lo
que está pasando, es que esto sí abrió un documento de Word,
pero es invisible. Entonces lo que estamos
viendo es que
cuando se trabaja con otra
aplicación a través del código, es diferente a
hacer clic en
la interfaz de usuario como estamos acostumbrados a
trabajar con nuestros ordenadores. En cambio, acabo de abrir
un documento de Word, pero está oculto
en segundo plano. Y en realidad no se puede ver porque no estaba
mostrando mi menú Inicio, pero aquí está mi menú de inicio. No hay ninguna
aplicación de Microsoft Word por aquí. Y podemos probar que porque
si vengo por aquí y escribo en Word esa aplicación, esa visible es igual a verdad, esto va a hacer que la
aplicación Microsoft Word se haga realidad. Y al ejecutar eso,
verás que Microsoft Word aparece. Y aquí hay un documento que estaba sentado abierto en el fondo. Sólo para mostrarte
otra vez, voy a correr esto. A veces hay un cuadro de error. Simplemente lo volví a correr y
viste que se fue. No voy a
entrar en esos detalles hasta que tengamos que hacerlo en
las futuras lecciones. Ves que abrimos
un documento de Word. Voy a correr esto otra vez. Entonces en realidad hay
dos documentos. Ahora, hagamos que nuestra Aplicación de
Word sea verdadera. Y ves aquí hay dos
documentos abiertos. Entonces lo que pasó es que
abrimos el documento, abrimos otro documento, y ambos están existentes en segundo plano y
podemos hacer las cosas con ellos. Podríamos agregarles texto y empezar a formatearlo
como un documento de Word. Y todos son
invisibles hasta que
le diga al programa que haga realidad
la aplicación. Y entonces ahora si hago
algo así como palabra, esa aplicación, un
cuenco es cierto por aquí. Esto va a hacer que el muelle, hacer que la palabra Aplicación sea verdadera. Hagamos algo muy básico. Lo que el documento, que
es simplemente guardarlo. Y ya ves tenemos el
salvo en cuanto al mando. Creo que los dos es sólo
porque es una segunda versión. Entonces este es tu comando genérico
Guardar como. puede ver el
parámetro que
quiere tomar en es el nombre del archivo. Entonces necesitamos crear
un nombre de archivo ahí para pasarlo
como parámetro. Digamos que el nombre del archivo DEM como
una cadena, nombre de archivo es igual. Y yo había puesto en cola
esta carpeta por aquí, que es sólo un
lugar genérico donde he estado poniendo algunos archivos de tutorial. Y diremos que dot doc
x es nuestro nombre de archivo. Y haremos lo mismo que en nuestra
variable nombre de archivo por aquí. Y le pegaré a F5 por carrera. Es abrir un documento
aquí, probar ese doc. Y luego aquí está nuestra prueba
ese documento de aquí, mostrando una demostración
de cómo desde Excel podemos automatizar
Microsoft Word. Y así voy a
conectar este botón
a nuestra
subrutina de prueba por aquí. Vamos a cerrar todo esto. Acabo de hacer un
poco de limpieza aquí, eliminará este documento
que creamos. Voy a venir aquí,
haré clic en este botón. Mira, esta es la era
que se presentó antes. No entraremos en
los detalles de esto, pero tiene que ver con administrar la aplicación Microsoft Word que está abierta en segundo plano. Pero vamos a ignorar eso. Y muchas veces
esto simplemente desaparecería cuando
vuelvas a intentarlo. Hay formas de lidiar
oficialmente con ello, pero simplemente no vamos a ir por
ese nivel de detalle aquí. Esto es sólo una prueba de concepto. Por lo que hago clic en este botón, se abre
Microsoft Word, se guarda como test dot doc. Y aquí está en
nuestra carpeta de nuevo, todo pasando desde Excel. Y si
volvemos aquí a nuestras herramientas, no
vamos a repasar
todas estas cosas. Hay un sinfín
de cantidades de información para ir por aquí con solo automatización
de Microsoft Word, que vamos a hacer
futuros videos en. También tienes todas estas
otras aplicaciones con las que puedes trabajar en VBA, una gran mayoría que no
he tenido que usar. Pero solo ves que
están disponibles aquí. Y otro, y estoy
seguro que vamos a usar como Microsoft Outlook para que podamos
empezar a automatizar correos electrónicos. Verás aquí también una biblioteca de
Microsoft Outlook. Eso es todo para éste, usaremos estos conceptos
en futuros videos.
30. 1.20 Sub para llamar a otro sub: Hasta ahora, hemos
estado haciendo macros con lo que es una subrutina. Entonces cuando usamos esta
palabra seb aquí, eso significa subrutina. Y sobre todo hemos estado
poniendo nuestro código dentro de nuestra subrutina
y luego ejecutándolo, ya sea que lo adjuntemos a un botón o simplemente lo ejecutamos
directamente desde aquí. Lo que tiré aquí es una macro simple aquí que cuenta de I equivale a uno a cinco y pone un
tiempo de espera de 1 segundo entre eso. Cuando ejecuto esto,
no hago clic en Ejecutar aquí. Se puede ver que cuenta
de uno a cinco y lo pone
sobre nuestra hoja de cálculo, y es sólo un contador
de uno a cinco. Lo que quiero mostrar
en este video es cómo podemos usar llamadas a subrutinas con el fin de reutilizar código sin realmente
volver a escribir el código. Si quisiera hacer
algo en este caso, como contar uno a cinco
y hacer lo mismo, pero quiero hacerlo dos veces. Lo que me gustaría hacer es venir aquí y simplemente hacer
una copia y pegar. Entonces ahora esto va
a pasar dos veces, y sólo voy a
poner un cuadro de mensaje. Entonces vemos una parada aquí una vez. Y hasta pondré
otro aquí abajo. Diciendo, estoy corriendo dos veces. Si corro esto aquí, podemos ver que tenemos nuestro contador
de uno a cinco. Tenemos nuestro pop-up. Y luego empezamos a ejecutar de nuevo este
mismo código exacto que copiamos y pegamos eso y
terminamos de ejecutar dos veces. El problema aquí, a
pesar de que esto funciona bien, es que tenemos el mismo código
exacto en dos lugares. Y eso no es un
gran problema en este momento. Pero y si quisiéramos
hacer algo dos veces y fueran cientos
de líneas de código, entonces habríamos copiado
y pegado cientos
de líneas de código en dos lugares diferentes que ahora necesitamos mantener. Nuestro código también es mucho más largo y que si
queremos actualizarlo, tenemos que recordar hacer
eso en más de un lugar. Y algunos trámites. No solo
necesitas correr dos veces,
necesitas ejecutar muchas veces
diferentes a lo largo de tu aplicación. Entonces lo que podemos hacer aquí es
crear otra subrutina. Llamaremos a este subrecuento
subrutinario a cinco. En lugar de copiar
y pegar esto, voy a copiar y pegar
esto en nuestra subrutina. Por lo que voy a
copiarlo y pegarlo. Entonces voy a eliminar esto. Y lo que
aún no hemos pasado es que estas subrutinas, no sólo se pueden ejecutar directamente desde nuestra
hoja de cálculo con say, un clic de botón o
algo así. Pero puede ser llamado
por otra subrutina. Por lo que ahora que hemos creado la subrutina llamada
count to five, puedo hacer click en esto. En realidad, me olvidé de mover este dimensionamiento
de yo por aquí. Por lo que tenemos que declarar nuestro
ojo arriba en una subrutina. Y entonces ahora solo voy
a comentar esto para que podamos
ver qué está pasando aquí. Estoy un poco estar dentro de la
mi subrutina macro. Y cuando golpee a F8 y lo ejecuto, este recuento a cinco
va a saber que esto es una referencia a
esta otra subrutina. Entonces al golpear F8 y paso a través, ves que salta a nuestra
otra subrutina aquí. Y entonces ahora
va a empezar a realizar nuestro recuento
hasta cinco subrutina. Así que voy a seguir adelante y golpear el juego y dejar que esto
siga contando. Entonces lo que puedes ver aquí es que
esto es contar los cinco. Incluso puedo poner, digamos Message Box a
punto de empezar aquí. Y luego si estoy en
mi subrutina macro, voy a hacer clic en Play. Aparece mi cuadro de mensaje, y luego está ejecutando
nuestro recuento a cinco. puede ver que está
pasando por aquí. Estamos llamando a esta subrutina desde dentro otra subrutina. Y entonces solo puedes quedarte
loco con esto y empezar a usar estos por
todo el lugar. Por lo que en realidad podría hacer
otra subrutina que
llama a la mente macro. Y para que puedas anidar
estas cosas juntas, lo que guardará para
otro video por ahora, solo
quiero presentarte esta idea de cómo
puedes llamar subrutinas. Entonces ahora si queremos
volver a nuestro original, puedo tomar esto y no
tengo que copiar todo este código,
que no es mucho aquí. Pero de nuevo, esto
funcionaría si esta fuera una subrutina mucho más grande
con mucho código aquí, en lugar de tener que copiar
y pegar eso más de una
vez a lo largo de su
código y hacer que su código mucho más largo y más
difícil de mantener. Sólo puedo llamar a esto dos veces. Entonces si vengo aquí
y ejecuto mi macro, tengo a punto de empezar a contar de cinco, que
estamos corriendo aquí. Ya hemos terminado de correr una vez. Y luego volverá a correr el
conteo a cinco.
31. 1.21 Sub de llamada con un parámetro: En el último video, te
mostré cómo puedes llamar a una subrutina desde
dentro de otra. Entonces tenemos este
contador básico por aquí donde tenemos a punto de empezar. Ahora estamos saltando hasta
nuestro recuento a cinco aquí. Terminado corriendo una vez,
y luego estamos corriendo nuestro recuento a cinco de nuevo. Un pequeño detalle que quería
añadir a esto es que se pueden pasar parámetros a
la subrutina también, para que pueda reutilizar este código. Pero también puedo cambiar variables dentro de ese código para poder
reutilizarlo, pero también ajustar la
forma en que lo uso ligeramente. Y creo que eso tendrá más
sentido cuando les muestro este ejemplo. Entonces tenemos esto
llamado contar hasta cinco, y siempre estamos contando los
cinco cada vez que ejecutamos esto. En cambio, tal vez quiero
contar hasta un número diferente. Y entonces, ¿cómo hago eso? Si quisiera
contar los cinco y luego quería contar hasta diez. El camino directo, pero menos eficiente
es hacer algo como esto y decir contar hasta diez. Ahora, voy a hacer este bucle de I equivale a uno a diez. Y entonces tengo que cambiar esto. Entonces digamos que si ejecutamos esto, tenemos un tema
aquí, contar hasta diez. Y eso es porque
yo usé la palabra aquí. En lugar de número. Seguimos corriendo.
Tenemos a punto de empezar. Vamos a contar los cinco y luego vamos
a contar los diez. Pero acabamos de recrear
el mismo problema que tratamos de resolver
en el último video, que es código repetido. Entonces, ¿cómo podemos hacerlo para
que reutilicemos este concepto? Reutilizamos el código aquí. Pero también tenemos
la capacidad de hacer un ajuste de qué
número contamos hasta. Entonces voy a deshacer esto. Vamos a
dejar esto a un lado, así que sólo
haremos que esto cuente a cinco de nuevo. Entonces lo que hace que cuente hasta cinco es este
número justo aquí. Ahí es donde nuestro for-loop
va a correr hasta. Voy a hacer una nueva variable. Voy a llamarlo parada. Y lo llamaremos también porque vamos a hacer esto un número para cambiar qué valor va aquí en
base a lo que queremos. Entonces vamos a decir parar en, entonces en lugar de contar hasta cinco cada vez que bucle
de uno a cinco, vamos a decir arranque desde
uno hasta el valor stop. Y tenemos un total
de qué valor. Llamamos a este recuento a cinco, pero realmente no
queremos que se detenga ahí. Queremos tomar, parar en
lo que el usuario quiera que haga, o al menos lo que queremos cuando
llamamos
a esta macro, cuente hasta el número. Y lo llamaremos así
y lo mantendremos anodino. Y entonces entonces, ¿cómo desde
esta rutina
le decimos dónde parar? Entonces vamos a
cambiar estos de contar a cinco para
contar el número. Tenemos que poner parada. Lo que no quiero hacer
es tener que decir parar en T
equivale a cinco o parar en igual a diez aquí arriba porque
eso tendrá algún sentido. Ahora, aún no hemos
tomado la decisión. Tendríamos que cambiar
el código aquí dentro esta subrutina que estamos llamando si queremos
cambiar el número. Entonces, en cambio, lo que vamos a hacer es aquí arriba entre paréntesis, posible que hayas notado en
el pasado que cada vez que
hacemos nuestras
subrutinas básicas hasta ahora, siempre
tenemos paréntesis aquí, aunque
siempre los hemos dejado en blanco. En cambio. Podemos decir parada en tanto tiempo aquí. En realidad, cometí un
error aquí porque decimos parar en igual a largo, estamos declarando la
variable aquí arriba. No necesitamos declarar
la variable aquí. Entonces no necesitaba escribir
eso ahí antes. Sólo voy a quitar que
declaramos aquí. Y lo que eso significa es cada vez que
llamamos
contar el número, en realidad necesitamos
poner paréntesis aquí. Ya ves como tecleo los paréntesis
abiertos, me dice que necesito
tener una variable aquí
llamada stop at. Eso es porque
sabe que esto está haciendo referencia a esta subrutina. Y entonces aquí está diciendo
que vamos a usar una variable llamada stop
at y es un césped. Para que pueda poner aquí un número. Diré cinco aquí. Y luego ahora, cuando llegamos
a esta línea de código, vimos en nuestro video anterior
que salta por aquí. Pero entonces también
va a tomar estos cinco y los paréntesis y establecer la variable que es un parámetro de
entrada como cinco. Entonces estos son los
parámetros de entrada que
entrarán en la subrutina
y se detendrán en, serán iguales a lo que ponemos en estos paréntesis cuando
estemos haciendo la llamada. Déjame hacer lo mismo aquí. Y vamos a ejecutar esta demo. Y en este caso
queremos que corra diez. Por lo que ahora puedo cambiar esto
a las diez y voy a
pisar esto con FAA, esta macro. Ya ves tenemos nuestro cuadro de mensajes. Ahora estamos saltando aquí. Pasamos los cinco a través de
estos paréntesis. Ya ves parada en
igual a cinco porque esto coincide con esto aquí arriba. Ahora, cuando estamos corriendo
por nuestro bucle, se
puede resaltar este valor
y ver que son cinco. Entonces vamos a dejar que esto
funcione. Acabo de golpear a F5. Está contando hasta cinco
y luego se detuvo. Y entonces ahora está
haciendo lo mismo. Debemos esperar que
el cuente a diez, porque cuando lo llamamos
esta vez aquí abajo, en realidad
estamos pasando
los diez por los paréntesis cuando lo
ejecutamos la segunda vez. Entonces vamos a ejecutar eso
una vez más para que podamos ver que la primera
vez que estamos usando cinco, y luego la segunda
vez que estamos usando diez, porque estamos
pasando el valor
del parámetro a través de
este paréntesis cuando llamamos a la subrutina. Sólo para mostrarles, porque
tengo esto aquí arriba donde se espera que se
envíe un valor junto con nuestra
llamada a una subrutina. Si elimino los cinco aquí, arroja un error de inmediato, incluso cuando aún no estoy
ejecutando el código, sabe
que este recuento, la subrutina numérica espera que
pasemos un parámetro en. Nosotros lo llamamos. Entonces de inmediato y sabe
que me falta algo aquí y ves
que me está dando un error, entonces ese error desaparece cuando
paso algo aquí. Y si paso, digamos que
una coma es nuestro separador. Entonces si lo paso dos cosas, también sabe que
no se espera. Una última cosa que
te puedo mostrar aquí es cuando tenemos la subrutina que tiene un
parámetro que es una entrada, la misma manera que tuvimos
un error cuando tratamos llamarlo sin pasar un parámetro a través
estos paréntesis. Ya que esta subrutina necesita
saber cuál es el valor de
stop at se supone que es. Si vengo aquí también, déjame arreglar esto realmente rápido. Si subo a esta
subrutina y luego golpeo play, puedes ver que
no se ejecuta y
aparece esta ventana para dejarme elegir qué macro
quiero ejecutar. Y aquí no está
mostrando contar el número. Solo está mostrando mi macro porque solo puedo
ejecutar esta macro si le estoy diciendo cuál es el valor del parámetro de
entrada. Y como éste tiene
un parámetro de entrada, sabe que no puedo
ejecutarlo sin pasar
algo por ahí. Entonces sabe que no puedo ejecutar contar el número
sin
llamarlo específicamente desde
otra subrutina o llamarlo desde el
código de otra macro porque necesito esta notación de
paréntesis para pasar en el valor
del parámetro de entrada. Entonces ya ves que
ya no puedo ejecutar contar el número solo
pulsando play o haciendo otra
cosa que no sea
llamarlo desde otra macro para que pueda pasar el parámetro de
entrada aquí.
32. 1.22 Sub de llamada con múltiples parámetros: Desde que hemos pasado llamando a subrutinas con un parámetro, intentemos hacer
más de un parámetro. Entonces tenemos esta parada en parámetro
de entrada por aquí en nuestro recuento el
número de función. Agreguemos un segundo parámetro. En caso de que no
queramos empezar en el número uno, podemos elegir también
el rango del número inicial. Agreguemos un nuevo
parámetro y
lo llamaremos start en tanto tiempo. Y
los separamos con una coma. Por lo que ahora hay dos parámetros
que podemos usar aquí. Y en lugar de la que siempre estábamos
empezando antes,
vamos a cambiar eso para empezar en. Por lo que ahora cuando llamamos número de
conteo, podemos tener un número inicial
y un número de parada. Así que vamos a bajar aquí
y actualizar esto. Entonces digamos que queremos hacer lo
mismo y
hacer uno a cinco. Y nos da un error aquí. Vamos a respaldar aquí. Ya verás cuando
abro los paréntesis, sí sabe que necesita
ingresar parámetros aquí. Por lo que está en negrita se muestra
necesitamos un comienzo y una parada en. Entonces, ¿por qué arroja
un error aquí? Esta es una peculiaridad sobre VBA y no puedo explicar todos los detalles aquí desde
el nivel de informática. Pero lo que tenemos aquí es cuando tienes
más de un parámetro, no
necesitamos estos paréntesis. Entonces la notación tiene dos opciones. O podemos dejar los paréntesis fuera de esto
para pasar dos parámetros, y esto hará lo que
esperamos que haga. O lo que prefiero
hacer es que puedas usar esta llamada de palabra clave
al principio cuando
llamamos a esta otra subrutina. Y luego si usas la
palabra clave call al principio, ahora podemos usar nuestros paréntesis la manera que
esperarías de antes. Entonces hay un poco de diferencia aquí cuando tienes
un parámetro de entrada
frente a dos parámetros, cuando estás llamando a
una subrutina. En realidad prefiero usar call porque me gusta
usar esto de todos modos, nos
deja saber que estamos usando una subrutina que nos
hicimos nosotros mismos. Y hace que salte que estés haciendo una
referencia cruzada aquí mismo. Y entonces creo que los paréntesis hacen que sea un poco más fácil leer lo que estamos haciendo lugar de no usar
los paréntesis, pero ambos funcionan y
haremos lo mismo. Así que probemos esto ahora. Vamos a cambiar esto y
luego tendremos un descanso, y luego haremos
algo como el 11. Y vamos a ir a 15 por aquí
la segunda vez que corremos. Empezaré haciendo FH. Entonces pasamos por
línea por línea. A punto de empezar. Saltaremos para contar. Y verás que start
at está tomando el del primer parámetro de
entrada, y luego está tomando
respectivamente el segundo parámetro aquí
y poblando stop at. Y este sería en realidad el mismo proceso y teníamos un tercer, cuarto,
quinto parámetro. Para que puedas seguir yendo aquí
con el número de parámetros que la subrutina
tomará como entradas. Y luego a medida que
seguimos corriendo aquí, sólo
voy a seguir adelante y presionar F5 y seguir corriendo. Vemos contamos uno a
cinco y corriendo una vez. Entonces en esta fila de código
aquí, golpeamos, Vale, seguimos del 11 al 15 y
terminamos corriendo dos veces. Entonces lo principal a mostrar aquí es que puedes hacer
más de un parámetro, pero la notación cambia un
poco cuando
lo estás llamando a cumplir con esta palabra clave
call aquí, o que se demuestra aquí, no tener que paréntesis cuando estás pasando
más de un parámetro. Así que ahora aquí ves
ni siquiera quiere la palabra clave call cuando
no estoy usando los paréntesis. Y entonces entonces vamos a ejecutar este
está a punto de empezar. Tenemos de uno a cinco aquí. Y luego saltamos hasta el
11 al 15 aquí. Como hemos visto en nuestros
ejemplos hasta ahora. Y lo que mencioné
antes es que a
medida que estamos pasando estos
parámetros, cuando estamos llamando a la
subrutina, va en orden. Entonces este de aquí
es este parámetro. Y luego el segundo
es esto de aquí. Y si tuviéramos un
tercio, solo di esto. Como siempre. Si pongo aquí un comentario,
esto será un tercero. Por lo que se puede ver va en su orden respectivo que se enumeran
los parámetros. Voy a eliminar esto aquí, pero no tiene
que ser así. Entonces otra forma podríamos hacer esto si no quisiéramos
llamarlos en orden. Y no suele ser
un gran problema si solo
tienes dos parámetros, pero si terminas
teniendo muchos parámetros
posibles para
pasar a una subrutina, entonces es posible que no quieras
llamarlos en orden. Y en cambio, ya ves que tenemos inicio por la izquierda y nos
detenemos a la derecha. Tendríamos esta otra
notación donde
escribimos stop colon igual. En realidad, olvidé
parada en el colon igual. Y se ve en cuanto
escribo ese colon igual, se revuelve el segundo parámetro, pues como estamos
coincidiendo con el nombre del parámetro que él, llamemos a esto o a la
claridad fuera de secuencia. Podemos decir cinco iguales aquí. Y luego como hago la coma, ahora, ninguno de ellos es
audaz porque
me he ido fuera de servicio aquí. Entonces no lo sabe
hasta que escribí. Y entonces sabe ahora
por nombre que estoy usando el nombre correcto start at va a ser este parámetro aquí arriba. Entonces podemos hacer esto
en cualquier secuencia. Y por supuesto, si hay
más de dos parámetros, podemos llamar a uno de los muchos aquí arriba y
declararlos fuera de secuencia. Y esto será útil
de otras maneras más adelante como probablemente
veremos
en futuros videos. Entonces ahora tengo esto y esto va a hacer
exactamente lo mismo. Sólo pude
llamarlos fuera de secuencia. Entonces estamos contando de
uno a cinco aquí. Y luego saltamos por aquí
como de costumbre y tenemos de 11 a 15. Al igual que lo que
demostramos antes. Puedo usar la palabra clave call aquí. Y entonces en cuanto lo haga, es
lo mismo, pero ahora necesitaré
usar paréntesis. Y esto es más a menudo
lo que haría es usar los paréntesis
y la palabra clave call. Esta es una notación que
podrías ver si haces algo como grabar una macro y
luego hacer cosas en Excel. Y luego mira el código que se registró desde la macro, que hicimos en lecciones anteriores. Muchas veces
verás que la grabación usará esta notación con los dos puntos y los signos iguales para
declarar los parámetros. Algo importante
aquí es solo que este símbolo de colon Gordon aquí. Entonces si elimino esto, esto en realidad no
va a funcionar, lo que podría ser un simple error cometer una primera si solo
estás escribiendo, esto es pensar que
esto funcionaría. Pero ves que arroja
un error aquí. Entonces en específicamente esta característica donde se está llamando a una
subrutina o función, que vamos a repasar en
el futuro y pasar parámetros a través de ella utiliza
dos puntos es igual a notación de signo.
33. 1.23 Sub con parámetros opcionales: Ahora que hemos repasado
los conceptos básicos de
pasar por parámetros a
una llamada de subrutina. Quiero mostrar la idea
de un parámetro opcional. Entonces lo que hemos creado hasta ahora, tenemos estos dos parámetros
que estamos pasando, los segundos de inicio y los segundos finales que
vamos a ejecutar este temporizador. Algo que podemos
hacer con parámetros es también hacerlos opcionales. Entonces todo lo que hago es escribir esta palabra clave opcional antes de
mi parámetro aquí arriba. Y ahora no tengo que llamar
a estos dos. En cambio, cuando
hago esta llamada a mi cuenta a la subrutina
numérica y abro los paréntesis. Ves que tenemos un
comienzo en el parámetro, que es justo como
vimos antes. Pero ahora nuestra parada en Perimeter
está entre corchetes. Y ese corchetes nos
dice que eso es opcional. Entonces diremos que empiece
en uno como de costumbre, y luego no teclearemos nuestro
segundo parámetro aquí. Y lo mostramos en
el video anterior. Pero si hice algo así
y acabo de hacer uno, voy a ejecutar esto, ya ves, tenemos este mensaje que
aparece y dice que el
argumento no es opcional. Está lanzando este
error porque
espera que se
pasen dos parámetros por nuestra declaración de
esta subrutina aquí arriba, pero sólo estamos pasando uno. Ahora en cambio, si tecleo Opcional
en este segundo parámetro,
lo ejecutaré de nuevo.
Y yo haré F8. A medida que
pasamos por aquí, obtenemos nuestro mensaje, y luego ahora saltamos aquí y comenzamos como uno
como esperaríamos. Y luego tenemos este parámetro
opcional. Y no le dijimos a nuestra llamada lo que queremos que sea la segunda
parada en variable. Y así es 0 ahora mismo lo
destacamos sobre él, que es lo mismo
que sería en si
declaráramos una variable y
no estableciéramos un valor, al
igual que tenemos nuestra
desaparición mientras yo sea 0 porque sólo
lo declaró y no hizo nada. Está justo en su
estado predeterminado, que es 0. Ahora detente en 0 porque no nos obligó a
pasarlo como parámetro. Era opcional. Y así es
justo en su valor predeterminado. Ahora si golpeo F8, ves que está ejecutando el bucle
de I es uno a 0, que en realidad
no tiene sentido porque solo
sabe seguir adelante. Entonces el bucle no se
ejecuta en absoluto porque 0 no
es más alto que uno y está tratando de
incrementarse en uno hacia arriba. Ahora estamos de vuelta por aquí.
Sólo voy a detener esto. Entonces así es como podemos tener un parámetro opcional en
nuestro diseño de subrutina. Algo que te voy a mostrar aquí. Si hago ambas
opciones, puedo hacer eso. Ahora, si voy aquí y
abro dos paréntesis, empiecen y paréntesis en son ambos parámetros opcionales y no
tengo que llamarlos. Y así como esperarías, en este caso, los
paréntesis en realidad se van porque no
tengo nada ahí dentro. Pero ambos
estarían al valor de 0. Ahora algo para mostrarte es
si hicimos lo contrario aquí, y elimino opcional
de nuestro segundo, esto está lanzando un error. Está diciendo esperado, el segundo parámetro
debe ser opcional. Y eso es
porque está confundido por la idea de que nuestro primer
perímetro es opcional, pero nuestro segundo no es
porque es tan a menudo que llamamos parámetros aquí en una
secuencia que están enumerados. Si hago algo como esto, está muy confundido
ahora porque éste típicamente significaría
nuestro primer parámetro, pero eso es opcional. Y así no sabe que éste
posiblemente significaría parar en. Por lo que solo puedes ver que hay
como un tema lógico aquí. Y la programación sabe que esto es irregular y
crea una situación de conmoción. Y está configurando esta bandera donde tus parámetros obligatorios
siempre están a la izquierda y luego tus opcionales deben estar
a la derecha. Entonces ahora que hemos
mostrado este concepto, vamos a mostrar cómo podríamos
usarlo para algo así. Y hay muchos
usos diferentes para ello, por supuesto, pero le mostraremos cómo podría
funcionar para nuestro temporizador aquí. Así que tal vez no queremos que nuestra
parada en sea opcional. Pero en cambio, tenemos
este temporizador que va de un número a otro. Y podemos hacer parar en tanto tiempo y luego comenzar en es
el parámetro opcional. Entonces necesito cambiar
las secuencias que hacen empezar por
la derecha para que
pueda ser opcional
por las razones que acabo de mostrar. Ahora, podríamos tener algo como que sólo pasamos en nuestro temporizador. Como digamos, lo dejaremos
a cinco segundos por aquí. Pero podríamos decir de
tres a cinco segundos. En realidad, lo siento, he
cambiado esto por ahí. Estoy mezclando cosas aquí donde estamos parando
en el primer valor. Por lo que esto estaría parando a los cinco segundos
está empezando a las tres. Sólo voy a comentar
estos por ahora. Entonces vamos a comentar
estos por ahora. Y luego si ejecuto esto, le pego a F5 y vemos correr
345 es como estamos haciendo esto. Podemos hacer que haga algo
como desde empezar como opcional. Si no tengo esto, entonces esto realmente va
a correr y vamos a empezar en 0 como nuestro
inicio en el valor. Podemos ejecutar esto
sólo para demostrarlo. Entonces empieza a las 0. Y así vamos a ver
0 aquí arriba, 0 a cinco. A medida que corremos esto. Podríamos hacer algo como esto. Ya que sabemos que
si no pasamos en un parámetro que esta
variable comenzará en 0, entonces podríamos hacer
que diga algo como start en igual a 0. Entonces diremos que empieza
en yo es igual a uno. Y eso básicamente
significa que si no estamos pasando aquí un parámetro, como no estamos diciendo
tres a 5345. Y no tenemos que decir en
qué número empezar. Y solo puedes pasar
un parámetro y detectará que no
se pasó nada, por lo que es 0. Va a empezar en uno. Ves que empezó
en uno de aquí. Por lo que esto crea un equipo de servidor
personalizado donde puedes tener la
opción de pasar algo, pero no te ves obligado
a tomar una decisión. Y hay un
manejo predeterminado de una situación si
elegimos no pasar un valor
específico para un parámetro.
34. 1.24 funciones: Ahora que tenemos algunos
videos sobre subrutinas, cómo llamarlos desde
otras subrutinas, y cómo usar parámetros. Quiero presentar la
idea de una función. Entonces en lugar de sub aquí, algo más que podemos hacer es
usar la función de palabra clave. Y
lo declararíamos de manera muy similar, y simplemente lo llamaremos
mi función por ahora. Haz paréntesis aquí. Con mi función. También puedo llamar a eso desde otra subrutina
u otra función. Entonces básicamente dentro del
código de un contenedor, puedo llamar a este otro tipo de contenedor llamado función
en lugar de una subrutina. Ahora si hago esto, voy
a poner aquí un cuadro de mensaje. Simplemente pondré un cuadro de mensaje
aleatorio para ver qué pasa aquí. Y vamos a ejecutar mi macro. Obtenemos nuestro pop-up. Ahora saltamos a mi función. Ya ves aquí está empezando
a parecer que corre exactamente como lo que
hemos pasado con subrutinas en eso
cuando lo
llamamos, saltamos a este contenedor de código
y empieza a correr. La principal diferencia entre
funciones es que puedes declarar esto mucho
como declaras una variable y cómo hemos
demostrado eso en el pasado. Puede declarar su
función también como un tipo de datos. Y así podemos decir como cuerda. Y eso significa que esto también se
puede usar
como una variable. Ahora, si digo que mi
función es igual a Steve, veamos qué pasa
aquí sobre el Start. Hola. Y luego mi función
es igual a Steve. Y no hemos hecho
nada con esto, pero si ahora
resalta sobre esto, ves que el valor de
mi función es Steve. Ese ejemplo, todavía no hemos
hecho nada con
esta función. Entonces vamos a convertir esto en
algo realmente básico. Esto es como un
ejemplo clásico de una función. Diremos sumar dos números y vamos a tener esta cosa tomando parámetros
y los parámetros. No voy a disparar lecciones separadas sobre cómo usar parámetros
para estas funciones, porque en su nivel básico, funciona exactamente como lo
hizo para las subrutinas. Podemos decir valor uno mientras voy a decir
el valor dos también. Por lo que esto toma en dos parámetros, valor uno y el valor dos, tendrá el resultado
también ser un número. Entonces vamos a hacer eso un largo también. Y luego aquí diremos que mi
función cambia al nombre, agrega dos números, y esto es
igual a valor1, valor2. De repente tengo espacio
aquí, que no debería. Ahora cuando llamamos a mi función, en realidad
no voy a llamarla, voy a usar esto,
como estoy usando una variable. Ya no es mi función. Ahora llamémosle
agregar dos números, y hagamos una impresión de debug. Ahora hay un tema aquí donde la luz de nuestra subrutina
con parámetros lecciones, necesitamos enviarla
en nuestros dos números. Entonces vamos a enviar en nuestro
valor uno es igual a dos, y luego nuestro segundo valor solo
hará tres. Entonces esperaremos el
resultado de cinco aquí. Y olvidé cerrar
esos paréntesis. Y luego vamos a ejecutar esto. Ahora saltamos aquí, tenemos 23 como nuestros parámetros que se
colocan en esta función. Y entonces aquí lo vamos
a sumar juntos. Y luego nuestro nombre de función, añadir dos números es igual a cinco. Ves que no
tuvimos que declararlo, como declaramos nuestras
variables aquí arriba, porque esta creación
de la función es esencialmente declarando
añadir dos números como un tipo de datos aquí como un largo. Entonces ahora esto corrió, el resultado de esto
termina siendo cinco. Y así cuando ejecutamos
esta línea de impresión de debug, cinco salieron aquí. Ahora la parte importante es que para que
esta salida sea de cinco, necesitamos establecer el
nombre, sumar dos números. Entonces lo que tengamos como nombre de
nuestra función es lo
que necesitamos establecer como el valor. Entonces si hicimos algo
como esto y dijimos, Siempre y cuando resultado iguale
valor uno, valor dos. Y sólo voy a
comentar esto por ahora. Se puede imaginar que
resultado equivale a cinco, pero no hemos hecho nada para decirle que el resultado
que está saliendo de esta función que llamamos sumamos dos números va
a ser el resultado. Cuando saltamos por aquí, ves que tenemos 0
para nuestra salida. Y yo correré esto. Sólo estoy golpeando a F5 aquí. Vamos a ejecutar esta cosa. Vemos que sale 0 y eso es porque estamos llamando a
sumar dos números. Y no hay nada que
haga
pasar el resultado al valor de
sumar dos números por aquí. Si quisiéramos hacerlo de esta
manera y no quisiéramos hacer directamente todo nuestro
trabajo en esta función. Podemos decir sumar dos
números es igual a resultado. Entonces ahora tenemos
cinco y luego cinco se convierte en la salida
de esta función. Y luego aquí están los cinco
que vuelven a aparecer.
35. 1.23 con declaración: En este video,
voy a repasar alguna notación de codificación rápida. Eso es bastante simple,
pero solo tenemos que repasarlo porque definitivamente lo vamos a
utilizar en el futuro. Y quiero asegurarme de que lo
reconozcas cuando lo veas. Así que vamos a repasar la demostración de
declaración width que voy a dar es si digo que el
valor del rango A15 es igual a pasado, hemos hecho algo
como esto todo el tiempo. Así que le pegué a F8 y ejecuto esto y hemos puesto la
prueba de palabras en el rango A1. Entonces tal vez quieras
hacer algunas cosas más con rango A1 dirá Rango A1, esa fuente, que todo es igual a verdadero. Y luego queríamos hacer otra
cosa con ella. Fuente, cursiva es igual a true. Y entonces queremos decir que
ese interior, ese color es igual al rojo. Entonces ahora si vengo por
aquí y me pego a F8, y ejecutamos esto, tenemos
tareas que ya estaban ahí. negrita se hace verdad,
cursiva se hace verdad. El fondo aparentemente
se vuelve negro. Eso es porque uso WD read
cuando realmente estoy en Excel, así que debería estar usando excel red. Vamos a probar eso.
Nuevamente. Yo golpeé a F5 aquí, y allá vamos. Entonces esto no es lo importante. Por qué quería mostrarte
aquí es que escribimos rango
A1 una y otra vez
cuatro veces aquí. Y potencialmente si quisiéramos
cambiar diez cosas más raras,
justo a cambiar diez cosas más raras, las 14 veces, este no es el trato más grande, pero las líneas podrían llegar más largas y esta etiqueta de inicio
y hacerse más largo también. Entonces digamos que tenemos hoja
dos y en su lugar queremos decir hojas a ese rango. Ahora esto se está haciendo aún más largo. Digamos que
específicamente queríamos
llamar a este cuaderno de trabajo. Y ahora todo esto
va a funcionar igual excepto si tenemos múltiples
libros de trabajo abiertos estará diciendo
explícitamente en qué libro de trabajo estamos y luego en
qué hoja estamos, G2, para no confundirse con
Sheet1 y nuestra gama A1. Así que ahora si golpeo a jugar aquí, verás que sabía
venir aquí a la segunda hoja. Y a lo mismo
se le ha agregado la hoja. Lo molesto
aquí es que escribimos todo esto una
y otra vez. Y si tenemos más líneas, necesitamos hacerlo aún más y es sólo información redundante. Y si queríamos
cambiarnos a B2, por ejemplo, necesitamos
hacerlo en cuatro lugares diferentes. Aquí está la notación con
declaración. Entonces si escribo width y luego toda esta
información por aquí, voy a copiar por ahora. Y luego decir n ancho. Entonces, ¿qué hay entre
estas dos declaraciones? El inicio de nuestra anchura y
luego el final de nuestra anchura. Mucho parecido a una declaración if que hemos usado
muchas veces. Voy a aprovechar esto para que
todo sea más legible. Y luego elimino
esto por aquí. Esta declaración width está diciendo que vamos a usar esto
como el inicio de la línea. Y entonces cada vez que
veas un periodo por aquí que le va a decir haga esto en lo que tengamos para nuestra
declaración de ancho por aquí. Eso significa básicamente que esto es equivalente
a esto aquí mismo. Voy a
seguir adelante y copiar esto abajo justo para que lo
tengamos como referencia. Y adelante y elimine
todos estos por aquí. Entonces estas dos cosas, esto, en esto significan
exactamente el mismo código. No hay diferencia entre este código excepto que
esto es mucho más corto. Y si quiero cambiar
esto para decir B2 aquí, corre la hoja dos por aquí. Puedo pasar por
este código y no
tuve que cambiar esto cuatro veces. En cambio, estamos
trabajando con la celda B2. Y ves como
pasamos, se está comportando como si estas
solo fueran líneas completas de
código con este periodo anexando a esto de la
izquierda. Voy a parar aquí. Eso es realmente. Esta es una declaración de ancho básico. Lo uso todo el tiempo. Te ahorra mucho mecanografía, te
ahorra mucha
actualización en el futuro. Y también verás
que a veces cuando
grabas macros y haces
diferentes acciones en tu archivo de Excel y luego el código que fue generado
por tu grabación que la cancha tenía macro voluntad también usa esta notación con
mucha frecuencia. Una cosa más que olvidé probar aquí es que si
no usas un periodo, todavía
puedo entrar
aquí y decir Range debajo de ese valor
es igual a algo. ves aquí estamos usando B2, pero debido a
que no tengo un periodo aquí, entonces Excel no agrega esto a lo que se trata mi
declaración width. Así que sólo si se inicia
la línea de código con un periodo que
casi nunca haces por alguna razón que no sea
esta declaración width, va a tomar esta línea de periodo y
anexarla a nuestro ancho declaración. Entonces si vengo por aquí, voy a copiar pegado
solo para borrar esto aquí y ejecutar esta línea. Veamos, estamos haciendo lo
mismo con B2. Y luego cuando llegamos a
esta línea, todavía funciona. No arroja algún error
porque piensa que está haciendo algo tonto
como hacer esto. Está buscando específicamente estas líneas que comiencen
con un periodo y cualquier otra cosa simplemente actúa normalmente como lo haría si
fuera de la declaración con.
36. 1.24.1 Atrapo de error: introducción, en error: Vale, ahora quiero mostrarte una introducción básica
al manejo de errores. En nuestros videos pasados hasta ahora has visto errores apareciendo en nuestro código. Y estos se llaman errores de
tiempo de ejecución, que es básicamente cuando algo sale mal en el
código no tiene sentido. Y así te dice que un tema como ocurrió
y deja de correr. Y voy a hacer un ejemplo
muy básico. Diremos dimensión,
mi número como largo, y este es un valor numérico. Si digo que mi número equivale a
diez de mi número. Vamos a ejecutar esto. Le pegaré a F5 y ya ves
aquí hay diez aquí abajo. Ahora si vengo aquí y cambio mi número para ser
Steve, le pegaré a F8. Por lo que corremos por esto. Hemos visto pasar este tipo
de cosas. Es un error de discordancia de tipo. Y es porque esta variable no
puede aceptar la cadena, pero estoy haciendo que intentara
igualar una cadena por aquí. Golpeamos a Debug y nos
transmitimos por aquí. Si golpeo F8 para intentar continuar, solo
nos encontramos con este
error una y otra vez. Y tenemos que manejar esto. Normalmente cuando obtenemos
un error como este, esto significa que nuestro código está haciendo algo que
no queremos que haga. Y así tenemos que entrar
aquí y cambiar nuestro código. Eso todavía va a
ser mayoritariamente el caso. Pero lo que tenemos la capacidad de
hacer es que nuestro código reconozca que las flechas
van a subir en lugar de golpear
mientras golpeamos ahora, que es todo acaba de llegar a un alto de molienda en
esta línea de código. Así que voy a golpear stop otra vez. Y te mostraré
lo que quiero decir con eso. Lo que no vemos pasando
en segundo plano es que realidad
hay una variable
llamada ARR por error. Y se ve cómo
cuando escribí esto, tenemos todas nuestras
propiedades y métodos para el objeto ARR. Sólo voy a llamarlo el objeto de error que avanza. Y está sentado aquí
en el fondo. Y puedo decir depurar
imprimir ese número. Y vamos a golpear a F8. Y correríamos esto y ya ves, esto surgió, el
número de error fue 0. Puedo hacer algo más
como descripción del error. Y moveré esto hacia arriba uno
y volveré a golpear a F8. Y ya ves que aquí no
vino nada. Eso es porque este
objeto está sentado en segundo plano y
no hay errores en nuestro código
hasta este punto, sabemos que vamos a tener un error en esta línea de código, pero no hemos corrido todavía. Ahora voy a escribir
algo aquí llamado a R. Ahora voy a
escribir algo aquí. Voy a escribir sobre error. Entonces lo que estoy diciendo es que
si hay un error, entonces vamos a hacer algo. Podrías cambiar
lo que pasa aquí. Pero en este caso voy
a escribir curriculum vitae a continuación, lo que básicamente significa
si hay un error, entonces simplemente seguir
adelante. Entonces en realidad voy
a detener esto y luego voy a copiar esto. Vamos a ver
todas estas cosas aquí. Vamos a decir en el aire. Y luego volveremos
a nuestro número aquí. Recordamos que hay, el número de error aquí arriba es 0. De hecho, pondré aún
más mensajes de debug para que todo sea lo más
claro posible. Paso a través de
este código, tenemos este objeto de error que nunca
declaramos. Es justo en el fondo
de VBA cuando se está ejecutando. El número es 0.
La descripción no es nada en cada hoja de vida siguiente, y aquí es donde
esperamos golpear un error donde ese
diálogo de error en tiempo de ejecución estaba apareciendo antes. Y ahora si le pego a F8, ves que
pasó por él y luego incluso aparece el error. Entonces, hasta ahora
ni siquiera sabemos que sucedió
algo incorrecto
que golpeamos un error. A pesar de que ya sabemos que esto no puede ser
Steve, esta variable aquí. Si pongo el cursor sobre él,
ves que sigue diciendo 0, que es su
estado predeterminado cuando lo declaramos. Y entonces ahora tenemos
un error número de 13. Y luego cuando
golpeamos mi número es 0. Entonces si le pego a F5, ves que volvió a correr y simplemente no
hay error. Vamos a dejar esto más claro. Descripción del número justo aquí, cada número, e incluso vamos a hacer errorDescripción de
nuevo aquí abajo. Y eso es todo por esta línea aquí donde estamos diciendo
si hay un error, entonces vamos a reanudar a continuación. Y por eso podemos continuar. Y a pesar de que golpeamos un error, ves este
objeto de error en este lado de la declaración lee el
error que ocurrió. Es un error 13 y
un desajuste de tipo. Si bien antes de que ocurriera el error, este objeto de error no
contenía nada porque en este punto no
había ningún error que ocurriera. Haz algo como solo
comentar esta línea. Ya verás si llego a F5, estamos de vuelta a
donde estábamos antes, que es que llegamos a esta línea. Tenemos error en tiempo de ejecución 13. Por lo que puedes ver que este
es el número de error que ocurrió abajo después de que ocurriera nuestro error
y es un desajuste de tipo. Entonces la idea principal aquí es que hay este objeto de error que está
colgando en el fondo. Y cuando ocurre un error, las propiedades de
este objeto cambian a qué error ocurrió. Y la mayoría de las veces cuando
todo se está ejecutando correctamente, el número de
error es 0, la descripción está
en blanco y hay otras etiquetas que solo muestran este objeto de error sin haber ocurrido ningún
error. Ahora una
situación común de manejo de errores que podrías encontrar es que vas a
decir onError, reanudar a continuación. Y en realidad no queremos que esto simplemente
continúe y no haga nada. Algunas personas podrían hacer esto, pero se considera muy mala práctica porque algo salió mal y no quieres que
el código simplemente lo ignore. Porque si tenemos
cientos de líneas de código, todas estas cosas aquí abajo, si había mucha más lógica, no
queremos
simplemente continuar y
correr a pesar de
que algo salió mal. Eso significa que el código R que se ejecuta más tarde podría tener algo
que sale mal. Y queremos
saber realmente que algo
malo ha sucedido. Entonces muchas veces
tienes este currículum a continuación, y luego tendremos
algo como si ese número no es
0, entonces una condición. Y luego aquí,
solo por ejemplo, vamos a hacer estallar un cuadro de mensaje
y diremos que alguna vez ocurrió. Y diremos nuestro
número o distribuidor. Lo que tenemos aquí es que
si sigo aquí, en realidad
tendré
que empezar de nuevo. Así que le pegué a F8 en nuestro currículum siguiente, y luego golpeamos nuestro error aquí. Y nada
nos ha detenido, seguimos. Pero ahora tenemos esta declaración
if que dice si el
número de error no es 0, eso significa que nuestro sistema
detectado ahí. Y entonces ahora tenía
un cuadro de mensaje. Y si esta macro se estaba
ejecutando desde el usuario, ves que estamos recibiendo
un cuadro de mensaje diciéndonos que ocurrió el
error. Y el beneficio de hacer
algo como esto, incluso solo un cuadro de
mensaje emergente es ahora puedo seguir
ejecutando mi código. Podría hacer otras cosas o bifurcar el código
de diferentes maneras. Para que una cosa ocurra
si hay un error, y otra cosa sucede
si no hay un error. Y podemos notificar
al usuario sin que ese cuadro de diálogo apareciera. Eso podría ser
confuso para el usuario. Ahora podemos controlar nuestro
mensaje de lo que
ve el usuario en lugar de obtener
el pop up predeterminado. Eso sucede cuando VBA
detecta un error. Ahora si lo hacemos para que no
haya un error. Entonces digamos que mi
número es igual a uno, que debería ser una línea de
código
completamente válida que teníamos en nuestro currículum. A continuación, si nuestro número no es 0, entonces va
a entrar aquí. Pero debido a
que esto no causa un error, simplemente
saltamos por encima de esto
y no se produjo ningún error. Y ves aquí abajo,
todavía estamos en el error número 0. Así que pasemos
por esto de nuevo. Ya veremos a pesar de que tenemos esta línea así que estamos listos
para manejar un error. No lo usamos. Entonces el número de error sigue siendo 0 aquí y nunca tenemos que
saltar a esta declaración if. Y simplemente volveremos
a lo que éramos antes. Y ya puedes ver
con este código aquí, podemos detectar cualquier problema
que pudiera ocurrir en esta línea. Entonces en este ejemplo, estamos tratando
específicamente de
orientar esta línea de código porque pensamos
que puede o no
haber un error que
ocurra en esta línea de código. Así que muchas veces
usarás este método justo alrededor del código donde
crees que es probable
que tenga un error. Lo que no deberías hacer, o tal vez no es probable
que tengas un error, pero hay una posibilidad decente de
que puedas tener un error. Y luego complicado código, puede
haber todo
tipo de variables que se están combinando juntas. Y así no será tan obvio
como nosotros creando
deliberadamente un error
aquí en una sola línea. Por supuesto. Una idea principal aquí
sin embargo, es típicamente, se ve esta notación
envuelta alrededor una línea muy específica o un
pequeño trozo de código. Lo que quieres hacer, tener cientos de líneas de código abajo y tener esto
en nuestro currículum siguiente, alrededor de todo tu código. Puede ser tentador
hacer eso en ciertos casos, pero se considera mala
práctica porque
no quieres ignorar
todos tus problemas y luego tener todo tipo de efectos negativos
aguas abajo en tu sin escalar
eso y dejar usted o los usuarios vean que
algo salió mal. Entonces esa es sólo la
introducción básica aquí. A medida que avanzamos,
vamos a construir formas
mucho más detalladas que podamos usar
este manejador de errores. Pero este es el concepto básico
de esta palabra clave de onError. Y luego las diferentes
cosas que puedes hacer con este objeto de error ya que estás manejando los errores que
podrían ocurrir en tu código.
37. 1.24.2 Goto: marcador de código: Vale, si acabas de ver la última lección sobre una
introducción al manejo de errores, todavía
tengo solo
la versión básica de ese código en mi pantalla. Pero quiero introducir otro pequeño tema antes de
continuar en el manejo de errores. Y ese es el nomenclatura de
diferentes secciones del código, básicamente marcando el código, y luego poder
saltar a ese marcador. Y en VBA, eso se llama
la función go-to. Básicamente. Déjame mostrarte
lo que quiero decir aquí. Ahora y en la
parte inferior de nuestro código, voy a usar esta
notación donde
voy a llamar a esta sección dos. Tiene que ser una sola
palabra sin espacios. Entonces estoy usando este subrayado. Yo hago colon aquí. Cuando golpeo Enter,
ves que la línea saltó
automáticamente
a la izquierda. Si toco esto, ya ves, medida que cambio la línea, todavía
se quiere
mover hacia la izquierda. Y eso es porque
esto es un marcador. Ahora escribe algo así como cosas de vista de
sección. En realidad probó esto
justo antes de golpear récord. Por lo que ya tengo este
mensaje aquí abajo. Y la única línea aquí
es una impresión de depuración. Ahora, si ejecuto esto, bueno, en realidad
todavía tenemos nuestro código del video anterior. Pero tenía este mensaje de error que ocurrió fueron la impresión de
depuración. Entonces solo estamos ejecutando
el código y ya ves, ahora no ejecutamos
esta línea de código. Esto es contra la pared izquierda, y es sólo la
notación por este colon que
es un marcador. Entonces lo ves nunca
corrió esa línea de código. Simplemente se saltó por encima de él. Y ahora se ejecuta esta línea de código y corrimos
todo hasta el final. Ahora lo que significa este marcador es que solo marca esta línea de código. En realidad marca
esta línea de código y es un salto a
todo lo que hay debajo de ella. Puedes saltar a los marcadores, algo como escribir go-to. La sección dos aquí, ves
goto es una palabra clave por aquí, y automáticamente formateó y cambia de colores aquí para
mostrarte que es una palabra clave. Y luego tenemos nuestra
sección dos aquí. Entonces si ejecuto este código,
estoy golpeando F ocho. Y en esta línea
dice ir a la sección dos, se ve un salto a
esta sección para marcar. Y ahora estamos ejecutando
el código por aquí. Y nos saltamos todas
estas cosas aquí. Y eso es porque esta
línea de código solo te dice que saltes
a donde esté
el marcador. Ahora si hago algo como
saltar a la sección tres, vamos a ver qué pasa
porque
no hay sección tres
y ves me pego F8 y esto inmediatamente
apareció diciéndote
que no está definido. Incluso antes de empezar a correr, el código está compilando. Y al darse cuenta de que aquí hay un tema que
vamos a tener una línea de
go-to que no
tiene un marcador existente. Pero ya viste antes de eso
poner el marcador aquí, no causa ningún problema. Si no estamos usando esa etiqueta en realidad
no
causa un problema, pesar de que no saltamos a ella. Pero no se puede saltar a
algo que no existe. En la siguiente lección
donde sigo trabajando en los detalles de
manejo de errores, verás por qué te estoy
mostrando esto aquí, porque esta función Goto se usa comúnmente para el manejo
básico de errores. Una cosa que voy a decir es que
esta capacidad de la Sección dos por aquí típicamente es algo que a menudo se
señala como un problema en VBA, es decir que
muchos programadores que hacen lenguajes
más modernos les gusta usar esto o utilizarlo en exceso. Una de las principales razones por las
que lo uso será el manejo de errores. Entonces te voy a
mostrar más tarde. Pero es común que esto se
plantee como una
de las razones por las que VBA puede causar que algún código sea realmente difícil de seguir
y difícil de mantener. Porque todo esto simplemente
saltando y saltando, lo cual es apenas difícil de seguir. Si dejé aquí este código
por cualquier razón, se
puede ver que no tiene ningún
sentido. Y eso es porque todo
el código aquí dentro nunca se ejecutará. Si acabo de dejar
esto así por cualquier razón, esta era una función
que se estaba
utilizando en algo que creé. No es obvio ahora que vemos lo que hace este goto y
este marcador, sabemos que este
código en sí solo nunca se ejecutará y ni
siquiera
tiene sentido que esté aquí. Pero ya ves que no nos está señalando que este
es código mal escrito. En el peor de los casos es
que verás mal código donde tiene toneladas de estos
goto está por todo el lugar. Típicamente cómo se ejecuta el código, lo
que hemos estado
haciendo hasta ahora y vamos a
seguir haciendo es por supuesto
de arriba hacia abajo que acabamos de ejecutar una línea
de código a medida que vamos uno por uno de arriba hacia abajo es
la más fácil de seguir. Pero una vez que empecemos a enloquecernos usando demasiadas de
estas declaraciones Goto, puedes ver que el código no solo irá de arriba a abajo. Podemos estar saltando por
todo el lugar. Y si hay cientos o
miles de líneas de código
a través de diferentes subrutinas y funciones saltando por
todo el lugar. Podemos ponernos realmente
confusos muy rápido. Y así a pesar de que esta es una función realmente simple de
usar para muchos programadores,
se considera una mala práctica. Encontrarás gente
quejándose este tipo de cosas y
llamándolo
código espagueti porque el código está
tan enredado que es muy difícil seguir hacia dónde va cada ruta de
proceso. Eso es todo. hay una introducción básica a Aquíhay una introducción básica a
esta función Goto
que vamos a utilizar. Pero ten en cuenta que no es algo que quieras
ir por la borda al usar.
38. 1.24.3 Sobre el marcador de Goto: Ahora, empatemos las dos
últimas lecciones que lo grabo juntos, que es la introducción al
manejo de errores con esto sobre declaración de
error y esta sección
goto por aquí, donde podemos
saltar a un marcador. momento, tenemos este ejemplo que realmente
no hace nada. Tenemos una variable
llamada mi número. Y entonces podríamos crear
un error por aquí, que estamos atrapando con
nuestra declaración if por aquí. Y entonces no estamos haciendo
nada interesante por aquí. Sólo estamos emitiendo el error. Ahora en cambio,
hagamos algo con el código solo para
darte un ejemplo de caso de uso, donde tenemos nuestro número
y podemos decir respuesta como, llamémoslo también. Y diremos que la respuesta es igual
a mi número más menos. Digamos, depurar, imprimir. Responder. Nuestra respuesta aquí. Entonces si todas las cosas van bien
con el Coby tienen aquí, voy a hacer que mi
número sea igual a cinco, que no esperamos causar ningún error porque la
variable es un número. En realidad, se ve
en el último video, acabo de dejar esto aquí, y esto no tiene sentido. Esta es una gran demostración de lo que mencioné en
la última lección, que es que este código simplemente
salta todo nuestro código aquí y no hay
razón para que exista en la forma en
que habíamos dejado esto. Así que voy a eliminar
esa declaración goto y sólo un poco la
dejaré de lado por ahora. Ahora en nuestro currículum que aquí no
hay error. Entonces saltamos
nuestro cuadro de mensaje porque
el número de error es 0. Ahora tenemos nuestra respuesta que es cinco más cinco equivale a diez. Y como se esperaba,
nuestra respuesta es de diez. Y luego hacemos la sección dos, que es sólo de
la última lección. De acuerdo, así que eso es genial. Tenemos aquí nuestra función que parece ser el objetivo de
sumar un número juntos. Y vamos a crear algunos problemas. Ahora. Vamos a crear nuestro
problema aquí mismo. Y desde hace dos lecciones
tenemos nuestro manejador de errores. Por lo que deberíamos conseguir un
error por aquí, pero en cambio tenemos esto. Si hay un error,
solo reanuda a continuación. Así que sólo
seguimos adelante. Y luego tenemos
nuestra declaración if, que detecta que se
detectó un error con
nuestro objeto de error. Ahora pulsamos nuestro cuadro de mensaje, que tiene ocurrido un error. Podemos hacer click, Ok, entonces
las cosas no se detuvieron. Este fue un
cuadro de mensaje que a propósito
colocamos en el código que
seguimos corriendo. Ahora tenemos nuestra
respuesta, que es 0, porque esta línea
en realidad no estableció nuestros números nada y sigue siendo 0 de
nuestra declaración original. Este es un gran ejemplo de por qué no
quieres simplemente
seguir corriendo. Por qué necesitarías
elevar los errores. Porque si
alguien que estaba ejecutando esto, sé que esta función
no tiene mucho propósito en este momento, pero ves nuestras respuestas 0. Y así si estuviéramos haciendo
algo
importante, sólo podría
seguir en su camino. Espe una respuesta,
en este caso 0, y el usuario
pensará que recibe la respuesta del software una vez. Pero lo que sabemos que
pasó es que
ocurrió un error en 0 no es
lo que realmente queremos. Es solo algún defecto que
sucede si las cosas salen mal. No queremos que eso suceda. En cambio, lo que podríamos hacer es si tuviéramos algunas cosas importantes pasando en la sección
dos, que no lo hacemos. Pero pretendamos que este es algún código
que queremos ejecutar. Podríamos decir, ir a la sección dos. Ahora, vamos a
hacer lo mismo. Tenemos nuestro error. Se nos notifica que hay un error con este cuadro de mensaje. Y luego saltamos
por encima de la sección dos y no nos avisamos y respondimos por aquí porque este error que sabíamos
causaría una mala respuesta. Entonces no queremos
dar una respuesta sabiendo que algo salió mal
con esta sección de código. Y así ahora sólo estamos saltando adelante para continuar en
nuestro código por aquí. Nuevamente, como la última
lección en la que mencioné, no
queremos enloquecernos con esto porque
puede volverse confuso. Ahora tenemos otra situación en la que nos saltamos algún código aquí. Y si esto era importante
para el código de aquí abajo, entonces todo se
enreda en difícil de
seguir de nuevo. Así que de nuevo, no
queremos volvernos locos con esto, pero esto es solo un ejemplo
de lo que podrías hacer. Algo mucho más
común que verás es tal vez vamos a hacer algo
como esto donde decimos go-to manejador de errores. Y luego por aquí en este momento, dices ir a nuestro manejador. Y luego por aquí, podemos decir si número de error. En realidad, antes
de mostrarte esto, déjame, déjame volver aquí. Voy a perder
todo este medio donde decimos, donde tenemos una declaración if que está comprobando
nuestro número de error. En lugar de decir reanudar a
continuación. Tráelo de vuelta aquí. Este currículum siguiente
básicamente solo dice, aunque haya un error, simplemente vaya a la
siguiente línea de código. En lugar de hacer eso, podemos reemplazar esto
con el go a. Y al igual que tuvimos la
declaración goto para la sección dos, podemos decir go-to manejador de errores. Y lo que esto hace es
si hay un error, simplemente saltará
a nuestro marcador, igual que esta declaración goto. Y así salta
a nuestro marcador aquí. Ahora, si le damos un número
real por error, vaya al manejador de errores
aquí abajo. No hubo error. Entonces simplemente continuamos nuestra línea de código como de costumbre porque no
hay error. Con este caso. Se puede ver que
ya no necesitamos esa declaración que la atrapa porque esa declaración que la atrapa porquesi
hay un error, solo vamos a saltar
hacia abajo a nuestro marcador, que es nuestro manejo de errores que qué
típicamente podría ver. Y esta es una notación realmente
común. Es entonces aquí abajo, se
puede decir si nuestro
número no es 0, entonces vas a
manejar cosas aquí. Y diremos de nuevo
número de error, descripción del error. Y sólo vamos a hacer un cuadro de mensaje, aunque podríamos hacer
lo que queramos aquí abajo. Ahora en lugar de la sección dos, hemos compartimentalizado
el final del código siendo nuestro bit de código
para manejar errores. Y en este caso
sólo estamos haciendo un cuadro de mensaje. Entonces ahora tenemos un error. Saltamos a
nuestro manejador de errores. Y si el número de error aquí
abajo no es 0, lo que significa que
en realidad hay un error. Ahora obtenemos nuestro cuadro de mensajes y nos saltamos nuestra
función por aquí. Eso no
nos va a dar la respuesta correcta. Entonces si damos algunas entradas que tienen sentido
y no esperamos un error, ya ves que tenemos este código. Una cosa a mencionar aquí es que se
puede ver que este código, en realidad
ejecuto algo
visiblemente como nada. Ten en cuenta que sucede
cuando ejecutas este código. Simplemente establece el
estándar para lo que
va a pasar a medida que
continuamos ejecutando el código. Te lo explicaré en
un minuto cuando regrese y
vuelva a crear el error. Pero ya ves, déjame empezar
desde el principio. No esperamos un error aquí. Por lo que ahora corremos justo a través. Obtenemos nuestra respuesta siendo
cinco más cinco equivale a diez. Ahora estamos en nuestra sección de
manejadores de errores. Básicamente saltamos
a nuestro marcador. Pero porque tenemos
esta declaración if, nada salió mal,
vamos a saltar por encima este mensaje y no
recibimos este cuadro de mensaje. Por lo que ahora hemos creado algún manejo
básico de errores que evita los
posibles escollos, que es cuando todo va
correctamente se ejecuta como de costumbre, nuestro manejo de errores está
aquí abajo y no se ejecuta
si no hubo error. Si venimos aquí y
creamos una situación de error. Esto es lo que quise decir antes,
donde esta línea de código, pesar de que sabemos que
hay un error aquí, en realidad no
hace nada. Simplemente establece la situación como si
hubiera errores que
sucedieron debajo de ella, entonces va a usar
esta situación. Ahora. Va a saltar
aquí abajo y tirar nuestro error. Y no ejecutó este código el cual no queríamos
seguir corriendo. Si se detectó un error.
39. 1.24.4 En error: persistencia y restablecimiento: Ahora continuando con
esta configuración que teníamos en nuestra lección anterior,
déjame parar aquí. En realidad vamos a
crear una
situación en la que no haya errores. Nos escupimos nuestra respuesta
y todo funciona. Ahora después de nuestra respuesta por aquí, hagamos algunas otras cosas. Sólo voy a poner un comentario
aquí, hacer más cosas. Digamos que estamos haciendo
algo más que no tiene relación
alguna con el
código que tenemos aquí. Y decimos dimensión, otro número siempre. Y luego decimos que
otro número es igual. ¿ Steve? Ahora si ejecuto esto, tenemos, si hay un error, vamos a ir a nuestro manejador de
errores y saltamos
aquí en esta línea en la que nos hemos estado enfocando no
hay error. Entonces aquí vamos, Seguimos. Y ahora en esta línea,
saltamos hacia abajo. Este fue un mal ejemplo en realidad, porque esta iba
a ser la línea de código. De todos modos, esto va
a estar en la siguiente línea. Digamos que debug, imprima otro número por la razón
que sea.
Vamos a intentar esto de nuevo. Pasamos por todo el
camino aquí y creamos una situación en la que
esperamos que ocurra un error aquí mismo. Y lo ves salta por
aquí a nuestro manejador de errores. Y entonces lo que estamos notando
aquí es que esta línea de código que creamos en nuestros ejemplos anteriores para capturar si hay un error
en esta línea de código, esta línea de código fue, no solo aplicar a esto. Se establece el estado de nuestro código, significa
que todo lo que se ejecuta después esta línea se ejecute va a realizar la misma función para cada una
de estas líneas de código debajo de él. Está comprobando si
hay un error, vaya al controlador de errores, razón por la
cual en
esta línea de código, esta declaración sigue siendo aplicable. Y si había cientos de
líneas de código en el medio, Dentro de aquí y aquí. Establecer este estado por aquí todavía
va a
hacerlo para que si te encuentras con un
error todo el camino aquí abajo, ya sea esta línea
o algo más, se
puede ver que hay
un desajuste de tipo. Incluso cuando pasas el cursor
sobre el número. Todavía está aplicando esto si hay un error,
pasa por el manejador de errores. Entonces eso es algo importante
a destacar aquí porque podría crear una situación que está
tratando de ser más específica. Entonces ahora voy a deshacer toda
esta situación de go-to. Hagamos esto de nuevo
igual que antes. Y tengo que quitar esto. Digamos la sección dos. Y vamos a decir la sección uno. Entonces vamos a llamar a
esta sección una cosa. Y tal vez estamos haciendo algunas
otras cosas algo no relacionadas pasando aquí en la sección dos. Entonces podría hacer algo como
esto, error de la sección uno. Así que sigamos nuestra
lógica por aquí. Y todo se estrelló. Realmente no sé por qué
todo se estrelló aquí mismo. Vas a ver un
salto rápido a esto en este momento, me voy a dejar en ese choque de
Excel que acabas de ver, todavía no sé
qué pasó, pero voy a dejar
esto adentro para que puedas conseguir el completo experiencia de lo que puede salir mal cuando estás
haciendo desarrollo. No me gusta
cortar estas cosas y pintar una imagen rosada. Entonces no sé por qué
Excel se estrelló en ese video anterior en
medio de escribir, pero esta es una buena razón para
guardar su trabajo con frecuencia. Tuve que volver aquí y reescribir el código que habíamos estado
haciendo hasta ese punto. Entonces ojalá todo
luzca sin fisuras. Y lo que tenemos aquí es donde lo
dejé antes de que
todo se estrellara. Lo que les estaba mostrando
es que podemos tener esta sección uno
y sección dos, que podría tener alguna
otra materia no relacionada. Y empujemos esto ligeramente hacia arriba. Sólo dirá otro
número aquí abajo. Y donde estaba dejando fuera es que podríamos tener algo como esto donde estamos
diciendo en nuestro currículum siguiente. Y entonces podemos decir que la sección uno error ocurrió aquí
como nuestro cuadro de mensaje. Y así si golpeo a F8
y corro por esto, te
mostraré lo que
esto está tratando de hacer. Acabamos de decir en
nuestro currículum siguiente, se ejecuta esto sin ningún tema. Depurar la respuesta de impresión, y luego tenemos nuestra respuesta número dos. Ahora, mientras tanto, si vengo
aquí y
vuelvo a crear este error , crea un error. Detectamos que el
error no es 0, por lo que hay un problema. Y tenemos nuestro cuadro de mensaje se produjo un error de
sección uno. Ahora, si bajamos aquí, tenemos esta otra
línea que va a causar un error en nuestra
sección dos de código. Y acaba de continuar a través
de esta línea. Y somos un error profundo imprimiendo
nuestro otro número como 0, pesar de que esta línea
causó el problema. Nuevamente, no queremos que esto suceda porque aquí mismo
ocurrió un error. Y no queremos que
el usuario piense
que 0 es el número correcto. Y este tema está sucediendo
porque nuestro onResume siguiente. Todavía aplicar a todo lo
que se encuentra aquí en la sección dos está encapsulado en
que esta línea de código todavía se está aplicando
a nuestro código aquí abajo. No queremos eso porque
escribimos esta sección de
esta manera solo para atrapar
nuestro error de sección uno. Entonces hay un par de
cosas que podemos hacer aquí. Podríamos venir aquí. Y de igual manera a lo que
tenemos aquí arriba, queremos decir la Sección dos. Por lo que ahora todavía tenemos esto
OnResume es igual a un eje. Estamos atrapando nuestro error de
sección uno. Entonces atrapando nuestro error de sección
dos por aquí. Así que básicamente estamos usando esta declaración
muy común if comprobando nuestro número de error para crear una captura de
errores más específica. Pero no tenemos otra
situación que pueda surgir, que es tal vez no
quiero que el
manejo de errores ocurra aquí
por cualquier razón. No quiero continuar. Si tenemos un error aquí, quiero el depurador normal. Y así lo que puedo hacer es
después de manejar este tema, puedo decir en aire ir a 0, lo que básicamente significa reanudar el manejo normal de errores
que teníamos antes. Para que pueda eliminar esto, es
decir, antes de hablar
alguna vez del manejo de errores con
esta declaración onResume. Ahora, para esta línea de código, seguimos adelante y
usamos nuestro manejo de errores
if statement there. Pero ahora cuando ejecutamos
esta línea de código, decimos onError ir a 0. Eso significa básicamente reanudó lo predeterminado que
ocurre para
el editor de VB. Lo que significa aquí, ahora
que llegamos a este tema, estamos de vuelta a nuestro depurador
VBA normal con nuestra Continuar y en opciones de
depuración por aquí. Por lo que este goto 0
significa específicamente que significa básicamente deshacer sus declaraciones onError que puede haber tenido antes
y volver a la predeterminada. Recuerdas que go-to
significa, significa saltar a nuestro marcador. Entonces si dijimos algo como
la Sección tres por aquí, Sección Tres Sur aquí abajo, también
podríamos decir, en su próximo error, ir a la sección tres. Este código es bastante confuso porque
estamos diciendo aquí arriba, ir a la sección tres. Vamos a encontrarnos con
el error
aquí abajo y lo ves
salta a la sección tres porque todo
bajo este paraguas está diciendo cualquier tema que vaya
adelante saltar a la sección tres. Entonces esta notación
sería bastante confusa porque esto es todo el camino hasta aquí y está
corriendo por aquí. Podría haber, en este
caso, es realmente fácil, pero podría haber
cientos de líneas de código haciendo estas dos
cosas muy separadas, lo cual no es una mejor práctica. Pero puedes ver
lo que está pasando aquí. Y por qué quería
mostrarte es básicamente este goto, que tiene más sentido saltar
a un marcador. Pero ir a 0 básicamente solo significa
reanudó tu cosa normal. No dice algo como sección o marcador
0 no existe. Esto básicamente significa que el restablecimiento es 0. Y ahora estamos captando
este error como de costumbre aquí, pesar de que no tenemos manejador de
errores aquí arriba. Entonces así es como puedes restablecer y seccionar
tu manejador de errores. Muy bien, y estoy
encendiendo la grabadora por tercera vez sólo para dar seguimiento a que como estaba editando ese video, me di cuenta de que creo que
la razón de ese choque en el medio es porque
estaba en fuga modo. Y puedes ver si
fuiste uno de vuelta a
esa sección donde
Excel se estrelló
aquí en la parte superior. Está en nuestra cabecera aquí. Dice romper entre paréntesis. Eso es porque estamos en
modo corrida y yo estaba cortando y pegando y moviendo código
por todo el lugar mientras
estábamos en modo corrida, mientras estaba en medio de pensar que
iba a ejecutar código. Creo que eso fue lo que
causó el accidente. Eso no siempre sucederá, pero creo que esa es la razón por la que se acaba
de romper en medio de escribir. Entonces hay que tener cuidado
cuando estás en modo de ejecución y
notas el modo de ejecución cuando
estás en la parte superior aquí, creo que mi puntero del mouse
a veces desaparece, pero aquí arriba hay
una ruptura entre paréntesis. Y así cambiar el
código cuando estás en modo de
ejecución puede hacer que el
sistema sea algo frágil. Eso es todo. Quieres asegurarte de etiquetar
eso aquí al final.
40. 1.C.1 automatiza la creación de archivos Txt: Ok. Quería poner, quería armar una serie básica de
lecciones
mostrándote algo de automatización de nuestro sistema de archivos de
Windows por aquí, que ya hemos
hecho algunas demos básicas de crear carpetas, algo que ya hice, pero retrocedo aquí
que voy a tener que seguir junto con es que entro en Google y escribí VBA
crear archivos de texto. Y luego tenemos este enlace a un sitio web oficial de
Microsoft. En realidad, tenemos este código que podemos tomar aquí
para crear un archivo. Así que voy a venir aquí, copiar este código,
pegar esto aquí. Y si voy adelante
y ejecuto esto y golpeo F8, golpeo un error de compilar. Dice variable no definida. Eso es porque de
inmediato estamos usando estos FS y un aquí
como variables objeto. Sabemos que hay variables
objeto porque estamos usando
la palabra establecida aquí. Y por supuesto que
tenemos crear objeto. Acabamos de vendernos
desde esa página web. Entonces vemos que configuraron algunas cosas que no están
funcionando para nosotros. El motivo de eso
es porque tengo Option Explicit
aquí arriba como mi defecto. Si elimino Option Explicit, se
puede ver que estamos bien aquí. En realidad voy a refuerzos. En lugar de correr esto
que habría funcionado, voy a agregar
Opción Placa explícita
en la que tengo una
lección pasada, ¿por qué guardo eso? Y sólo vamos a
declarar estos objetos son tan dimensión FS como objeto en un objeto para que sean declarados
y luego podamos usarlos. Y se puede ver que estamos
corriendo por aquí. Ahora. Veo que estamos creando
un objeto de sistema de archivos aquí. Y luego estamos configurando esto una variable que no es
muy el guión. Pero tal vez llamaré a esto como un archivo TXT para que sea
más descriptivo. Establezca un cambio como que
sea un archivo de texto por aquí. Y luego decimos que estamos creando
un archivo de texto que fueron utilizados para abrir un bloc de notas con el
que probablemente estés
familiarizado. Sólo va a poner
esto en C drive. Y en realidad no quiero hacer eso y tener mi
C drive hasta aquí. En cambio, tengo esta
subcarpeta para todas mis lecciones donde he creado una
carpeta llamada archivos demo. Entonces aquí está mi carpeta por aquí
que tengo a la izquierda. Y tenemos el
camino completo por aquí. Parece que escribí
algo incorrectamente. Así que solo voy a
arreglar mi camino aquí y
tengo mi unidad C a través mi túnel de carpetas para demos de
Skillshare y
luego nuestro archivo de prueba aquí. Por lo que ves tenemos este comando
create text file, que luego toma una ruta que
incluye nuestra ruta del bloc de notas, test file.txt es igual a true. Y luego como ejecutamos esa
línea de código aquí, se
puede ver que tenemos
nuestro archivo de texto. Vamos a decir línea correcta, esta es una prueba con
nuestro archivo de texto. Y vamos a hacer cerca. Así que ahora si volvemos aquí y vemos que algo aparezca, lo cual espero que lo haga. Así que déjame venir aquí y hacer un refresco y nada
sigue ahí. Por lo que debí haber
cometido algún error. Vuelvo aquí y
estoy revisando mi camino. Estamos en demos de Skillshare. Y lo que lo eliminé antes fue solo que
estropeé mi patrón. Debí habernos arrastrado. Si lo tienes rebobinado y probablemente
verás
lo que hice mal, pero hice algo y
estropeé mi camino aquí. Entonces no tengo mi
subcarpeta de archivos demo. Ahora si llego a F8, línea
derecha, cierro, y aquí
estamos, tenemos nuestra prueba file.txt desde nuestro camino
completo por aquí. Y cuando hacemos doble clic en él, podemos verlo dice
Esto es una prueba. Y eso es porque escribimos esta línea al
archivo de texto. Esta es una prueba. Ahora esto es un poco largo
y difícil de leer, así que sólo voy a hacerlo un
poco más eficiente. Entonces voy a decir camino
fronterizo como una cuerda. Y diremos que ruta de carpeta equivale a escapar ahí solo para
salir de eso por un segundo. Y voy a dar mi ruta de carpeta
completa aquí. Voy a cortar eso en realidad. Sólo vamos a
dividir estas cosas. Entonces ahí está mi ruta de carpeta. Hagamos el nombre del archivo como cadena. Lo haremos con nombre de archivo
equivale a archivo de prueba que TXT. Y luego diremos, en realidad no
debería tener esto por
aquí y hacer un error tipográfico allí. Enviará dimensión, camino
completo como cadena, y diremos camino completo
equivale a nuestro camino fronterizo. Y combinando eso con
nuestro nombre de archivo aquí, si quieres comprobar, vamos a
hacer una impresión de debug aquí. Diremos camino completo
solo para que podamos verlo. Y luego en este gigantesco blob
de texto que tenemos arriba, podemos escribir nuestra encuesta. De esa manera. Acabamos de
dividir las cosas. Será más fácil de manejar a
medida que pasamos por esto. Vamos a probar esto. Golpearé
ruta de carpeta F8, nombre de archivo, y luego nuestra ruta completa es
combinarla ambas juntas. Tenemos nuestro camino completo
por aquí, archivo TXT. En realidad podríamos
tener un problema aquí porque ya tenemos
un archivo llamado así. Y no parecía importarle. Entonces eso es interesante. Pero si eliminamos esto,
volveremos a ejecutar esto. Y aquí vemos que nuestro archivo de
prueba aparece. Y sólo para
mostrarles, si escribo dos en nuestro nombre de archivo aquí,
cuando ejecutamos esto, nuevo, aquí está nuestro
segundo archivo de prueba. Entonces aquí en este primer video, acabamos de sacar el código de nuestra búsqueda básica de
Google de los
documentos oficiales de Microsoft y lo adaptamos un poco para que estemos creando
un archivo de texto con algún código. Ahora, similar a lo que
te he mostrado antes que
podemos hacer con carpetas. Hagamos algo
bastante simple aquí. Tomemos nuestro nombre de archivo. Voy a cortar esto y mover nuestra
declaración de nombre de archivo aquí abajo. Y la razón por la que estoy haciendo eso, y sólo voy
a comentar esto. El motivo por el que moví
esto aquí abajo es para que esté separado. Y puedo envolver esto en un bucle. Y puedo decir porque
equivale a uno a diez, sangría este próximo pi. Y como estamos usando yo aquí, tengo que declararlo, lo
declararé alto como a lo largo. Y luego me voy
a llevar este número. Y en nuestro nombre de archivo, voy a usar nuestra variable yo aquí ya que
va de uno a diez. Y ahora si hago esto, hecho, aclararé esto primero. Le pegaremos a jugar. Tenemos camino no encontrado. Eso es porque muevo
este nombre de archivo
aquí abajo y no leí
declarar nuestro camino completo. Voy a cortar
nuestro camino completo aquí. Entonces cada vez que
cambiamos el nombre del archivo, necesitamos cambiar nuestra ruta completa también porque
utiliza nuestro nombre de archivo. Así que voy a parar. Volveremos a golpear play. Y aquí vemos que uno a
diez se
crean automáticamente a medida que incrementamos a través de este bucle,
uno a diez. Entonces eso es todo por éste. Seguiremos construyendo sobre
esto, en el siguiente.
41. 1.C.2 Automate Rename Files Fix: Para esta próxima lección, ahora que hemos creado
algunos archivos por aquí, algunos archivos de texto básicos, te
voy a mostrar
cómo VBA puede cambiar el nombre un archivo y automatizar el
cambio de nombre de un montón de archivos. Entonces lo que he preparado aquí
ya es la notación para cambiar el nombre de un archivo es
escribir la palabra nombre, luego la antigua ruta del archivo, la palabra As, y luego
la nueva ruta del archivo. Y así como aquí abajo, nuestro nombre de archivo está todo el
camino a la derecha y un camino completo es nuestro nombre de archivo más nuestra ruta de carpeta por aquí. Ya tengo este
preescrito para mantener estos videos
un poco más rápidamente. Pero por supuesto
podrías pausar y ver todo este código línea por línea si
realmente quisieras usarlo con nuestra línea de código que
cambiará un nombre. Ya ves que ya he preparado nuestras variables con
este contenido aquí arriba. Y luego el
comando real que va a cambiar el nombre del archivo es el
nombre nuestra variable, que es nuestra ruta completa actual
ya que son ruta completa nueva. Aquí lo estoy construyendo y
le pegaremos a F8. Por lo que pasamos a través de este código. Tenemos nuestra ruta de carpeta principal, que es la que
tuve en nuestro último video aquí que tiene estos
archivos de texto que creamos. Estoy tomando nuestro nombre de archivo actual, que es testfile uno, que es este archivo aquí, filename new, que
es
a lo que quiero cambiar nuestro nombre de archivo. He declarado estas
variables para mayor claridad, donde una es la
ruta completa del archivo actual, que es ésta la que existe. Y entonces lo
que quiero que cambie también, porque quiero poder usar estas variables en nuestro comando de una sola línea
que tenemos por aquí. Por lo que ahora que tenemos nuestro nombre de archivo actual y nuestro nombre de archivo nuevo, podemos crear nuestras
dos variables para el camino completo actual
y completo nuevo. Y luego ejecuta nuestra
línea de código aquí. Eso es en realidad lo que
crea la función. La realidad es
que si miras esto hacia arriba, puedes escribir aquí toda la cadena de ruta
completa, y luego todo el nuevo
nombre que quieras aquí. Y haz todo lo que hice aquí
en una sola línea de código. Pero esto es más claro
y
nos va a configurar para nuestro siguiente paso que te
voy a mostrar en un minuto. Le pegaré a F para ejecutar esto. Creo que toma un segundo
refrescarse y
verás nuestro nombre de archivo
aquí acaba de cambiar. Por lo que ahora además de
crear carpetas, el último video que te
mostré cómo
puedes crear archivos de texto. Y ahora se puede ver cómo
estamos cambiando los nombres de archivo. Y en este ejemplo, esta línea de código
funcionará para cualquier tipo de archivo. No sólo tiene que ser
para archivos de texto. En nuestra última lección donde estamos creando estos archivos de texto. Esto no necesariamente funciona
para archivos más complicados, como si tienes otros
archivos de Excel o documentos de Word. Pero sólo para mostrarte, cuando vengo aquí, solo
voy a crear
un nuevo documento de Word. De hecho, solo tomaré aquí todo
este nombre de archivo, incluido el DOC ex. Solo recuerda que la ruta del archivo sí incluye nuestros nombres de
extensión aquí. Es posible que no tengas
estos nombres de extensión en tu computadora aquí. La forma en que tu Windows
está configurado de forma predeterminada. Siempre les muestro. Y si vienes por aquí
en tus opciones de carpeta, solo
digo que selecciones esta marca de verificación donde estás mostrando las extensiones de
nombre de archivo. Pero tus rutas de archivo
en realidad necesitan incluir tu nombre completo y cómo Windows maneja los archivos y
normalmente lo oculta de ti. Por lo que volviendo aquí,
se puede ver nuestro archivo actual. Hagámoslo este documento de Word que acabamos de crear y vamos a hacer nuevo nombre dot doc x aquí. Así que ahora a medida que
pasamos de nuevo, estamos haciendo lo mismo. camino actual debe ser el camino completo para nuestro
documento de Word que acabamos de crear. Y cambiaremos el nombre ahí. Se tarda un segundo en refrescarse. Y ya ves ahora tenemos nuestro nuevo nombre de archivo cambiado automáticamente por
aquí para nuestro documento de Word. Algo más a tener en cuenta es
que ya que tu extensión es una parte clave del archivo
y tu extensión en Windows te indica
tu tipo de nombre de archivo. Si fui e hice
algo como esto, di que nombre uno y le
diré nuevo nombre a ese
texto por aquí. Entonces vamos a tomar
este documento de Word y vamos a
cambiar su nombre. Voy a golpear play aquí y solo lo ejecutaré
todo el camino. Hemos cambiado el
nombre de este archivo por nuevo nombre uno textos. Y entonces realmente cambiamos
el tipo de archivo aquí, que en realidad no es
lo que queremos hacer, porque eso potencialmente podría
hacer que pierdas datos. Sólo por ejemplo, este
archivo de texto dice, esto es una prueba. Si vine aquí y
cambié nuestro nombre de archivo, volvamos a cambiarlo a un documento de
Word dot x hit F5. Así que en realidad estamos
manteniendo el mismo nombre, pero ahora
lo he cambiado de nuevo a un Doc X entre mezclado aquí. Pero si hago doble clic en esto, ves que nuestro texto se ha ido porque a medida que
cambias los tipos de archivos, realmente
puedes estropear un poco
las cosas. Entonces tomaremos nuestro
doc x cuando
lo cambiemos a un archivo Excel,
por ejemplo, play. Al cambiar la extensión
junto con el nombre del archivo. Estamos cambiando intrínsecamente el tipo de
archivo al mismo tiempo. Y ya ves ahora estamos
recibiendo incluso un error porque se da cuenta de que algo
ha salido terriblemente mal. Este archivo no se supone que sea un archivo de Excel que ni
siquiera se abrió. Ese archivo que acaba
de aparecer fue en realidad otro archivo que tengo por aquí donde estoy
escribiendo mi código. Pero ya no está dispuesto a
abrir este archivo porque en segundo plano
sabe que esta cosa no está destinada a ser un archivo de Excel. Simplemente lo forzamos cambiando la extensión en el archivo cuando estamos jugando
con el nombre del archivo. Entonces eso es
una especie de tangente aquí, pero solo algo de lo
que tener en cuenta. Lo siguiente que
quería mostrarte aquí es que vamos a hacer
algo de automatización. Vamos a borrar todos estos archivos
de nuestra lección anterior. Tenemos esta
subrutina que usamos para crear todos estos archivos con
un bucle, de uno a diez. Eso es hasta darle un poco a esta
cosa. Haremos 20,
así que llenará la pantalla y se verá elegante aquí, ¿se han deshabilitado las macros? Así que permítanme intentar
volver a abrir este archivo por aquí muy rápido
porque necesitaba hacer clic en Habilitar contenido
aquí arriba para poder ejecutar nuestras macros, volver a nuestra
carpeta en la que estamos trabajando. Somos el módulo uno. Entonces aquí tuvimos nuestra subrutina
de la última lección donde creamos todos estos archivos de texto y cambiamos nuestro bucle a 20. Y de inmediato
Aquí hay 20 archivos de texto que se crearon automáticamente. Ahora, tenemos nuestra subrutina
para cambiar el nombre de archivos. Sólo estamos repasando, Hagamos lo mismo que hicimos
al final del último video, donde vamos a cortar nuestra
declaración de nombres de archivo. Y los vamos a
mover aquí abajo. Entonces usamos estos nombres de archivo
para crear nuestro camino completo. Y eso está enterrado en un bucle
donde vamos dimensión I como un largo es igual a
uno a 20, sangría esto. Siguiente i Así terminamos nuestra notación de
bucle aquí. Y en lugar de estos nombres aquí, podemos hacer un archivo de prueba, uno que TXT equivale a nuevo nombre,
uno, ese Px Py. Y realmente quería
volver aquí y reemplazar
uno por i variable. Voy a copiar y pegar
esto por aquí para que cada iteración del bucle
vamos a estar cambiando
nuestro nombre de archivo. Entonces TextFile uno. Y luego la siguiente prueba de bucle
alrededor de 2345 a 20. Y también tenemos nuestro nuevo
nombre para ellos. Y corremos este código
una y otra vez. Dónde ves como yo golpeo F8, tenemos aquí nuestras viejas y
nuevas rutas de archivo. Ejecutamos esta línea,
archivo no encontrado. Así que volvamos aquí. Veamos cuál es nuestro camino
actual. Si vengo aquí para tomar
esta variable y depurar, imprima nuestra ruta de archivo actual. Dice que no tenemos este archivo, prueba archivo un punto TXT. Eso es porque escribí archivo de texto cuando realmente es
archivo de prueba aquí mismo. Así que vamos a arrastrar esto de nuevo hacia arriba. De hecho, voy a parar y
empezar a correr de nuevo. Ahora cuando llego a esta línea, acabamos de cambiar nuestro
archivo de prueba uno a nuevo nombre uno. Hacemos un bucle a través de
declarar en nuevos caminos, que realmente
lo único que está cambiando es uno se convierte en un dos. Y hay nuevo nombre dos
para el segundo archivo. Y sólo voy a golpear a F5 y correr esto todo el camino
a través de uno a 20. Desde su vigésimo orgullo. Toma un segundo para que se ejecute. Y ahí está. Ha renombrado todos nuestros archivos, todos los 20 archivos, con un
clic de un botón. Así es como puedes
cambiar el nombre de un archivo y un caso de uso que
realmente podrías tener es por ejemplo, podrías tener una
carpeta gigante llena de archivos es, digamos que nuestro
archivo actual se llama nuevoName, que es lo que
en realidad son ahora mismo. Y luego, por ejemplo, mi nuevo nombre de archivo podría ser algo así como el nombre de archivo actual. Y voy a simplemente, escribiré mis iniciales por aquí, guión. Así que ahora en realidad solo estoy usando la misma variable es
mi nombre de archivo actual, y mi nuevo nombre de archivo está usando el nombre de archivo actual
más algo más. Para que puedas manipular el nombre de archivo actual para
crear tu nuevo. Así que ahora si golpeo F5
y corro esto fuera, parece que sólo
tengo un error tipográfico por aquí. Golpeé a F5 y ejecuto la celda ahora. Y ahora he anexado S T al inicio
de todos estos expedientes. En algunas situaciones,
es posible que esté necesitando hacer una actualización de
muchos archivos diferentes. Y viste que esto corrió
muy rápido por 20 y esto funcionaría si
tienes miles de archivos aquí. Puedes lidiar con ello.
Puedes hacer todo esto con algún código que en realidad no es un cabello muy complicado o largo. Y luego ejecuta todo esto
con un clic de un botón.
42. Datos de mudanza: crea la Macro de registro de formulario: Ya que vamos a hacer un tutorial sobre mover datos, quiero crear un caso de uso sencillo para una plantilla por una razón por la que vamos a necesitar mover datos. Entonces lo que voy a crear aquí es un formulario de compra. Entonces solo voy a redactar algo para empezar y luego vamos a empezar a evolucionar a través del curso de este proyecto. Entonces primero voy a crear aquí una forma muy básica. Crearemos artículo, cantidad y precio por ahora hasta que pensemos en más cosas que añadir a él. Vamos a darle el aspecto de una forma aquí. Estoy golpeando Control C para copiar control V para pegar. Si mantengo Control, puedes seleccionar varias celdas a la vez. Dondequiera que haga clic. Y luego voy a crear una frontera aquí. Ahora vamos a crear una pequeña tabla de datos para que estos datos vayan. Y me gusta usar el formato predeterminado fuera de Excel solo para que esto se vea un poco mejor, pero no tener que preocuparme demasiado por hacer selecciones aquí. Y así ahora tenemos un formulario básico de usuario. Empecemos a llenarlo. Entonces digamos que aquí tenemos un lápiz. Vamos a pedir diez piezas de ellas. Y por un precio de $1. Convertiremos esto en un letrero de dólar aquí. Y así aquí ahora solo tenemos el marco para la plantilla. Vamos a empezar con. Lo primero que quería hacer es solo mostrarles los conceptos básicos de grabar una macro, que repasamos en nuestra última lección. Pero podemos usar esta pestaña Desarrollador. Ir a Grabar macro, dará clic en Grabar macro aquí. Simplemente lo dejaremos como el nombre por defecto. Y ahora estamos grabando lo que hagamos en la pantalla. Entonces voy a dar clic en la celda del ítem, hacer Control C, pegar control V. Y solo haré esto por cada uno de estos campos. Y hemos movido datos de nuestro formulario a nuestra mesa, ni
siquiera llamaremos a esto la tabla de compras. Ahora bien, si vamos a dejar de grabar, tenemos un fondo de coordenadas de nivel macro. Para ver la macro que acabamos de grabar. Podemos hacer clic en este botón de Visual Basic. Y el módulo 1 es el módulo predeterminado que se creó para la grabación. Y luego aquí está el macro uno. Simplemente te muestro otra forma de llegar a esto es que puedes hacer clic en estos botones de macro, que te muestra todas las macros que hay en la aplicación de Excel que está abierta en este momento. Puede ejecutar la macro o puede hacer clic en Editar. Y si haces clic en Editar, te llevará al código aquí. Echemos un vistazo a esta macro que creamos. Intentemos ejecutarlo. Y así sólo voy a dividir estas pantallas para que podamos verlas un poco mejor. Simplemente aclararé estos datos aquí. Sin siquiera mirar el código fuente. Podemos ir a Macros y tenemos macro uno y vamos a dar click Ejecutar. Y se pueden ver todos los datos del formulario entraron en nuestra mesa por aquí. Entonces, vamos a aclarar esto. Ahora que tenemos nuestro código sacado aquí, puedes golpear a F8 para pasar por cada línea de código uno por uno. Y así si estoy resaltado, mi cursor está en esta macro. Golpeé a F8, y luego puedo pasar por cada línea y podemos ver qué está pasando aquí. Vamos a seleccionar rango A5. Así que esa es la dirección del celular, un cinco por aquí. Vamos a copiarlo. Vamos a seleccionar a I3 por aquí. Y luego lo vamos a pegar. Y entonces sólo va a hacer eso una y otra vez para cada uno de los tres campos. Y luego se puede ver incluso grabada cuando
escribí en el encabezado de la tabla de compras de la tabla aquí. Y así una cosa es que solo pasamos por este tutorial. Voy a hacer que esto sea un poco más conveniente para probar. Voy a añadir un botón aquí a nuestro formulario. Bueno en realidad estoy asignando la macro aquí, así que voy a asignarla a macro uno por ahora tendrá que
cambiar eso más adelante mientras cambiemos los nombres de nuestras macros, vamos a asignarla a macro uno. Y llamaremos a esto presentar. Y ahora si borro los datos y presiono Submit, puedes ver nuestras carreras de macro.
43. Datos móviles: nombra los Rangos: Mencioné en una lección anterior que no me gusta usar direcciones celulares al hacer macros. Y con eso, me refiero a cómo esta macro, cuando la grabamos, usó direcciones celulares como un cinco y C5 aquí, y las pega a i3 y J3. Y la razón por la que no me gusta eso es por muchas razones diferentes. Pero la más obvia es si hago algo como cortar y pegar esta mesa en otro lugar o reubicarla. Y luego vuelvo a ejecutar esta macro. Se puede ver que todavía utiliza estas direcciones celulares absolutas aquí y ya no funciona nada, o al menos no funciona correctamente. Tenemos que entrar en esta macro y volvemos a actualizar las direcciones celulares. Y el problema es que entonces podríamos simplemente mover la mesa nuevo y estamos constantemente evolucionando estas herramientas a medida que vamos. Y así esto requiere mantenimiento y actualizaciones constantes. Entonces lo que vamos a hacer aquí es que vamos a limpiar un poco
esto y luego cambiarlo. Entonces no estamos usando las direcciones celulares y en su lugar dando nombres al rango que se moverá con estas celdas. Y eso tendrá más sentido a medida que pasemos por este ejemplo. Entonces una cosa que voy a hacer ahora es simplemente quitar esta parte donde creamos el nombre de la tabla porque accidentalmente grabamos que realmente no queríamos. Y así vamos a seguir con este concepto por ahora. Simplemente vamos a seguir creciendo en este concepto y cambiándolo para llegar a ser más avanzados a medida que avanzamos. Entonces tenemos el celular A5 aquí, y no quiero usar un cinco por el problema que mencionamos. En cambio, voy a darle un nombre a esta celda y lo
recordarás si miras nuestras lecciones anteriores aquí, voy a llamar a esta celda, en realidad lo llamaré elemento de formulario. Y luego cantidad. Simplemente mantendré la misma idea. Y puedo simplemente escribirlo en este campo de dirección superior izquierda aquí. Y en realidad quiero que esto se forme cantidad y precio de forma. Y puedes confirmar que esto funcionó correctamente es cuando haces click sobre estos campos, puedes ver el nombre de la celda ya no dice A5, C5. Da el nombre el rango. Y puedo confirmarlo aún más yendo a Formulas Name Manager, y verás los nombres que creé para cada uno de estos campos. Y así solo puedo demostrar que esto ahora funciona para nuestra forma a pesar de que aún no hemos manejado la mesa. Entonces si hice algo como cortar y pegar es mover estos hacia abajo. Simplemente copiaré estos formatos para arreglarlo. Entonces esta macro original dice A5. En realidad ya no quiero que esto diga A5. Yo quiero que esto diga forma. Lápiz. Nuevamente, C5 aquí es ahora cantidad extranjera 8, que era nuestro precio, se forma precio. Y así vamos a ejecutar esto. Tenemos un error aquí probablemente porque hice un error tipográfico en alguna parte. Forma de rango, lápiz seleccionar. Y esto se llama ítem Forum. Si estás viendo y siguiendo, tal vez
te hayas dado cuenta de que mientras yo estaba escribiendo esto y vamos a correr esto. Y ves que fue capaz de encontrar nuestros datos fuente por aquí en nuestra forma a pesar de que lo habíamos movido. Y se puede ver que lo podemos mover de nuevo a donde estaba aquí arriba. En realidad es una fila más alta. Y podemos volver a ejecutar esto. Y la macro confinó los datos de origen porque le
dimos un nombre y este nombre se mueve con nuestro corte y pegado. También se moverá si hacemos algo como insertar una fila, se pueden
ver los formatos duplicándose aquí. Solo estoy copiando y pegando estas celdas genéricas para arreglarlo. Y estoy copiando y pegando celdas en blanco por aquí para despejar esos y golpear someter. Y se puede ver que está funcionando de nuevo. Otra cosa pequeña que podrías notar como nota al margen es que el formato de las celdas de origen, porque estamos usando un control C copiar y pegar cuando grabamos la macro está trayendo el formato, que incluye el fronteras de las celdas también. Y así hagamos esto para la mesa también. Por lo que dejamos de pegar nuestros datos aquí arriba en nuestra grabación original. Esto va a ser un poco más engaño. Lo más obvio que podríamos hacer aquí es simplemente
nombrar a cada una de estas celdas de destino en la tabla. Pero eso va a hacer que tengamos muchos nombres. Entonces imagínense que esta era una tabla de 20 columnas, o las filas van a seguir yendo más abajo a medida que reunimos datos. No se quiere dar nombres a todas esas cosas. Entonces voy a hacer algo un poco diferente aquí. En cambio, voy a elegir el campo superior izquierdo. Por lo general elijo la primera columna y luego tomo el encabezado de eso como la parte superior izquierda, lo que llamo el punto de anclaje. Y le voy a dar un nombre en su lugar. Entonces voy a llamar a esta mesa compras. Y así ahora a esta celda de aquí se le llama compras de mesa y esto es un ancla. Y puedo hacer referencia a estas otras celdas basadas en este ancla siempre cuando esta tabla siempre se esté moviendo con esta celda de anclaje. Te mostraré lo que quiero decir aquí. Aquí donde nuestro artículo va a entrar a la celda I3. En este caso, realmente queríamos mover que esta parte de la mesa y la mesa esté aquí abajo. Ahora, sí creamos un nombre para nuestras compras de tabla celular de anclaje. Entonces en lugar de I3, que es donde está terminando la información cuando grabamos nuestra macro, vamos a elegir nuestra celda de anclaje, que es compras de tabla. Y luego vamos a utilizar esta función de desplazamiento, que también cubrimos en nuestros tutoriales anteriores, donde puedo decirles la fila y columna que quiero ser compensada por la celda. Entonces si digo son desplazamiento real es uno, eso significa que es esta celda y luego una celda hacia abajo, y luego nuestro desplazamiento de columna, si fuera una, sería una celda a la derecha. Pero en cambio, vamos a ir justo debajo de él ya que estamos trabajando en el artículo y nuestro offset es seleccionar aquí. Por lo que nuestro desplazamiento es nuestra celda de anclaje hacia abajo una fila y escribir 0 columnas. Y vamos a seleccionar eso. Y al igual que nuestra grabación, dejaremos esto por ahora donde pegamos o artículo. Y luego por cantidad, nuestra selección en lugar de J3 reemplazará esto. Y probablemente puedas ver adónde vamos con esto. Nuestra columna sólo va a estar por encima de una a la derecha. Entonces agrega uno ahí. Y luego k3, que está aquí arriba. Queremos bajar eso a esta celda. Y de nuevo, vamos a usar el ancla. Entonces sólo vamos a pasar a la derecha dos columnas y bajar una fila en su lugar. Ahora tenemos la selección de i1. Ahí fue justo cuando creamos el encabezado de la tabla. Y así ya no necesitamos eso. Sólo vamos a eliminar esto aquí. Y así si lo hicimos correctamente, lo que deberíamos hacer es tomar los valores de cada una de estas tres celdas y luego pegarlos en cada una de estas celdas basándose en el ancla de la tabla. Entonces, vamos a ejecutar esto. Y así ves que eso funcionó. Probemos esto otra vez. Entonces voy a cortar y pegar y mover esta mesa aún más allá aquí abajo, puede ver nuestra celda de anclaje se mueve con ella, compras de mesa. Y así puedo despejar esto de nuevo ahora y volver a intentarlo. Y nuestros datos siguen moviéndose con nuestros rangos nombrados. Y entonces sólo voy a seguir adelante y aclarar esto.
44. Transferencia de datos: simplifica el código grabado: Ahora que hemos actualizado nuestra herramienta, así que hemos nombrado rangos y podemos mover nuestros datos y sentirnos seguros de que la lógica todavía va a funcionar. Lo que quiero hacer es simplemente limpiar la funcionalidad básica aquí. Cuando grabamos macros, es un poco ineficiente porque registraba cada acción que hacemos. Pero como estamos trabajando directamente con el código fuente, en realidad
podemos recortar algunos de los pasos que hacemos cuando trabajamos manualmente con Excel. Y así por ejemplo, cuando estamos seleccionando la celda del elemento de formulario, que está por aquí y luego copiándola. Se puede ver primero lo estamos seleccionando y luego
golpeo Control C y hago la copia de la selección. En realidad puedo cortar esto y convertirlos en uno donde no tenga que hacer clic en la celda ya que puedo referirme a la celda del elemento del formulario, solo
puedo copiarlo directamente en una línea sin seleccionarlo y luego decir, quiero copiar lo que sea Yo he seleccionado. Y así podemos recortar estos. Y sucede lo mismo para nuestro destino, donde vamos a seleccionar esta celda, que es lo que dice esta línea. Y luego en nuestra hoja activa vamos a pegar en lo que sea Así hemos seleccionado. Debería poder realmente entrar aquí y solo escribir pasta. No estoy seguro si el ritmo realmente va a funcionar igual. Entonces solo voy a comentar esto y comprobar si esta actualización funciona para
este campo de un solo ítem. Vamos a aclarar esto y luego vamos a pegarle a someter. Y se puede ver ritmo en realidad no funcionó del todo tan bien. Ahora que nos hemos dado cuenta de que por ahora, sólo
voy a golpear Undo y luego dejar el pegado aquí por ahora vamos a volver a esto. Me gustaría dejar en estas pequeñas pruebas que estoy haciendo en el tutorial. Por lo que se llega a ver el proceso completo aquí. Para el ejemplar. Vimos que ese trabajo y sólo tenía un problema con el pegado. Entonces volvamos a ejecutar esto solo para ver si eso lo arregló. Entonces ves esta referencia donde elegimos el ítem del formulario terminó directamente una copia que funciona y recortamos algunas de las ineficiencias de seleccionar primero la celda. Entonces hagamos lo mismo aquí. Por lo que forma cantidad. Vamos a venir por aquí. En lugar de seleccionarlo, sólo
diría copia de punto. Y luego podemos eliminar esto por aquí para el precio del formulario, podemos quitar el selecto con solo el rango y copiar. Sólo vamos a dejar esto aquí. No estoy seguro si necesitamos esto ahora mismo, vamos a probar eso. Pero este es el equivalente de golpear a Escape cuando golpeas copia. Entonces ven cómo tenemos aquí las líneas punteadas en movimiento. Esto está golpeando Escape. Entonces eso es lo que se grabó aquí automáticamente cuando estamos grabando nuestra macro. Entonces probemos esto. Ahora ves que aquí tenemos un error y está diciendo que tenemos un error cuando estamos tratando de ritmo. Me estoy dando cuenta de que la razón de eso es porque no tenemos nada en nuestro copiado portapapeles en este momento. Si regresaste y miraste cómo reorganizamos estas líneas de código cuando lo hice más eficiente, es la línea de copia estaba realmente aquí. Aquí es donde estaba la antigua línea de copia con selección, esa copia. Y nosotros movemos esto y ya ves porque éste, perdón, eso no me gustó. Esta no es una línea de código válida aquí porque esta línea es la equivalente a golpear a Escape. Eso fue similar a hacer clic en este campo golpear Control Copy, golpear Escape, y luego tratar de pegar aquí porque se había escapado con esta línea de código, entonces no hay nada en el portapapeles. Y entonces lo que realmente necesito hacer es ver si incluso necesitamos esto. Entonces probemos esto. Podemos ejecutar esto paso a paso para que podamos ver qué está pasando aquí. Ya ves que estamos copiando o pegando copiando aquí vemos la línea punteada y golpeamos la hoja activa y pegamos. Aquí vamos a golpear el mismo problema y ya verás a qué me refiero. Aquí tenemos el precio y el portapapeles. Y luego cuando ejecutamos esta línea, anula la selección de la copia del portapapeles. Y así nos vamos a encontrar un error ahí mismo, justo aquí en realidad cuando tratemos de pegar. Y así volveremos aquí. En realidad puedes arrastrar esta flecha hacia arriba para volver a donde estábamos antes. Ahora tenemos precio en el portapapeles otra vez. Y creo que en realidad podemos eliminar esto porque inherentemente anular la selección de nuestra copia cuando copiamos algo más. que no tengas que hacer el equivalente de golpear a
Escape para sacar algo de tu portapapeles. Podemos simplemente saltarnos esa línea por completo. Y entonces tenemos algo trabajando aquí. Lo que estamos viendo en realidad es porque no
tenemos esa línea de código que anula la selección de nuestro portapapeles. Se puede ver que esto sigue activo a pesar de que nuestras macros terminaron por completo. Entonces si golpeo deshacer aquí, limpiaremos esto. En realidad sólo moveremos esto hasta el final. Y ahora ejecutaremos este paso a paso solo para que realmente puedas seguir adelante ahora que estamos editando código manualmente. Ahora en lugar de solo usar las macros pregrabadas, puedes ver este código personalizado que creamos, cómo se ejecuta paso a paso. Y así ahora le pegaré a F8. Pasamos por él, copiamos elemento, lo
pegamos en nuestra celda, y hacemos lo mismo por tres campos. Y luego ahora que terminamos, le
pegamos a Escape para despejar nuestro portapapeles.
45. Datos móviles: solo guarda valores: Otra cosa pequeña que quiero repasar es sólo porque estamos usando una copia y pega aquí. Ya viste antes que estamos moviendo las fronteras hacia nuestros campos aquí. Y eso realmente no nos importa porque se ve bien en este formato, pero no siempre es algo que queremos. De hecho, muy a menudo solo vas a querer los valores y no todo el formato de los campos de origen. Entonces lo que queremos hacer es hacer el equivalente de pegar sólo los valores. Solo para mostrarte lo que podría salir mal aquí, solo
voy a despejar estas celdas, incluyendo el formateo y mostrarte que si
hice algo así como tener esta celda se resalta. Cuando ejecutamos esta macro, todo
el formato de la celda se mueve por aquí porque es el equivalente a hacer una copia y pegar. Entonces voy a despejar esto. Vamos a aclarar estos de nuevo. Voy a traer esto de vuelta a blanco. Lo que quiero hacer ahora es básicamente hacer de esto el equivalente de una copia. Y luego pegar el botón derecho y luego pegar especial. Aquí están estos atajos. Si tienes que pagar especial, lo
verás realmente escrito y pegar valores. Si esto se destacó. Ya verás que si hicimos esto y fuimos a pegar especiales y valores, que sólo se mueve el valor y no el formateo de la celda. Y de esa forma podemos controlar el formato de esta tabla sin sobrescribirnos por el formato de nuestros datos fuente. ¿ Cómo vamos a hacer eso es actualizar estas líneas de código para pegar en lo que es el equivalente de un valor paga, más bien sólo una copia y pegar típica. En realidad no tengo esa notación memorizada. Entonces como en mis anteriores tutoriales, no
quiero simplemente buscar eso y tener un bloc de notas por aquí y escribirlo. En cambio, quiero mostrarte el proceso que
puedes usar para encontrar información si no la conoces. Y no lo muestro en estos tutoriales. Entonces lo que voy a hacer es simplemente ir aquí a Google y voy a escribir VBA, pegar valores especiales solamente. Y así si voy por aquí, puedes encontrar notación y estos sitios web, solo
estoy navegando rápidamente a nuestra respuesta. Puedes ver puedes tomar un rango y luego dice Pegar Especial y luego Pegar Valores. Y esto parece ser una propiedad de un rango. Entonces probemos este código. Esta es nuestra gama por aquí. Tenemos un desplazamiento en ese rango, pero esto sigue siendo considerado un rango. Por lo que vamos a quitar este selecto y hacer un pegado especiales. Tenemos un periodo extra aquí. Y luego con esto, en realidad
podríamos comentar esta línea porque creo que ya no la necesitamos. Entonces probemos esto. De hecho, lo pegaré aquí porque ahí es donde
tenemos nuestra celda de cantidad destacada. Y vamos a probar esto. Despejaré esto, Se somete. Y ahí tienes. Ya ves que pegamos valores aquí y el formato de la celda resaltada no se movió. Y lo haré por la última celda aquí, sólo por el precio. En realidad ya no tengo esto en mi portapapeles, así que copiaré de esta otra línea arriba. Y entonces sólo podemos despejar estas líneas. Y aquí ahora ves como estamos haciendo actualizaciones manuales, nuestro código se está volviendo cada vez más eficiente, lo cual es la mejor práctica que queremos hacer. Cuando grabamos la macro. Tenía muchos pasos extra. Cuanto más podamos simplificar el código en sí, más fácil será mantener nuestro código en el futuro. Entonces probaremos esto una vez más ahora que tenemos todas nuestras actualizaciones, ves el precio de autoevaluación aún tiene nuestro formato aquí. Entonces lo aclararé por completo. Qué presentar. Y ahora tenemos justo los valores que se están moviendo aquí. Precio, todavía queremos estar en notación en dólares para que
podamos hacer este campo en sí mismo y campo contable. Y va a mantener ese formato en el futuro ya que le agregamos diferentes valores. Entonces aunque cambiemos esto a un dólar 50, podemos golpear Submit y verás que se actualiza en él conserva su tipo de celda contable.
46. Transferencia de datos: sin la copia y la pasta: Hasta ahora, lo que hemos estado haciendo es comenzar con nuestra línea de base donde
grabamos una macro e hicimos una copia y pegamos en estas celdas. Incluso esto es ligeramente ineficiente. Estamos grabando macros, básicamente lo estamos haciendo de la manera en que
un usuario regular o una persona sentada frente a su computadora movería los datos. Porque tenemos acceso al código directamente en VBA. En realidad no tenemos que correr las cosas de la manera en que
los humanos sentados frente a la computadora haciendo clic con el ratón y el teclado correrían las cosas. Entonces en este ejemplo, te
mostraré lo que quiero decir con eso. Entonces nuestro proceso aquí es básicamente copiar cada campo en nuestro formulario y luego pegarlo a nuestra mesa. En realidad no necesitamos hacer eso. No necesitamos hacer una copia y pegar. Y luego lo que hemos hecho antes con un pegado especiales para retener nuestro formato. En cambio, porque tenemos acceso a estas variables directamente. Tenemos este campo por aquí siendo compras de mesa con el offset. Debido a que tenemos esta referencia de este campo, en realidad
podemos olvidar la copia y pegar. Esta celda tiene una propiedad llamada valor, y podemos simplemente establecer esto igual a algo. Y así si pongo esto igual a Steve aquí, vamos a correr esto ahora. Y puedes ver que solo colocamos el, esta línea de código, solo colocamos el IV directamente en la celda. Y aquí tengo mis datos fuente, que es de lo que hicimos una copia de Control C. No tenemos que hacer una copia. En cambio, sólo tomaré esta celda fuente, que está por aquí. Y en lugar del texto que acabo de escribir aquí mismo, pondré el valor de eso. Y así básicamente lo que esta línea de código está diciendo, y ya no lo necesitamos, es que esta celda de aquí, que se hace referencia al lado izquierdo de esta línea de código, igualará el valor de esta celda de aquí. Y así este es básicamente el equivalente de una copia y pega solamente. Será aún más eficiente. Entonces intentemos ejecutar esto y se puede ver que la macro aún funciona igual y el lápiz de ítem se ha movido a nuestra mesa. Entonces hagámoslo por el resto del código. Ya no necesitamos esta línea. Valor es igual al valor de nuestra fuente. Y podemos hacer lo mismo aquí. Vamos a recortar valor igual al valor de parada del precio de forma. Y esto donde despejamos el portapapeles Copiar ya no importa. Y se puede ver que estamos haciéndonos mucho más eficientes aquí. Para que puedas ver dónde están las deficiencias de grabar una macro y
cuánto más eficiente trabajar con el código directamente si sabes lo que estás haciendo puede ser. Entonces mostrémosle todo esto. Despejaremos esto. Hit submit. Y aquí tenemos el mismo resultado que antes, y ahora sólo bajamos a tres líneas de código. Y se puede ver que sigue aplicándose lo mismo. El celular resaltado, el formato no se movió de esta tabla. Simplemente estamos moviendo los datos que queremos. Y una cosa que este sencillo ejemplo no está mostrando es a medida que tus macros se
hacen mucho más largas, pueden convertirse en páginas y cientos y miles de líneas de código. Esto es mucho más eficiente. Y así esta podría ser la diferencia entre tu macro ejecutándose durante treinta segundos o incluso varios minutos. O funciona mucho más eficientemente y se hace dentro de una fracción de segundo o cuestión de segundos.
47. Data de datos: escribir a la próxima cola: Ahora hemos creado aquí una macro muy limpia con solo tres líneas de código que mueve tres piezas de datos a esta tabla. Siguiente problema que podrías estar pensando ya es que nuestra macro simplemente sigue moviendo información de este formulario a los mismos campos exactos una y otra vez. Por lo que para hacer de esto una transferencia real de datos a una tabla, vamos a querer anexar una nueva fila cada vez que golpeemos Enviar para
que obtengamos otra fila de datos cada vez que presentemos aquí una nueva línea de ítem a través de nuestro formulario. Hay muchas maneras diferentes de hacer esto. Entonces sólo voy a mostrarles una forma de que puedan hacer esto por ahora. Lo primero que quiero hacer es averiguar cuál es mi siguiente línea. Y porque esto podría llenarse de datos por aquí. Y podríamos tener más líneas, necesitamos pasar por esta mesa y averiguar dónde va a estar nuestra siguiente fila. Cómo voy a hacer esto es que voy a usar esta mesa de anclaje. Y en nuestras lecciones anteriores, pasamos por bucles. Entonces eso es lo que vamos a utilizar para averiguarlo. Voy a averiguar cuál es nuestra siguiente fila antes de que hagamos nada. Entonces voy a empezar a redactar algún código antes estas líneas donde estamos sumando nuestros tres campos en una mesa. Una cosa que voy a utilizar aquí es este rango llamado, que es nuestro ancla para la mesa de aquí. Lo que voy a hacer es empezar en esta celda y luego trabajar mi camino por esta mesa. Voy a hacer un for-loop, que pasamos antes. Voy a empezar con sólo unos números que voy a hacer aquí. Tengo 1, 2, sólo
voy a decir 99 mil, sólo un número gigantesco al que no creo que alcance nuestra mesa, al
menos no en el futuro previsible de esta demo. Entonces voy a decir a continuación, yo, esta es nuestra notación para nuestro for-loop. Y luego voy a elegir esta gama o ancla para las compras de mesa. Y voy a decir offset i 0, ese valor. Y así que en realidad aún no he terminado esta línea de código. Yo solo quiero mostrarles que a lo que estoy referenciando sólo es nuestro primer bucle, voy a igualar uno. Y así como lo usamos aquí, si el desplazamiento es uno, eso significa una fila hacia abajo desde esta celda y 0 columnas a la derecha. Entonces estamos hablando de esta celda por aquí. Y entonces la próxima vez que se vaya este bucle, me voy a convertir en dos. Y entonces vamos a estar hablando de esta celda aquí. Y probablemente estés empezando a tener una idea de lo que voy a hacer. Entonces voy a envolver esto en una declaración if. Voy a decir que si el offset 1 es igual a blanco, entonces voy a terminar esta declaración if aquí. Pero básicamente voy a poner algún código aquí que diga al final de la mesa. Y así cuando sea igual a uno, va a
haber algo aquí. Y así no vamos a cumplir con esta declaración si. Simplemente vamos a pasar a nuestro siguiente bucle. Entonces vamos a saltarnos de esta declaración if. Y vamos a ir al siguiente bucle. Cuando sea igual a dos, vamos a estar por aquí y entonces el valor estará en blanco. Y luego vamos a terminar dentro de esta declaración if. Y entonces este próximo espacio en blanco va a ser nuestra primera fila. Aquí vamos a crear una nueva variable, y la llamaremos DEM. Siguiente índice como entero. Y así cuando nos muestre un índice que nos lleva a una fila en blanco, vamos a decir siguiente índice es igual a i Ahora no necesitamos seguir ejecutando este bucle porque ya hemos tocado el fondo y
no necesitamos ejecutar este bucle 99 mil más tiempos. Por lo que sólo vamos a salir de la declaración para aquí mismo. Ahora cuando terminemos esto for loop en siguiente índice van a ser dos en este caso, que es realmente la ubicación de nuestra siguiente fila. Y entonces, ¿dónde estamos? Siempre estamos agregando datos en tan solo una fila hacia abajo desde nuestro punto de anclaje. Vamos a utilizar esta variable siguiente índice para cuántas filas hacia abajo desde nuestro ancla, queremos ir y agregar los siguientes datos. Y así si cambiamos esto aquí, ahora, sólo
estamos una fila abajo, vamos a ser un dos cuando ejecutemos esto. Al menos eso es lo que espero. Y luego vamos a estar ajustando estos valores a estos valores de forma otra vez, porque es difícil verlo todo. Sólo voy a encogerlo un poco. Porque creamos estos rangos nombrados. Puedo hacer lo que acabo de hacer y todo está funcionando correctamente. Y para que puedas ver este es uno de los beneficios clave para trabajar con estos rangos nombrados. Porque es la primera vez que lo vamos a ejecutar. En realidad voy a usar F8 y paso a través de este código y ojalá el concepto funcione tal como lo describí. Y así estamos pasando por el bucle aquí. I igual a 1. Podemos destacar sobre estas variables sólo para ver su valor. El valor de una fila hacia abajo desde el ancla no está en blanco. Entonces ven que saltamos de esta declaración if. No entramos en ella. Y luego vamos a pasar por el siguiente bucle donde yo igual a 2. Estamos hablando de esta celda aquí, y el valor es en blanco y la plata en el siguiente índice es igual a dos. Dejamos el bucle for. Y ahora nuestro siguiente índice es dos. Y ahora vamos a establecer el valor de nuestros anclados a filas. Y parece que funcionó muy bien. Sólo para demostrarlo. Vamos a cambiar esto un poco. Sé que estos precios de ejemplo podrían no tener ningún sentido. Así que detente conmigo si estás pensando para ti mismo que esto no es lo que cuesta un lápiz. Hit submit. Y ya ves están actualizados. Macro funciona muy bien y podemos seguir agregando información a esta tabla aquí.
48. Datos móviles: añade la marca de tiempo: Hay una característica que quiero agregar, esta herramienta que estamos creando, sólo porque es una característica muy básica que normalmente sería parte de una herramienta de formulario a base de datos como esta. Y esa es una marca de tiempo en cuando estamos agregando esta información. Y tenemos esta funcionalidad que
construimos ya donde podemos seguir sumando líneas en esta tabla. Y quiero estampar cada registro con el tiempo que agregamos esta fila a la mesa. Esa información no está en el formulario de compra y no queremos pedirle a un usuario que escriba la fecha y hora cada vez que esté enviando una nueva línea. No queremos que lo hagan ellos mismos. Y así lo haremos justo en el código de aquí. Podemos usar el mismo concepto que tenemos por aquí, donde tenemos nuestro ancla. Tenemos nuestro índice para cuántas filas bajar para encontrar nuestra siguiente fila. Pero nuestra columna es ahora nuestra tercera columna más de nuestro índice. Por lo que 123 es nuestra marca de tiempo. Y en lugar de tomar el valor de un rango con nombre de nuestra forma, que ya tenemos por aquí. Simplemente podemos usar una función VBA y usaremos la función ahora, que es una marca de tiempo. Y así vamos a añadir una fila aquí. Ya verás que tenemos un valor de marca de tiempo que ahora se muestra. Haremos esto un poco más grande solo para poder verlo. En realidad, podemos hacer que esta cantidad sea mucho más pequeña también para darnos algo de espacio aquí. Y se puede ver como estamos agregando estas filas, ahora
tenemos una marca de tiempo aquí también.
49. Transferencia de datos: escritura a una hoja diferente: Lo siguiente que quiero hacer es dividir esta información. Y eso nos va a dar la oportunidad de ver cómo
podemos mover datos entre dos hojas diferentes. Entonces voy a crear aquí una nueva hoja porque muy a menudo no tendríamos un formulario fácil de usar como este justo al lado de la propia tabla de datos. Por lo que en cambio, estos podrían estar en dos ubicaciones diferentes. Entonces voy a cortar y pegar nuestra mesa, y la voy a pegar aquí en otra hoja. Se puede ver porque uso Control X para cortar y pegar, nuestro rango nombrado realmente se mueve con él. Y así ven por aquí, ¿dónde habría estado nuestra célula de anclaje? Ese nombre se movió con él por aquí a esta nueva hoja que creamos solo sobre eso. A ver si esto funciona. Entonces voy a cambiar la cantidad aquí. Voy a cambiar esto por clip de papel. Golpeé Submit. Entonces puedes ver aquí que no necesitábamos hacer nada porque
habíamos llamado a nuestras gamas y compras de mesa movidas por aquí. Esta hoja en realidad sabía que las compras de mesa estaba en una hoja diferente y fue capaz de encontrarla a pesar de que la habíamos movido. Algo que podemos hacer aquí es que vamos a escribir forma. Y por aquí lo llamaremos datos de tabla. Y podemos seguir agregando información sobre esta mesa y puedes ver que sigue funcionando y tenemos nuestras nuevas estamps de tiempo. Y a pesar de que este trabajo, solo
quiero mostrarte que siempre es mejor
ser más explícito en cómo estás escribiendo tu código. Simplemente porque en diferentes situaciones simplemente no lo hemos golpeado aún. Pero este código podría confundirse porque tenemos dos hojas diferentes y podría no saber a qué información estamos tratando de referenciar. Esto no es un problema todavía, pero algo para ser más explícito podría estar agregando un llamado de oveja. Y diremos a partir de datos de tabla, compras de tabla de rango. Entonces ahora le estamos diciendo código R que las compras de la tabla de rango está muy específicamente en las hojas llamadas datos de tabla. Y podríamos hacer esto por todos los demás. No lo voy a hacer ahora mismo, pero esto sería más explícito. Entonces le estás diciendo al código exactamente lo que está pasando. Y podemos volver a intentarlo solo para asegurarnos de que siga funcionando. Entonces ves en este caso, esta información aquí mismo, no
era necesaria, pero agregarla no duele. Por lo que en diferentes situaciones, esto puede funcionar mejor e incluso ser necesario para que todo funcione correctamente. Si bien estamos en ese tema, realidad
quiero solo dar un ejemplo para
mostrarte cuándo es necesario especificar los llamados Shi. El modo en que voy a hacer eso es tomar estos datos aquí mismo. Voy a despejar esto. Voy a comentar esta línea. Y en lugar de escribir nuestro artículo, vamos a arreglar todo esto más tarde. Pero así como esta demo, en lugar de escribir nuestro artículo a la siguiente fila de nuestra columna de ítem, solo
voy a poner esto en la celda A1. Y vas a ver que estamos escribiendo uno. Y terminamos cambiando nuestro formulario de compra por aquí para decir paperclip, porque este formulario no sabe que A1 significa datos de tabla. De hecho, ni siquiera mencioné eso cuando cambio este código. Y así se puede ver A1 está en diferentes hojas de trabajo. Y si hago una nueva hoja de trabajo y quiero escribir a una de la hoja 1. Voy a tener que especificar directamente. Y así voy a volver a cambiar esto a
formulario de compra sólo para arreglar el error que cometimos aquí. Y luego si quiero escribir dos hojas llamadas Hoja 3, ese rango A1, eso es lo que necesito
llamar específicamente para mover esos datos aquí a la hoja 3.
50. Ordenado: Hola a todos. Por lo que me di cuenta de que hace
mucho tiempo desde que publiqué mi último video hace más de
seis meses y
nunca más seguimiento. Por lo que quiero recoger
donde lo dejé y simplemente
continuar con las lecciones de
automatización de Excel. Así que vamos a sumergirnos justo
en él ojalá sin problemas desde donde quedó
el último video. Para este video, lo
que quiero hacer es simplemente limpiar lo que creamos antes. Entonces donde lo dejamos es cuando
hago clic en el botón Enviar, deberíamos estar agregando una nueva línea a esta página por aquí. Y se ve la nueva fecha en comparación con donde
lo dejé por última vez. Cambiemos uno de
los valores aquí. Solo asegúrate de que
todo funcione correctamente y pulsa Enviar. Vamos a
volver a esto. Una cosa es después de
hacer clic en el botón Enviar, no
sé si algo sucedió
con éxito. Así que voy a venir
aquí y ver que nuestra nueva línea que
agregamos está apareciendo con
éxito con
ahora el nuevo precio de $15.1 cosa que no
me gustó eso fue que
cuando hago clic en este botón, No podía decir si pasaba
algo. Así que cambiemos esto otra vez. Golpea enviar y ves simplemente no sabemos que algo sucedió
con éxito. Así que agreguemos una función
simple para dar un mensaje emergente
para
indicarnos al usuario o a cualquier
otra persona que esté usando esto que el código ejecutó
con éxito. Así que vamos a ir por
aquí, de vuelta a nuestro módulo. Lo dejamos como macro uno aquí. Entonces volveremos
y arreglaremos eso también. Así que al igual que un poco
de comentarios de los usuarios, solo
vamos a
decir que la línea ha sido. Así que volvamos.
Volveremos a ejecutar esto. Y vemos que se ha agregado la línea. Ahora en realidad sabemos
que algo pasó y recibimos un poco de
retroalimentación del programa. Ahora a medida que volvemos a nuestro código, podemos echar un vistazo
aquí y ver que dice que nuestro nombre de subrutina todavía
se llama macro uno. Entonces ese no es un nombre muy
descriptivo aquí. Cambiemos eso en
algo más oficial aquí. Entonces vamos a decir añadir lima a partir de ahora porque cambiamos
ese nombre de subrutina. Cuando vamos a hacer click en este botón, vemos que no podemos
encontrar macro uno. Y eso se debe a que este
botón todavía está unido a una macro llamada macro uno que ya
no existe. Cambiamos ese nombre. Entonces reasignemos esto
a la única macro. Esto es bonito y fácil de encontrar porque sólo hay uno hasta ahora. Para agregar línea desde el formulario. Ahora cuando hacemos clic en esto, corre
la misma rutina. Seguimos teniendo
nuestras líneas suman aquí. Sólo voy a
limpiar esta mesa. Sólo para que no crezca tan alto este
momento que tenemos que desplazarse
para verlo. Al sumar otra línea, vemos que nuestras subrutinas
aún funcionan. Ahora que tenemos esta
tabla de datos en la otra pestaña, ya no
necesitamos esta. Entonces esto fue de nuestras lecciones
anteriores. Podemos seguir adelante y
despejar esto. Y una hoja que me
gusta usar para borrar contenido es si resalta
aquí y presiono Eliminar, ves todo este contenido
aún queda aquí. Todo este formato
sigue aquí. Lo voy a deshacer sólo para que
veas que puedo hacer desde aquí es que me acaba de agarrar una celda en blanco,
completamente, copiarla, y pegarla por aquí estaba haciendo el control C y
luego resaltar y controlar V. Y presioné Escape para detener el modo
copiar y pegar. Y ahora todo esto ha
vuelto a las celdas en blanco normales. Y eso es porque copié una celda en blanco de inicio normal y la pegué encima de
las cosas que quería limpiar. Hay otras formas de
hacerlo, pero esa es sólo una manera muy rápida
y fácil. Normalmente hago eso. Ahora sólo voy a seguir adelante y limpiar esto un poco. Realmente no me gusta
la forma en que se ve esto. Entonces vamos a cambiar la
apariencia de esta forma. Una cosa que me gustaría hacer por los formularios es deshacerme
de estas líneas de cuadrícula. Ves que la hoja de cálculo
tiene estas líneas aquí, lo cual es normal para
todas las hojas de cálculo. Pero queremos que esto se vea más como una forma y menos
como una hoja de cálculo. Y esto es sólo para las apariencias
visuales. Sólo voy a
quitar las líneas de la gridlines y se
puede ver
que todas esas líneas desaparecen. Y esto se ve un
poco más como un foro. Ahora sólo voy
a limpiar las cosas y hacer que esto se vea un
poco mejor. Voy a mover el botón
fuera del camino por ahora. Vamos a cambiar esta fuente. Volvamos a poner esto
a la normalidad y
sólo vamos a hacer
esto audaz por ahora. Tenemos este fondo gris
que configuré antes y sólo voy a
deshacer eso, decir no relleno. Por lo que estamos de vuelta
al defecto aquí. Vamos a reorganizar esto también. Tenemos esta configuración de forma aleatoria. En cambio, empecemos a alinear
estas cosas verticalmente. Lo que quiero decir con eso es que
puedo tomar cantidad, voy a hacer cortar y
pegar o Control X. Voy a pegar cantidad
por aquí y precio. Y quiero que las etiquetas
para los campos se acaben en esta primera columna. Y luego en la segunda columna, voy a poner
el campo real. Ya ves, habíamos nombrado a esto
antes como el ítem del Foro. De nuestras lecciones anteriores. Ya sabes que si
hago un corte y pegue, este nombre viajará
con la celda. Entonces si hago un corte y pegue, ya ves, a pesar de que muevo
esto de aquí a aquí, el nombre formulario elemento todavía ha
viajado con esta celda. Puedo hacer lo mismo
por estos otros. Estoy haciendo un Control X, Control V para cortar y pegar. Tengo estas configuración como esta. Ahora, voy a hacer clic derecho
y eliminarlos. Y hagamos que esto
destaque un poco más. Voy a hacer esto negro aquí. Hará que la fuente sea blanca. Mueve esto de vuelta por aquí. Sólo voy a poner
algo de Colin aquí. Ahora tenemos una mucho
más simple, creo, limpia buscando que
acabamos de empezar y
podemos seguir agregando
información aquí a medida que avanzamos. Y luego antes
de pasar al siguiente video, solo
probaremos esto
y veremos si todavía funciona. Entonces vamos a cambiar un poco
estos números. Llámalo aglutinante. Usted hace clic en él,
se ha agregado la línea y vamos a
asegurarnos de que lo hicieron por
aquí a esta otra página. Y ya ves, aquí está la
nueva línea, solo la agregamos.
51. 10 Validación antes del proceso: En el último video, acabamos de limpiar un poco nuestra
interfaz de usuario y sumamos algunas funciones muy básicas para
ponerse al día con este proyecto. Ahora, tenemos este
botón de enviar todavía funciona. Nos da algunos mensajes de
retroalimentación allí. Hemos agregado esta línea. Ahora quiero agregar un
poco de validación para asegurarme de que el usuario esté
utilizando este formulario correctamente. Por ejemplo, si hice
algo así como borrar el elemento de este campo aquí del elemento Foro
y pulsa enviar. Nuestro proceso aún
corre por aquí. Ves que agregó esta línea, pero no tenemos nada
enumerado como el artículo. En muchos casos, no queremos que el usuario cometa este error. No queremos que esta
acción suceda. Queremos decirle al
usuario que algo
anda mal antes de que lo
envíen a la mesa. Y luego pueden arreglarlo para que lo
puedan volver a enviar. Volvamos a
nuestro código por aquí. Vuelve a nuestro módulo. Tenemos nuestra línea de agregar a formulario. Esto. Lo que
ya escribimos es lo que agrega la información a la tabla de datos en la otra pestaña donde queremos
poner nuestra validación está en la parte superior de esta subrutina. Para que revisáramos para asegurarnos de que se cumplan
ciertas condiciones. Antes de ejecutar este proceso
de realmente sumar la línea. Pondré un comentario
aquí. Sólo voy a decir añadir a la mesa. Y luego me voy
a preparar aquí arriba, que es donde
vamos a añadir más código. Y sólo lo voy a
llamar validación. Aquí es donde vamos
a validar el proceso. En este escenario exacto
que acabamos de probar. Lo que quiero hacer es
asegurarme de que haya algo ingresado en
este campo de elemento de formulario. Por aquí. Vemos
que aquí se
llama al elemento del formulario para ser
colocado en la tabla de datos. Una cosa que podemos hacer es tomar
la misma llamada por aquí, que es donde estamos obteniendo el valor de este
rango, un ítem. Vamos a poner eso
en una declaración if. Entonces vamos a decir si
el rango elemento Foro que valor es igual y luego solo
dos comillas en blanco. Entonces vamos a
realizar lo que pase dentro de
esta declaración if. Así que básicamente vamos a
agregar un cuadro de mensaje aquí para decir que el campo de elemento está en blanco. Así que probemos esta cosa. Antes de que hagamos eso. Podrías notar que si
ingresamos esta declaración if, lo que significa que el elemento del formulario está en blanco, vamos a venir por
aquí, vamos a aparecer cuadro de mensaje. Pero luego después de que
apareciera ese cuadro de
mensaje, va a seguir bajando el resto
del código por aquí. Entonces para detener eso, si se cumple
esta condición, que es que el ítem del
Foro esté en blanco, también
vamos a
terminar toda la macro. Así que sólo vamos a
cortar la macro aquí. Otra forma en que podríamos
escribir esto es Exit Sub. En lugar de hacer un fin aquí, que saldría de
esta subrutina, no
nos meteremos en las
razones por las que voy a usar end here. Pero la subrutina de salida
posiblemente podría simplemente dejar esta subrutina que
hemos escrito y continuar por otra si tienes un montón
en el proceso. Y sólo va a detener
todo este macro frío
dondequiera que esté. Vamos a probar esto. El artículo sigue en blanco. Vamos a golpear Enviar. Dice que el campo del artículo está en blanco. Y así cambiemos
nuestro número por aquí. Te darás cuenta de que no dijo
que fue agregado con éxito. El campo de elemento está en blanco
y no
nos da el mensaje que muestra que el proceso se
ha completado. Entonces si vamos por aquí, vemos que nuestra línea no
ha sido agregada. Pero si vamos por aquí, agregamos un ítem para
que no quede en blanco, podamos continuar con este proceso. Ahora que vemos que eso funciona, podemos venir por aquí y
sumemos el resto de nuestra validación. Voy a dividir estas ventanas por aquí para que podamos ver lo que estamos haciendo. Y pensemos en cómo podemos hacer que esta validación sea
un poco más fácil, porque queremos comprobar
los tres campos. Entonces algo que podrías estar
pensando ya es
hacer algo como
este elemento del formulario. Y luego aquí está
nuestra cantidad de formulario. Entonces ahora estamos llamando a
esta celda por aquí y viendo
si está en blanco y
solo estamos haciendo lo mismo
por este otro campo. Podemos llamar a este campo de
cantidad está en blanco. Y te imaginas si
dejamos campo de cantidad se va a saltar por encima de éste. Voy a golpear F8 para
pasar por este código aquí, verás que comprueba
si elemento del
foro está en blanco,
que no lo es. Por lo que se salta este comunicado. Viene por aquí, la cantidad de
formulario está en blanco y así
nos da el cuadro de mensaje ahora. Y luego cuando golpeamos
esto, termina y la macro se detiene. Y nunca queremos,
se podría notar, es que si seguimos este patrón, vamos a poner
precio formado por aquí. Podríamos decir que algo así
como el campo de precios está en blanco. No obstante, si volvemos a ejecutar esto, vamos a golpear cantidad
del foro. Consigue este cuadro de mensaje,
y luego acabamos. Si tenemos una situación como esta donde la cantidad
y el precio está en blanco, entonces
a medida que pasas por este código, vamos a conseguir nuestro cuadro de mensaje y
la macro aquí mismo, y no estamos recibiendo
nuestro mensaje de error, ese precio está en blanco
y que hay que llenar también. Eso no es realmente
un gran problema aquí, pero a medida que las cosas se
complican, es posible que desee un
sistema mejor
que este que termine por tener una cantidad
decente de código. Entonces vamos a escribirlo de una
manera que sea más corta, pero también vamos a correr a través toda la validación para que
pueda mostrarles a todos a la vez, lugar de simplemente parar partway through como lo
hacemos en este método. Entonces
te voy a mostrar una forma realmente común que me gusta hacer esto. Y uso esta misma
configuración todo el tiempo. Voy a hacer
una nueva variable. Voy a llamar a
un mensaje de error. Y eso es una cadena, por lo que básicamente es un texto. Entonces con esta situación exacta, si el artículo está en blanco, no
voy a
poner un cuadro de mensaje y acaba de terminar la
macro aquí mismo. En cambio, voy a
decir algo así como mensaje de
error es igual a elemento es, elemento, campo está en blanco. Entonces veamos qué pasa si
hago algo como esto. Ahora, cuando tenemos nuestro artículo
en blanco por aquí, tenemos muy poca información aquí. Ahora no tenemos información realmente. Si paso a través de este código, verá
que vemos que el artículo está en blanco. Añadimos este texto al mensaje de error de la
variable, y luego no hacemos nada, no
paramos, y esto
seguirá adelante. Ahora este es sólo nuestro
viejo proceso aquí. Y entonces la pregunta es, cuando pasamos por aquí, ya que no estamos
deteniendo la macro, qué nos va a impedir ejecutar este proceso de línea de anuncios. Y cómo voy a hacer eso
está justo debajo de aquí. Sólo vamos a dejar
esto a un lado por ahora. No nos vamos a
preocupar por esto. Vamos a decir, mensaje de error
IF no está en blanco, si estamos ejecutando esta
validación para asegurarnos que este campo
esté lleno y lo contrario vamos
a detener todo. Esta condición pondrá texto en la variable de
mensaje de error. Y luego en la parte inferior
aquí, debajo de eso, si hay algo
para un mensaje de error, entonces eso significa que tenemos que parar. Vamos a decir temas. Y luego voy a anexar. Tenemos a propósito
cometer un error aquí, pero acabo de poner esto aquí. Y digo que emite el espacio
de colon plantilla. Y luego vamos a
agregar el mensaje de error. Y entonces vamos a
hacer un fin aquí. Así que vamos a ejecutar esto.
Voy a seguir corriendo esta línea por línea. Por lo que le pegamos a F8, ves artículos en blanco. Rellenamos la
variable de mensaje de error con un mensaje. Y luego por aquí, vemos que el mensaje de error
tiene algún contenido. Este símbolo
no es igual al blanco. El mensaje de error no está en blanco, lo que significa que sí tenemos
problemas. Los temas detectados. Obtenemos nuestros
problemas pop-up detectados. El campo del artículo está
en blanco, luego terminamos. Ahora si juegas esto, en realidad no lo
haré ahora mismo. Pero si en realidad había
algo en el elemento del formulario, entonces se saltará sobre
esta declaración if. Y entonces para
cuando llegues aquí, el mensaje de
error está en blanco porque nunca lo
llamamos nada. En realidad podríamos ser
más claros aquí
solo diciendo que el mensaje de error
comienza como en blanco antes. Hace esto si declaración. Pero cuando declaras,
empieza su espacio en blanco de todos modos, por lo que se implicó que
empieza como en blanco. Y luego cuando lleguemos aquí,
solo saltará y luego continuará hacia abajo
y ejecutará nuestros procesos. Por tan solo una validación. No importa demasiado. Pero ahora vamos a resolver el
problema que teníamos antes, que es que con tres escenarios
diferentes, tres campos que estamos comprobando. Nos detendríamos en el primero que golpea y después no revisaríamos
el resto de los mensajes. Entonces en cambio, subamos
aquí y vamos a mover esta declaración aquí arriba. Vamos a decir si la
cantidad es igual a blanco. Entonces vamos a hacer
mensaje de error equivale al campo de cantidad. ¿ Verdad? Así que voy a
mostrarte a propósito lo que me pasa
con lo que hice. Entonces vamos a trabajar
nuestro camino a través de esto. Sólo voy a
seguir adelante y eliminar estos dos que teníamos antes. Y así que aquí están nuestras cosas nuevas. Tenemos nuestro mensaje de error, y aquí está la primera
situación que buscamos, que es ítem y aquí está el
segundo que es cantidad. Y luego verificamos si se cumplió o no alguna de
esas condiciones. Así que si paso por aquí, vas a ver el mensaje de
error es igual. Cumplimos con nuestra segunda condición, que es la cantidad está en blanco. Ahora tenemos un mensaje de error. Por lo que mostramos nuestro mensaje que
tiene campo de cantidad está en blanco. Y lo terminaremos y
luego el proceso se detiene. Nuestro problema aquí es
que nuestro primer mensaje fue sobrescrito por
nuestro segundo mensaje. Entonces para que nuestro
primer mensaje persista, necesitamos decir
que el mensaje de error
aquí equivale a mensaje de error. Y el segundo
mensaje de aquí. Así que vamos a ver
cómo se ve esto. Aquí está nuestro primer mensaje de error. El campo Id está en blanco. Ahora vamos a decir que el campo
del artículo está en blanco. Y el nuevo mensaje combinado
se convierte en nuestro mensaje de error. Entonces, a medida que pasamos por esto,
golpeamos nuestro mensaje. Ves que el campo del elemento está
en blanco y nos anexamos encima de eso porque
dijimos igual a mensaje de error
más algo más. Por lo que se está agregando a sí mismo que el campo de
cantidad está en blanco. Y luego terminamos nuestro proceso. Y notarás que el formato
no se veía muy bien. Entonces algo que podemos
hacer aquí que agregar in-between es un VB LLF, que es el feed de línea básica visual, lo que básicamente significa
iniciar una nueva línea. Así que voy a decir, y aquí. Y veremos nuestro nuevo mensaje
mientras pasamos por esto. Al paso por esto,
obtenemos ese mensaje. Ahora, esto simplemente
crea una nueva línea. Y aquí está nuestro nuevo formato. Empujó la siguiente
bala a una nueva línea. Mantengamos fuera los
detalles creo que podrías seguir lo que
voy a hacer aquí. Voy a poner un salto de
línea entre los temas
detectados y las balas. Así que en realidad sólo
voy a seguir adelante y correr esto. Ahora acostumbrado a ver que está empezando a verse así donde hay una nueva línea intermedia problemas
detectados en nuestras balas. Una cosa que puedo hacer es
en vez de ponerlo aquí, solo
puedo poner esa nueva línea detrás de cada una de las balas aquí. Si ejecuto esto, puedes ver que hay
una línea en blanco extra, pero no es algo
que realmente notes. Entonces es sólo algo fácil poner esto
al final de cada viñeta para que
el próximo punto de viñeta
comience en una nueva línea. Algo que me gusta hacer es
simplemente colocar esto por aquí. Entonces esto tiene mensaje de error equivale a mensaje de error
y
adjunta, aunque en este
caso siempre va a estar en blanco para el
momento en que llegue aquí. Es sólo una práctica fácil estar
siempre añadiendo nuevos
viñetas al mensaje. Entonces hago esto a pesar de que
sabemos que esto
va a quedar en blanco en cualquier situación donde se ejecute
esta línea de código. Porque ahora si
quisiera, por cualquier razón, puedo hacer un corte y pegar e
intercambiar la secuencia de estos. Y cuando golpeé a Run, estaba
golpeando a F5 por r1 aquí. Ambos siguen trabajando
con el mismo formato. Sólo estamos revisando
el campo de cantidad. Antes de que estemos revisando
el campo del artículo. Sólo voy a mover esto hacia
atrás para que los mensajes sean del mismo orden que se
muestra en el formulario. Y entonces nuestro último de aquí, voy a hacer una copia. Pegar. En nuestro último campo
se formó precio. Entonces veamos cómo
funciona esto. Al golpear Enviar. Estamos entrando cada una de estas declaraciones y agregando un punto de viñeta al mensaje, y tenemos una nueva línea para que
el formato se vea bien. Por lo que ahora tenemos problemas detectados y enumerando cada
campo
que está en blanco, eso nos
impide avanzar. Si queremos que sea
aún más claro, podemos decir algo así
como problemas detectados, procesados, cancelados. Así que probemos esto. Golpeamos Enviar, tenemos los
tres campos están en blanco aquí. Podemos probar diferentes secuencias. Podemos decir artículo, clip de papel. Ahora, solo el campo de cantidad y
precio están en blanco. Si entramos el precio, $50, sé que este clip se está volviendo cada vez
más caro. El único campo está
en blanco es la cantidad. Y ingresaremos nuestra
cantidad de un 100. Y se ha agregado la línea, que es que pasamos
toda la validación y
el proceso al que se
adjuntaron los botones terminados
oficialmente. Y aquí está nuestro clip de $50.
52. 11 Objeto de lista de objetos de mesa: Para este siguiente video,
quería saltar
a un tema diferente, que es una
forma diferente de trabajar con datos de
tabla a la que la mayoría de nosotros estamos acostumbrados cuando empezamos por
primera vez con Excel, hemos estado trabajando con
esta tabla de datos aquí. Y esto es justo en
el formato de una tabla. Y así es como muy
a menudo usamos hojas de cálculo, es que apenas un poco comenzamos por
la parte superior izquierda y
empezamos a hacer tablas de información a medida
que tecleamos en las celdas. Algo que no
que mucha gente use, sobre todo cuando
empiezan con Excel, es el hecho de que Excel
puede hacer objetos de tabla. Tan similar a cómo
hay hojas de trabajo y celdas. Y esa es la cosa base con la que todos
estamos
familiarizados en Excel. Puedes convertir este rango
aquí mismo en una tabla de datos
oficial. Y tal vez te estés
preguntando, ¿qué significa eso? Porque esto ya
parece una tabla de datos. Pero si vengo aquí
y digo Formato como Tabla, puedo elegir aquí un par de formatos
diferentes. Uno realmente común es éste. Voy a seleccionar esto. Y ves que me preguntó, cuál es el rango de
mi mesa ya llenó
automáticamente
lo que he seleccionado. Podría cambiar este rango
seleccionando otras cosas aquí. Pero debido a que esto
ya estaba seleccionado cuando elegí este botón Formato
como Tabla, que ya tiene mi rango seleccionado, voy a presionar Enter. Voy a decir que mi
mesa tiene encabezados, lo que significa en este
rango que la
selecciono, tengo encabezados, lo que
hacemos aquí que
ya hicimos azul. Y voy a hacer click OK. Y lo que puede
haber notado si rebobinan diez segundos para
antes de correr eso, es que cuando me hacen clic
en esta tabla ahora, esto tiene Table Design aquí arriba. Y eso es porque se trata de
un pez o un objeto de mesa. Similar a cómo
nombramos celdas por aquí, donde nuestro artículo no es un rango celular y lo
nombramos elemento del foro. Esta tabla es ahora
este rango por aquí. Si hacemos clic en Diseño de Tabla, podemos ver la información
sobre este objeto de tabla. Y tenemos un nombre de tabla. Esto se llama Tabla
uno. Ahora mismo. Incluso podemos hacer algo como cambiar el
nombre de nuestra mesa y lo vamos a llamar compras de mesa. Ves que surgió
ese mensaje diciendo que no puedo nombrar esa tabla. Compras de mesa. Eso es porque tenemos
esta celda aquí arriba, ese es el ancla. Y nombramos nuestras compras de
mesa celular y no me deja reutilizar ese mismo nombre en lugar de tener que llegar a
algo diferente. Por lo que sólo voy a llamar a
esta mesa líneas de compra. Y yo pegué Enter. Y luego ahora cuando hago clic, no
vemos nuestra cinta de
mesa aquí arriba. Cuando vuelvo por aquí, estamos en nuestro diseño de mesa. Entonces estas son todas las
propiedades de la mesa. Puedo cambiar mis temas aquí. Ya ves cómo esto sigue siendo azul. Eso es porque configuramos manualmente esto a azul hace unos videos. Si venimos por aquí y cambiamos el
estilo de vuelta a la normalidad. Normal no es en realidad
un estilo celular. Puedes pensar que significa que
hay un fondo blanco, pero realmente solo significa dejarlo a cualquier defecto de
Excel. Porque esta es una mesa. Se va a llevar el estilo de sin embargo nosotros estilo
la mesa por aquí. Por lo que ahora podemos ver incluso
el encabezado porque no
especificamos un color de fondo
específico. Sólo va a
aceptar cualquier
formato que elijamos
de nuestro estilo de mesa. Vamos a usar esto en nuestra automatización y nuestro código VBA. Incluso antes de entrar en
eso en nuestro próximo video, se
puede ver que hay
algunos beneficios para esta sea una
mesa oficial y que
es un objeto conocido con un montón de configuraciones
que no conseguiremos en todos los detalles aquí. Pero para empezar la justicia, se
puede ver cómo podemos
formatear todo. Es posible que hayas notado cómo
hay automáticamente estas funciones de clasificación
en la parte superior de cada columna que a menudo
tendrías que agregar manualmente. Y entonces una
cosa realmente genial que verías aquí es que si
agrego manualmente información a la tabla, aunque no estemos usando ninguna
macros o VBA para la automatización, puedes empezar a sumar
líneas aquí y lo ves automáticamente nuevo para ampliar esta tabla como
lo agrego, pregunta aquí. Esta tabla tiene mucha lógica e inteligencia
integrada en ella. Ahora que Excel sabe que
esta es una tabla oficial, lugar de solo un
montón de contenido en celdas aleatorias a lo largo de
la hoja de cálculo. Y entonces incluso puedo entrar aquí y hacer algo
como Delete. Y ahora tengo,
cuando hago clic derecho, tengo estas nuevas opciones, Borrar columnas o eliminar una fila. Entonces vamos a aprovechar
este objeto de tabla ahora que Excel sabe que
esta es una tabla real.
53. Objetos de lista (tabla) - Introducción a VBA: En la última lección, les presenté esta idea de una tabla de nombres que tenemos aquí, que hemos convertido nuestros datos
en una tabla de nombres real. En Excel reconoce esto. Hay mucha más información
que podríamos repasar en tablas de
nombres justo aquí en Excel sin entrar en el VBA. Pero vamos a ahorrar eso para
otro momento en este momento, vamos
a sumergirnos en cómo trabajar con esto para VBA Macros y
ver cuáles son algunos de los beneficios de tener
una tabla de nombres real en
lugar de trabajar con
todos los datos brutos en las celdas de la hoja de cálculo. Vamos a sumergirnos en
el código VBA aquí. Voy a abrir nuestro editor. Sólo tenemos esto
en ambos lados aquí. Y hagamos sólo un módulo. Así que voy a
dejar de lado el proyecto en el que hemos estado
trabajando y en su lugar, solo tener esta lección sobre las
diferentes cosas que puedes hacer. Ahora que tenemos una tabla de nombres
aquí en la hoja de cálculo. Entonces vamos a crear un nuevo módulo. Voy a hacer
clic derecho Insertar módulo. Y sólo voy a
llamar a este nombre capaz. Por lo que voy a llamarlo test. Solo vamos a usar
esto para ejecutar código aleatorio para demostrar
algunas de las cosas que puedes hacer con esta tabla de nombres. En VBA. Estas tablas de nombres en realidad
se llaman objetos
de lista. Entonces primero voy
a declarar un TBL. Hay una variable de tabla como, y vamos a
llamarla objeto de lista. Por lo que tienes estas opciones aquí. Voy a elegir objeto de lista. Y entonces necesito
configurar esta variable para que sea la mesa que
vemos aquí en la pantalla, que recuerdas
del último video. Voy a ampliar esto para que
podamos ver el nombre aquí. Lo llamamos líneas de compra de mesa. Entonces vamos a
recordar ese nombre aquí. Por lo que vamos a
decir establecer PBL es igual. Y luego vamos a
llamar a nuestras hojas de datos capaces. Y ese es el nombre de
la hoja de aquí mismo. Entonces tenemos que decirle el nombre
de la hoja de trabajo que las
tablas en esa lista objetos, líneas de compra de tabla. Entonces estamos llamando a esto mucho
como solemos hacer un rango, pero en lugar de un rango, que es una o muchas celdas
estaban diciendo un objeto de lista, que es las tablas de aquí. Entonces, si había más de
una tabla en la hoja, habrá varios
objetos de lista en esta hoja de trabajo. Entonces lo estamos contando de todas
las mesas de esta hoja. Vamos a elegir el objeto de líneas de compra de
tabla. No importa en este momento
porque sólo hay uno. Pero si había
más de una tabla, le está diciendo qué tabla declarar
para nuestra variable. Entonces ahora algo sencillo que me
gustaría hacer es simplemente decir mesa. Y tienes todas estas
propiedades del objeto de tabla, del objeto list. Me disculpo, probablemente estaré usando estas palabras
indistintamente, tabla y objeto de lista. Guardar rango, que de nuevo
sabemos que es un grupo de células. Sólo voy a decir selecta. Entonces vamos a caminar a través de este
F8 para pasar por el código. Aquí. Mesas nada. Ahora la tabla
se convierte en líneas de compra de tabla, que es este objeto aquí mismo. Y luego el rango son
las celdas de esta tabla. Y cuando haga clic en Seleccionar, lo
verás sabe
que aquí está nuestra mesa. Uno de los beneficios que podrías
ver de inmediato solo de este ejemplo es que muchas veces tienes datos en
cualquier parte de una hoja de cálculo. Estas hojas de cálculo son gigantescas. Pueden ser cientos
y miles de filas y por
muchas columnas que acaben. Y se ve en este caso, los datos no están perfectamente a la parte superior izquierda ni
nada por el estilo,
que son algunas hojas de cálculo. Pero tus datos pueden estar
flotando en la hoja de cálculo. Y así aquí mismo,
se puede ver ya este beneficio donde cuando estamos declarando este objeto de tabla de
nombres, sabemos exactamente
dónde están nuestros datos. Ahora que tenemos un objeto de tabla, este objeto list tiene un montón de propiedades que
forman parte de él. Cuenta con toneladas de propiedades. No hay manera de que
podamos repasar en absoluto, sobre todo en una lección aquí. Pero solo quiero
mostrarte algunas de las propiedades muy básicas de esta mesa a la que ahora tenemos
acceso realmente fácilmente. Entonces voy a decir mesa. Y luego puedes ver
todas las opciones aquí. Voy a decir
Data body range. Entonces esta es una gama. Y luego ves que tiene select al
igual que nuestra gama tiene, selecciona esto como la
fecha de rango corporal. Ahora, si paso a través, seleccionamos el rango y
aquí está el rango del cuerpo de datos. Y ves que todo lo hizo
es básicamente quitar los encabezados porque este
es nuestro dato en cualquier tabla. Y en este momento tenemos una tabla de datos
muy pequeña, pero esto podría ser miles de filas hacia abajo y decenas de
columnas a la derecha. Y sabría que tu cuerpo es básicamente tu mesa
menos los encabezados. Y podemos sumar más cosas
aquí. Lo vamos a hacer. Déjame volver aquí arriba. Podemos hacer
anillos hetero que seleccionen. Voy a arrastrar
esta flecha amarilla hacia arriba solo para que podamos ejecutar
esta línea de código. Y ya ves que conoce
el rango de filas de cabecera. El top de aquí. Así que ahora estás empezando a ver
algunas de las cosas que hicimos en los videos pasados donde tenemos una celda ancla en la parte superior izquierda. Y estamos haciendo cosas como
tratar de encontrar la siguiente fila. Tenemos acceso a las propiedades de la tabla y no
tenemos que hacer tanto trabajo para conocer información
como dónde está la fila superior y dónde está la fila
inferior de esta tabla? Las mesas tienen un montón
de filas para ellos. Y muchas veces cuando estamos
trabajando con tablas de datos, sabemos que estamos
tratando de pasar por las diferentes filas de información cada vez que
estamos trabajando con datos, ese es un tema realmente
común es estás tratando encontrar una fila específica o bucle a través de todas las filas
de información. Mesas. Tener estas
listas objetos de fila, que es cada fila de
datos en la tabla. Y así lo mismo aquí. Ver Tengo listas filas aquí. En realidad tengo que
respaldar y si
empecé paréntesis,
me dará un índice. Entonces si digo que mi índice es dos, mi fila de lista tiene una propiedad range y puedo volver a seleccionarla. Sacaremos esta flecha hacia fuera una. Ya ves que estoy seleccionando la
segunda fila de mi mesa. Y claro si
cambio esto a cinco, nuevo, saltamos
a la quinta fila. Y entonces si salgo
fuera del rango, es posible que esto ya espere. Vamos a lanzar
un error aquí y
dice subíndice fuera
de alcance porque rho décimo no existe
con nuestra fila de lista. Volvamos a las tres aquí. Se puede ver como respaldo a nuestro objeto de lista y
acaba de poner el periodo, tenemos estas
cosas diferentes que podemos hacer. El rango es con lo que
estamos familiarizados, que está interactuando con
las celdas de la fila. Pero entonces tienes
estas otras cosas, como nosotros tenemos delete aquí mismo. Vamos a probar esto. Si ejecutamos esta línea de
código que tiene listas, fila tres creencias, se puede
imaginar lo que sucederá a continuación. Entonces si ejecuto esto, la
tercera fila ahora se elimina. Y ahora estás empezando
a ver que aquí
tenemos mucho control. Cosas que estábamos
haciendo en el pasado, como incluso antes de
usar la variable I para indexar lo lejos que
estamos de arriba a la izquierda. Estamos haciendo mucho trabajo para averiguar cómo estamos
trabajando con los datos. Y ahora que hemos puesto esto en un objeto list y tenemos
un nombre real a tabla, podemos interactuar con esta tabla mucho más a la perfección
e intuitivamente que cuando estamos tratando de
hacer un seguimiento de los índices y donde estamos en la
página con recuentos celulares. Seguiré mostrándote
algunas de las otras propiedades
realmente comunes que
usarás aquí, que es que hay
un objeto de columna de lista igual que tenemos lista de filas. Y así podemos hacer lo mismo. Podemos decir columna de lista, índice a ese rango que está en eso solo para
mostrarte lo que es esto. Y esta es nuestra segunda
columna de lista aquí tenemos cantidad. Algo realmente genial
acerca de las columnas de las listas. Y esta es una de
mis principales razones por las que me gusta trabajar con
estas listas objetos cuando estamos en VBA para automatización es cuando
tienes muchos datos. Los métodos que hemos hecho antes y lo que mucha gente usa
es hacer un seguimiento de
sus nombres de columna, que es ABC y las
letras hasta el final, o hacer un seguimiento del
número donde cada columna es. Entonces precios columna tres,
marca de tiempo, columna cuatro. Pero cuando los datos
se vuelven realmente grandes, se empieza a
hacer un seguimiento del recuento de columnas. Y se pone realmente difícil, sobre todo si vas a cambiar tu tabla
y eliminar o agregar columnas, entonces la columna número 27
se convierte en algo diferente. Y si tu código se basó en
usar la columna 27 para algo, tienes que ir a buscar
todos estos lugares en tu código para actualizar el número de índice de
columna. Entonces una de las mejores
partes sobre el uso un objeto de lista aquí en
VBA para la automatización es que puedo tomar estos dos y reemplazarlo por
la palabra cantidad. Y esto va a conocer el nombre de la columna
basado en saber que estos
son nuestros encabezados. Y va a saber
qué columna hace es si ejecuto esto,
sigue siendo cantidad. Si cambio esto a precio, entonces va a conocer
la columna titulada precio. Y luego si hago algo como insertar una nueva fila aquí tenemos la columna uno. Puedo ejecutar esto. Sabe que estoy
buscando la columna de precios, que ahora está por aquí en lugar de en la columna D de
la hoja de cálculo. Y este es un
error realmente común que cometerán muchos desarrolladores o personas que trabajan
con Excel,
que no está utilizando esto y usando un recuento de números o incluso las direcciones de
la hoja de cálculo. Y cuando cambiaron algo, entonces todo su código ya no
funcionará. Esto es muy común a
los primeros videos que tuve en rangos nombrados
anteriormente en esta clase. Entonces eso es todo por éste. En el siguiente video,
entraré en algunos de los más detalles
sobre lo que podemos hacer
funcionalmente ahora que
tenemos nuestros datos en un objeto de lista.
54. Objetos: listas y bucles: Y la última lección que
presentamos a algunas de las propiedades muy básicas que
tenemos ahora que nuestros datos están en un objeto de lista. En éste, quiero
dar algunos ejemplos de cómo podemos realmente
utilizar este objeto list. Hacer algunas
tareas muy básicas se van a componer. Así que lo primero que voy a hacer
es simplemente amplificar estos datos. Y así solo estoy copiando esto y solo
repitiendo estos datos. Por lo que tenemos más
información aquí. Como te mostré antes. Se puede ver que a medida que agrego datos a la parte inferior
de esta tabla, el formato no se está moviendo
sólo a lo largo, no
se está moviendo este
formato alterno por
la copia y la pega. Se puede ver desde este pequeño
triángulo aquí en la parte inferior derecha que se da cuenta de que
la mesa en sí está creciendo. Y así de nuevo, esta tabla de nombres nos
está ayudando con mucho
del trabajo que hacemos por los datos. Y es detectar
cuál es el rango de estos datos a medida que
continuamos expandiéndolos. Podemos probar eso porque
tenemos este código a la derecha. Y a medida que lo
recorremos, se puede ver como seleccionamos nuestra tabla, que se da cuenta de que datos ahora están todo el
camino hacia abajo en la fila 29, y no sólo las primeras
filas que tenemos antes. Podemos eliminar esta columna uno que agregué en la última demo. Si hace clic con el botón derecho aquí, puedo hacer para sangrar columnas de tabla. Y ahora estamos de vuelta a nuestras columnas
originales aquí. Y así teníamos estas
diferentes propiedades que te estaba mostrando antes. Y quiero mostrarles ahora
que tenemos nuestra lista de filas. Y antes te estamos mostrando cómo podríamos seleccionar
una ruta específica. Entonces si no selecciono
una fila específica, incluso el
objeto de nuestra fila de lista sin una fila específica tiene un par de cosas que
podemos hacer con él aquí. Una de las
que uso todo el tiempo es esta propiedad de contar. Entonces esto nos va a
decir el número de filas en nuestra tabla. No creo que
en realidad podamos ejecutar esto porque esto es un valor. Entonces no es una acción que se ejecutará
esta línea de código. Y así ves que está
arrojando un error aquí. En cambio, puedo decir debug print, porque esto
va a ser un valor. Entonces sólo vamos a tomar este valor y
vamos a
imprimirlo a nuestra
ventana inmediata aquí abajo. Entonces si ejecuto esto, se
puede ver que está imprimiendo el número de listas
filas en esta tabla, que nos está diciendo que es de 25. Por lo que venimos aquí solo
para verificar si resalto estas celdas, ampliar esto hacia fuera. Se puede ver que el conteo es de 25. Entonces esto es algo que uso
todo el tiempo solo para saber cuántas filas
hay en nuestra tabla de datos. Y de nuevo,
lo realmente útil que está haciendo por nosotros aquí es que no está haciendo algo como
incluir nuestro encabezado, esta información de aquí. Entonces cuando nuestros datos no
están en contra de la parte superior, puede ser difícil
para nosotros saber cuántas filas
hay muy rápidamente. Y entonces ahora tenemos una
manera fácil de averiguarlo. Ahora con esta información, igual que antes, donde usamos un bucle y usamos yo como índice. Podemos decir que equivale
a uno a n antes de que acabemos de
poner un gran número aquí y nos
escaparíamos cuando detectemos
el final de la lista. Ya no necesitamos hacer
eso porque en lugar de necesitar detectar
dónde termina la mesa, nuestro objeto de mesa
ya nos dice que si estamos haciendo un bucle
por las filas aquí, voy a ser el contador
que atraviesa cada fila. Y podemos decir que va de
una al número de filas. Entonces voy a decir tabla que
enumera filas, esa cuenta. Entonces en este ejemplo exacto, nuestro recuento de filas es de 25, así que
va a ser yo igual a uno a 25. Y luego podemos usar nuestro I, nuestro contador de índices para
recorrer cada una de estas filas. Y no tenemos que
gustar antes, intentó hacer detección
de cuándo terminan los datos. Porque sabemos cuándo terminan
los datos, termina. Cuando lleguemos a la última
fila del recuento de filas. Escucho algo de lo
que no estoy seguro si he hablado en las lecciones pasadas es que tengo esta opción
Explícito arriba en la parte superior. Lo que eso significa cuando lo
ves es que no
puedo usar una variable
antes de declararla. Entonces si hago algo como
solo decir print I. que puedan ver que va
a pasar por este bucle y pasar de uno a 25 aquí. Y traté de ejecutar esto. Dice variable no definida. Eso es porque tengo
Option Explicit aquí arriba. Si elimino
esto, básicamente significa
que puedo usar variables sin
declararlas primero. Entonces a pesar de que estoy
usando yo y no declaro la variable me va
a dejar ejecutar este código. Algunas personas incluyéndome a mí mismo, les gusta usar Option Excipt
porque
se asegura de que estés haciendo un seguimiento de
tus variables correctamente. Entonces tengo que declarar, doy como entero aquí arriba. En realidad voy
a llamar a esto un largo, que es simplemente básicamente un entero que puede
contener más contenido. No me meteré en
eso en este video. Pero yo es básicamente como
un entero. Es un número. Así que al correr esto, se
puede ver que estamos haciendo un
bucle por cada fila aquí y
estamos pasando por el mostrador y
debería parar a los 25. Por lo que ves se detuvo a los 25 aquí porque sabe cuántas
filas hay en nuestra mesa. Ahora podemos tomar este
índice y en realidad hacer algo con él en
lugar de imprimir el índice. Para que podamos hacer algo
como tomar nuestra mesa. Tenemos nuestra lista de filas. Si lo recuerdas, teníamos nuestro índice donde podemos
elegir una fila específica. Y sólo vamos a decir, no
tengo que seleccionar la propiedad. En cambio, necesitamos ser un
rango antes de seleccionar. Ahora, si miramos por aquí, estamos llegando hasta aquí
y tenemos la fila uno. Y luego a medida que nos bucle,
me convierto en dos. Y ahora estamos haciendo un bucle
a través de todas nuestras filas. Y hicimos algo
parecido a esto. Pero de nuevo, no
tenemos que detectar aquí
el final de la tabla. Simplemente sabe que los
datos terminan después de la fila 25.
55. Objetos: columnas de lista y valores de fila: Ahora que vemos
podemos recorrer todas las filas de estos datos, muchas
veces queremos obtener losdatos específicos en
lascolumnas a datos específicos en
las medida que
pasamos por cada fila. Así que bucear por cada fila por completo por
lo general no es a lo que queremos llegar. Normalmente queremos
evaluar los datos dentro de la tabla ya que estamos haciendo un
bucle a través de las filas. Cómo podemos hacer eso es a medida que
pasamos por cada fila, también necesitamos
mirar la columna que estamos
tratando de mirar. Veremos los datos en una columna específica mientras
pasamos por esas filas. Vamos a ejecutar esto otra vez. Vemos aquí que
tenemos la fila uno, y así esta es la fila uno. Y luego estamos sólo
para la demostración, mirando el rango
y seleccionándolo para que podamos ver con qué fila
estamos trabajando. Si tomas este rango, en realidad
puedes
hacer algo similar donde si pones un
paréntesis aquí, y vamos a escribir la
letra tres aquí, estamos poniendo un índice
dentro del rango. Entonces esta es toda una
fila de información. Y cuando pongo
tres en el rango, veamos qué pasa ahí. Ves lo que está
haciendo es que está tomando esto como la fila de información y luego el rango es
tres, es decir 123. Entonces estamos llegando
a la tercera columna, y ahora estamos empezando a
mirar datos específicamente dentro de una columna a medida que
pasamos por la fila. Así que sólo para dar una idea de cómo
podemos mirar los datos aquí, pongamos una
impresión de debug y otra vez, rango de tres puntos de valor. Aquí lo estamos seleccionando.
Realmente no necesitamos esto. Es sólo para una
demostración visual de lo que está sucediendo. Pero dejemos eso aquí. Y luego
vamos a imprimir el valor que está en fila, que es por lo que estamos haciendo
bucle. Y luego solo
vamos a imprimir el valor del rango tres, que es realmente
la columna tres. Por lo que ves tenemos
este valor 20 aquí. Permítanme aclarar esto por aquí. Aquí tienes 20. Es destacar primero la
celda, por lo que 50. Por lo que ahora esperamos ver
50 aquí porque estamos en esta fila y ahora estamos consiguiendo el tercer
elemento de esa fila. Entonces estamos en 501116. Entonces tal como esperamos, y mientras miramos por aquí, llegamos hasta el
fondo y tenemos 115020. Y ahora realmente estamos mirando los datos en específico a medida que
avanzamos por esta tabla. Amplía esto un poco
para que sea más fácil de leer. Pero tenemos este problema
que mencioné antes, que es que realmente
no me gusta usar estos tres por aquí. Porque si estoy tratando de hacer algo para mirar el precio, y luego agrego aquí una
nueva columna. Tenemos este problema donde el
precio ya no es tres. Ahora es contar para. Y luego si escribimos
mucho código, tenemos que volver
aquí y cambiar este tres a un cuatro o un montón de cosas no van a
funcionar correctamente y
tal vez no nos daremos cuenta hasta que ocurra
un error. Por lo que ahora voy
a eliminar esto y mostrarte otra propiedad
que podemos usar para resolver esto. Sé que las cosas se están complicando
un poco aquí. Si puedes soportar conmigo, Esto puede ser simplemente una prueba de concepto y no
algo que necesariamente
esperaría que
absorbieras completamente a este
nivel en nuestra clase. Si vengo aquí y antes
incluso de entrar en nuestro bucle, vamos a mirar nuestra mesa y mirar nuestras columnas de lista. Y si recuerdas,
podemos llamar nuestro precio. Y vamos a hacer una pausa por aquí. Yo dirijo esto. Llegamos aquí, seleccionamos
nuestra columna de precios. En nuestra columna de precios, vamos a
depurar mucho imprimir, como tenemos
esta lista de filas. Dándome un error
porque estoy dejando estos paréntesis
antes de que se hagan las líneas. Mucho como tenemos esta propiedad del recuento de las filas de la lista. Podemos tomar nuestras columnas de lista de
tablas, la columna de precios, que
es esta aquí mismo. Y luego decir índice. A medida que volvemos aquí, igual que count devuelve un valor para el
recuento de filas de listas. Si digo el índice de la columna de precios, me
está dando tres. No podemos verlo porque
necesito aclarar esto. Si ejecuto esto, se puede ver el índice de la
columna de precios es tres. Ahora que estamos haciendo esto, si inserto una columna
por aquí y vuelvo a
ejecutar esta línea exacta de código, golpearé F ocho. Ahora, sabe que el índice
de nuestra columna de precios es de cuatro. Entonces básicamente estamos
sacando nuestra llamada de la columna específica por el nombre de
la columna y luego
encontrando el índice de la misma. Entonces si tomamos
toda esta declaración por aquí, voy a copiarla. Y donde había un tres, estoy pegando esta declaración
que en este momento es cuatro. Tratemos de ejecutar esto. Voy a aclarar
esto para que podamos
verlo de nuevo, pero eso fue 16. Vamos a ejecutar esto otra vez. Ves que esto es tres, por lo que sigue seleccionando lo
equivocado aquí. Seleccionando nuestra tercera columna. Yo puedo hacer lo mismo aquí. Reemplaza estos tres toda
esta declaración
que tenemos aquí arriba, que nos está dando el
número de la columna de precios. Entonces esperamos que sea por dentro mismos paréntesis donde
he sustituido a los tres. Ahora estamos por aquí, 16202050. Y la magia de
esto es ahora si
hago algo como
eliminar esta columna, ahora el precio es el tercer índice. Y sigo corriendo esto. Aquí estamos de nuevo y todo
está funcionando correctamente. Sabe dónde está el columnista de
precios. Y sé que a medida que empezamos a anidar
estas declaraciones juntas, las cosas se ponen un poco más
difíciles de seguir. Muchas veces lo
escribiré así solo para guardar líneas de código. Pero como ejemplo. Pero esto realmente lo está haciendo es básicamente decir columna de precios. Entonces voy a hacer aquí una nueva
variable. Más obvio lo que está
pasando aquí. Voy a usar a lo largo y
decir que el índice de precios es igual. Y luego toma esta
declaración por aquí, que es averiguar
qué número de índice es
la columna de precios. Entonces en lugar de tener
esta declaración anidada con todos estos periodos
y propiedades aquí, el rango que queremos es
el índice de columna de precios. Por lo que esta podría ser una
forma más fácil de pensarlo, ya sea que
desee o no usar esta variable como intermediario o desee combinar dos declaraciones
juntas de inmediato. Y estamos reemplazando
el número
de columna una variable para luego detectarlo en base al nombre
real de la columna. Entonces solo para mostrarte
que esto seguirá
funcionando , precios la tercera columna. El índice de columna de precios es tres. Y ahora a medida que
pasamos por cada fila, vamos a mirar el
tercer elemento dentro de esa fila. Mirando a este 5011202050.
56. Excercise elimina ciertas filas: Ahora, con la información que aprendimos del
último par de videos, quiero hacer un
ejercicio real aquí. Entonces empecemos a tomar una acción real y
ver si podemos hacer algo con esta base de datos sobre los conceptos que aprendimos
sobre el objeto de lista. Lo que voy a
llegar es que vamos a recorrer estas
filas y vamos a ser filas donde el
precio es o 1146. Por lo que tenemos estos datos
que copié aquí. Es una gran cantidad de los mismos
datos, pero tenemos estos valores que son
1611 a lo largo de los datos. Vamos a utilizar los
conceptos que hemos aprendido para realizar esta tarea. Así que echemos un vistazo a
nuestro código por aquí y limpiemos algo de él. Entonces esto es algunas
cosas que no necesitamos. De hecho, empecemos desde cero y empecemos con
declarar nuestra mesa. Entonces eso es lo muy
básico que necesitamos. Tenemos nuestro objeto de mesa aquí y no estamos
haciendo nada con él. Para nuestros videos anteriores, podemos recordar que
queremos recorrer cada fila y luego vamos a analizar
cada fila a medida que lo recorremos. Voy a decir que es igual a uno. Tabla que enumera
filas, conteo de puntos. Ve a la siguiente I. Esto es básicamente un resumen aquí vamos a
hacer nuestras filas de lista, nuestro índice I, que está
cambiando para cada bucle. Vamos a seleccionarlos para
recapitular sobre nuestras lecciones anteriores. Pasaremos por aquí. Y
entonces vamos a mirar a través de cada fila aquí. Sólo voy a
parar esto aquí. Entonces sabemos cómo hacer eso. Ahora, queremos
mirar nuestra columna de precios. Entonces voy a hacer esto con la variable intermediaria sólo
para hacernos más obvios, ya que sé que esta es
una clase de entrenamiento, vamos a decir índice de precios, como lo demostramos en
el último video. Y vamos a
llamar a eso un largo, que de nuevo es simplemente muy
similar a un entero. Pero generalmente uso un largo cada vez que estoy
usando un número. Di Cristo, llama
igual a nuestra tabla, y luego nuestra columna de lista, y luego su índice de precios. En este caso, sólo va
a devolver el número tres porque el precio es la tercera
columna de nuestra tabla. Y entonces ahora no queremos
seleccionar toda la fila. Queremos mirar específicamente
el índice de la columna de precios. Así que después del rango aquí solo
vamos a mirar una celda específica en la fila
y no toda la fila. Entonces vamos a pasar por esto otra vez. Y ahora ya ves lo que estamos
mirando a nuestro precio aquí. Haga clic aquí. Voy a detener esto otra vez. Ahora tomemos esto
exactamente lo mismo, pero en lugar de
seleccionarlo como lo hacemos aquí, vamos a depurar impresión. Vamos, va a agarrar
este lado izquierdo y otra vez, seleccionándolo,
sólo lo estamos haciendo. Entonces, para nuestro beneficio de
visualizarlo a la izquierda, cuando realmente estás
ejecutando mucho código, no
tienes que seleccionar
cada celda por aquí. Te lo mostraré en un segundo. Y en lugar de seleccionarlo, agarré todo antes la declaración select por aquí. Y sólo voy a
teclear valor. Y envolvemos esto en
nuestra impresión de debug. Por lo que deberíamos estar
enviando estas cosas por aquí
abajo a nuestra ventana de
inmediatos. Vemos 1620. su mayoría sólo estamos recapeando lo que hicimos en nuestro último video. Sólo para mostrarte lo que
estaba mencionando es si comento esta fila para que no estemos seleccionando cada celda en
la interfaz de usuario, entonces esto todavía va a funcionar porque todo este no está diciendo algo como
mostrarnos el valor de la
celda que está seleccionada. Y esto es
algo muy común que la gente hace cuando comienza por primera vez con Excel y macros es que
piensan que
todo lo que haces necesita estar ocurriendo en la interfaz de usuario. Entonces podrías hacer
algo como seleccionar la celda y luego mostrarme el
valor de la celda seleccionada. En realidad no
necesitamos hacer eso aquí. Porque no estamos
buscando el valor de la
celda que está seleccionada. En realidad no necesitamos
seleccionar nada en la interfaz de usuario
y seguirá funcionando. Así que ven aquí y
ya ves que todavía
estamos dejando nuestra
celda seleccionada arriba y una. Realmente no importa dónde. Y nuestro código sigue
corriendo por aquí, 501116. Entonces parece que
estamos por aquí. Voy a hacer esto
aún más grande sólo para que sea más fácil para nosotros ver
más del código aquí. Ahora, trabajemos en
nuestro ejercicio real. Si queremos simplemente eliminar
los precios que son 1611, necesitamos una condición si. Tenemos que comprobar si hay una
determinada condición aquí. Sabemos que tenemos el precio. De hecho, voy a
hacer esto más explícito. No siempre hago esto, pero cuantas más variables
creemos aquí, va a crear el
tipo de
escalones intermediarios para que
sea más fácil de entender. Creo que vamos a
decir el precio como el doble. El doble no es solo un número. Es un número que
permite decimales. Entonces por eso estoy
usando un doble aquí. Porque precio, no los estamos
usando en este momento. Todo es 0 sentido. Pero si tuviéramos sentido real en estos precios de lo que
permitiría almacenar decimales en esta variable. Ahora vamos a decir. En lugar de simplemente
imprimir el precio, donde digo que
el precio es igual. Y luego escogeremos lo
mismo que
estamos imprimiendo, que es sólo un
precio en esa fila. Entonces vamos a
decir si el precio es igual, vamos a hacer 11 primero. Entonces. Y
en realidad hagamos esto. Vamos a
imprimir el mensaje. El precio está marcado. Tomemos hasta este mensaje. Vamos a
anexar el índice I, que es de nuevo nuestro contador, en
qué fila estamos. Vamos a
recorrer todos los precios. Y siempre que el precio sea de 11, vamos a enviar
este mensaje extra por aquí a nuestra
ventana inmediata. Mientras tanto,
sólo voy a apagar este otro mensaje para que
no nos confundamos demasiado aquí. Y sólo para nuestros propósitos, voy a volver a seleccionar
una celda para que
veamos con qué fila
estamos trabajando. Me dio un mensaje aquí. Si pensara que aquí hay
un problema. Y eso es realmente sólo porque no recordaba
el pie, el final. Si justo aquí tengo la palabra. Si. Me paso por aquí, estamos mirando la primera fila. El precio no es 11, por lo que lo ves salta directamente hasta el final
de la declaración. Ejecutar esta línea. Trabaja nuestro camino hacia abajo. De acuerdo, ahora
estamos en celda por aquí, que va a ser 11. Entonces como comprobamos nuestro
precio, son 11. Entramos en un comunicado, el precio está marcado y vemos
Roma fila 512345. Debido a que copiamos estos datos, en
realidad está en un
patrón de bits. Así que creo que esto
va a ser la fila diez. Y ahora estamos a un precio de 11, saltaríamos, y
ahora estamos en la fila diez. Ahora estás empezando
a ver cómo
vamos a poder hacer esto. Ahora en nuestra
declaración if dirá, o precio es igual a 16. Y de hecho, sólo voy a correr esto todo el camino. Voy a golpear F5, que es lo mismo que hacer clic aquí en
este botón Reproducir. Y vamos a correr
por todo esto. ¿ Qué filas hemos marcado? Marcamos al 5610111516. Eso parece que
va a estar bien. Por lo que tenemos cinco y luego
justo después es 16. Y entonces este patrón
se va a repetir una y otra vez. ves, estamos haciendo la lógica de detección que
estamos buscando, que es, estamos descubriendo
cada fila que el precio es de 11 o 16, y se nos da el
índice de esa fila aquí. Voy a
cometer deliberadamente un error aquí, que he cometido cuando
empecé a hacer este proceso por primera vez. Algo muy parecido,
que es limpiar filas. Ahora que hemos marcado la fila, queremos tomar esta fila que
encontramos, que es la fila I. Una vez que la marcamos, voy a decir tabla
que enumera filas I. Y lo que queremos
hacer es eliminarla. Aquí no hay detección. Eso es porque hice un error tipográfico. Me falta T por aquí. Entonces ahora que he escrito
el objeto correcto, que es fila de lista, ahora
obtengo estas opciones de lo que puedo hacer con
él, que es eliminar. Entonces veamos qué pasa aquí. No creo que esto
vaya a funcionar correctamente. En realidad déjame aclarar esto. Creo que algo pasó
ahí, realmente no me di cuenta. Entonces empecemos esto de nuevo. Estamos mirando a la primera fila. Nos saltamos. Dos, nos saltamos. Parece que eliminé una fila, creo que porque tenía el código anterior
funcionando en curso. Pero vamos a dar
un seguimiento a donde estamos aquí. 50. Eso no es todo. Ahora estamos en el precio 11. Ahora creo que vamos a
entrar en nuestra declaración if. Porque elimino una fila,
todo se desplaza. Así que ahora estamos en la fila cuatro. Y luego vamos a eliminar
esta fila ya que es 11. Y cuando lo elimino,
esta fila se ha ido. Y el problema que veo aquí, y usted puede notar esto
ya es que estamos en la fila cuatro. Pero a medida que vamos aquí a la fila cinco, todo cambió hacia arriba. Y como todo ha
cambiado hacia arriba, la fila por aquí, eso es $16 es ahora la fila cuatro
porque todo cambió hacia arriba. Ahora cuando corro para
comprobar el siguiente precio, estamos en 20 y nuestro precio de 16 para la fila cuatro no está
siendo evaluado. Esto debe suprimirse también. Pero desde que eliminamos
fila para esto se mueve hacia arriba y luego ya
pasamos a la fila cinco. Nos hemos saltado
por encima de esta fila. Entonces cada vez que eliminamos una fila, esencialmente
saltamos una
línea de información. Ahora esto está dejando un 16 y realmente se está
mostrando aquí, lo cual es bueno
que esté exponiendo. El problema es porque
se supone que debemos eliminar
dos líneas seguidas. Y así como
siempre estamos saltando la línea después de eliminar una, que está mostrando que la regla no
se está ejecutando correctamente. Así que vamos a hacer lo
mismo de nuevo aquí, donde estamos mirando la fila a. fila ocho se borra. 16 se mueve a la fila ocho. Y luego en el siguiente bucle, ya
vamos a
estar en la fila nueve. Y así este 16 nunca va
a ser evaluado ya que
se mueve hacia arriba uno. Entonces ese es nuestro problema. Una forma muy sencilla que podemos resolver que es después de que eliminemos una línea, solo
podemos decir que yo
igual a yo menos uno. Entonces lo que eso significa básicamente
es que vamos a eliminar. En este caso,
eliminamos la fila ocho, pero luego vamos a mover i hacia atrás para convertirnos en el
valor de siete. Entonces cuando bajamos por esta línea e incrementamos i1, volvemos a estar en la fila ocho. Entonces cuando eliminemos una fila, sabemos que todos los datos
que aún necesitamos evaluar van a
disminuir una fila. Y
básicamente vamos a respaldar un paso. Y luego volveremos a evaluar fila ocho,
que sería 16. Entonces veamos si eso funciona. Voy a detener todo
esto. Agreguemos nuestro 11 de vuelta aquí solo para rebobinar
nuestra información. No voy a añadir estos datos aquí. Así que sólo voy a
poner 11 aquí para nuestros propósitos, sólo
para esta prueba. Entonces estamos respaldando aquí, tenemos 1116 todo a la vez. Así que probemos esto. Voy a recorrer por aquí. Por fin estamos en 11. Vamos a eliminar 11. Esto es cuatro y el problema es que estamos saltando
los cinco la próxima vez, vamos a respaldar
nuestro valor de índice I, uno. Por lo que ahora tengo tres. A medida que va al siguiente
bucle, se convierte en cuatro. Ahora estamos de vuelta aquí el 16. Y luego lo llamamos 16
y lo estamos eliminando. Por lo que marcamos para, y luego por otra vez, porque 11 fue la fila cuatro y luego 16 también fue una fila cuatro y ambos
han sido borrados. Ahora seguimos en cuatro porque cada vez que
eliminamos una fila, estamos haciendo una copia de seguridad de un índice. Y lo importante
aquí es realmente, nos estamos metiendo en el tema de un algoritmo más complicado. Y esto realmente va a ser donde está el crecimiento
cuando estamos aprendiendo automatización y
programación y codificación en general es mucho
del tutorial hasta ahora en esta clase está aprendiendo las diferentes funciones
que podemos hacer. Las líneas de código muy específicas. Pero la
parte complicada y de dónde viene
el poder real
es cómo podemos llegar algoritmos sobre
cómo secuenciar las acciones de este código juntos para realizar
lo que queremos. Así que vamos a ejecutar todo esto. Vamos a
terminar de correr esto. Y aquí hay otro problema. Eliminamos con éxito
todos los precios de 1116 aquí, pero golpeamos un error. Entonces veamos cuál es ese error. A pesar de que parece que
terminamos todo correctamente. Tenemos un error
porque tengo 16 años, así que estamos buscando la fila 16. Pero si destacamos
todos estos aquí, podemos ver que
sólo tenemos 15 filas. Eso es porque estamos ejecutando este bucle hasta el
final del recuento de filas, que fue de 25, si te acuerdas
de nuestro último video. Pero como estamos eliminando filas, el recuento de las
filas está bajando. Pero esta cosa sigue
pensando que se supone que debe ejecutar este bucle de uno a 25. Y a medida que eliminamos filas, esta tabla se encoge y se encoge. Y luego donde estas
almohadillas carne y causa un error es piensa que
necesita correr el 25, golpea 16. Pero hemos eliminado tantas
filas que no hay fila 16. Así que ahora vamos a parar
esto y vamos a hacer esto en realidad de
una manera diferente. Entonces esta fue la
solución para resolver el problema de indexación de filas. Y esto se logró solución. Te voy a mostrar cómo
suelo hacer esto. Sólo para que no tenga que
meterme con estos datos. Voy a cambiar esta regla. Vamos a eliminar
los precios donde el precio es 20 va a caber a estos datos más
adelante para que podamos
hacer otros ejercicios. Pero por ahora, voy a cambiar esto para eliminar es igual al salto. Precios que son 20. Ahora hay pruebas es un
poco más pequeña aquí. Vamos a seguir
mirando los datos. Entonces el código al mismo tiempo. En lugar de incrementar
hacia atrás, vamos a resolver este
problema de una manera sencilla, más elegante aquí. Y también va a
resolver todos los problemas donde estamos haciendo bucle
a través de todas las filas, pero el recuento de filas está disminuyendo. En lugar de pasar de una a
la cuenta de todas las filas. Básicamente yendo de uno
y bajando la lista, vamos a revertir esto. En realidad podemos empezar con I
es igual al número más alto. Entonces en este caso,
tenemos 15 filas. Si volvemos a correr esto, el recuento de filas
va a ser 15. En realidad voy a tomar esto y ponerlo al principio. Entonces iguala 15 en este caso a uno porque vamos a contar al revés 15 abajo el uno. En realidad no podemos hacer esto y
esto causará un error, creo que intentemos ejecutar esto. Ya ves, acabamos de saltarnos todo el camino hasta el final,
ninguna de esta rampa. Eso es porque necesitamos decir explícitamente cómo
vamos a hacer pasos. Entonces como parte de estos para
bucles con el índice, podemos agregar paso menos uno. Y eso le dice
que cada bucle, vamos a dar un paso atrás. Vamos a dar un paso
atrás el valor de uno. Ahora vamos a ejecutar esto y
empezamos en la fila 15. Y luego lo
vamos a seleccionar. Así que ahora empezamos todo el camino
aquí abajo y vamos a hacer
exactamente lo mismo. Vamos a probar la fila
y luego vamos a eliminar. Entonces tenemos que cambiar nuestro
papel aquí donde el precio apunta solo porque
no tenemos los mismos datos. Y vemos que saltamos por aquí. Ahora nuestro precio es de 20, ya que vamos
de abajo a arriba, entramos aquí,
marcamos la ruta 14. Ahora la parte bonita de esto donde estamos vendiendo
ambos de estos problemas a la vez es cuando elimino esto, 50 va a subir, pero ya
comprobamos esta fila. Y sabemos que no es una de las filas que queremos abanderar. Y así cuando elimino
esto, esto es real 14. No tenemos problema que los datos debajo de la línea que
eliminamos se movieran hacia arriba. Y así como nos incrementamos desde
la fila 14, no
tenemos que volver a
revisar el carril 14. En cambio, tenemos que ir a 13. Básicamente, este
ajuste que hicimos para resolver ese problema ya
no es necesario. Ahora cuando pasamos por
el siguiente bucle, fila 14, subimos a la fila 13. Y vamos a
revisar eso otra vez. Y vemos que son 20. Y luego se va
a eliminar esta fila. Pero entonces cuando
vaya de 13 a 12, vamos a estar
aquí arriba y seguimos
revisando nuestras filas
en la secuencia, a pesar de que los datos
debajo se mueven alrededor, ya que nos estamos moviendo
de abajo a top, no
nos afecta el hecho
de que los datos debajo de las
filas eliminadas se están moviendo. Esto hasta 2020. Y luego desde que
vamos hacia atrás, vamos a parar en uno. Y de nuevo, no
vamos a bajar
donde las cosas están cambiando
y nos da problemas. En cambio, vamos hacia arriba donde los datos son sólidos
hasta que los eliminemos. Y así ahora esto va
a seguir funcionando y
no va a
encontrarse con un problema donde a medida que
pasamos por todos los datos, que golpeamos un error
porque nuestra fila cuenta, vamos a cambiar eso
y eliminamos eso. Y ahora estamos abajo a
esta lista muy simple de solo nuestras
filas sobrantes en que corrió, tenemos todo el camino
a través sin ningún error.
57. Excercise elimina ciertas filas Lvl2: Ahora que vimos cómo
podemos limpiar las filas, solo
quiero dar
una demo aquí de lo complicado que
realmente podemos empezar a usar estas reglas mientras las
ponemos juntas. De nuevo, creo que nos estamos complicando
mucho en base a
donde espero que estés en
nuestras clases en este punto. Pero quiero usar esto como
un video donde solo un poco demuestre cuán poderosa puede empezar a llegar
esta automatización. Así que no te preocupes por
seguir demasiado. Es más una prueba de concepto. Por lo que tomé aquí estos datos
y agregué más datos aquí. Simplemente pon algunas cosas al azar, algunos números para
que intentemos limpiar y poner algunas
reglas complicadas en contra. Algo que quiero
hacer aquí es que solo quiero echar un
vistazo y en
realidad no vamos a usar
esto en nuestros datos. Muchas veces no
tendremos que nuestro conjunto de datos. Pero hagamos algo como tomar nuestro precio y lo vamos a multiplicar por nuestra
cantidad por aquí. Y estoy poniendo esto
por aquí solo para nuestra referencia antes de que
iniciemos este ejercicio. Si arrastro esta celda aquí abajo, vamos a ver
por todas estas líneas, específicamente no
lo
estoy haciendo parte de la mesa
porque es sólo por referencia que estamos tomando
nuestra cantidad veces nuestro precio, y terminamos con todos
estos números por aquí. Ahora con nuestros números por aquí, hagamos un
ejercicio para que hagamos. Vamos a decir eliminar
filas donde cantidad, precio es un múltiplo, cinco. Entonces tenemos esto. Entonces echemos un
vistazo a las cosas que serían múltiplos de cinco. Básicamente, eso significa que si
divide el número por cinco, se obtiene un número entero. Así que voy a cambiar
esto por aquí y no un
punto decimal como este. Si venimos por aquí, podemos pasar y
vemos si no lo es, vamos a ver,
vamos a eliminar filas que son un múltiplo de cinco. ¿ Qué tal si eliminamos filas que no
son un múltiplo de cinco? No es un múltiplo de cinco. Entonces eso significa que éste aquí resaltará esto
solo por referencia. Entonces estamos viendo estas filas por aquí no son múltiplos de cinco. Entonces no voy a
seguir haciendo esto. Pero sólo una especie de ver que si no es un
múltiplo de cinco, cuando multiplicas
cantidad y precio que esas son las filas de las que
queremos deshacernos. Así que voy a
esconderlos ahora mismo. Puede que no los volvamos a mirar. Solo quería darte una idea de lo que
va a pasar, que
nos va a ser invisible aquí en la interfaz de usuario. Pero esa es la regla que
vamos a hacer. Volveremos
aquí a nuestro código VBA. Ya tenemos el código que
escribimos en la última lección, que es la líder,
nuestra bandera de precios de 20. Entonces en cambio, vamos a
añadir algo más de lógica aquí. Voy a decir precio. Vamos a decir que la cantidad es igual. Tenemos que declarar
nuestra variable aquí, dim cantidad, como podríamos
llamarla larga o doble. Ya sea un decimal o no, no hemos usado decimales, pero por si acaso lo
llamamos doble, vamos
a necesitar conocer el índice de nuestra columna de cantidad si estamos siguiendo la lógica
que usábamos antes. Entonces les vamos a decir que el índice de columna de
cantidad es igual. Simplemente podemos tomar de esta fila debajo de ella tabla
que enumera columnas. Cantidad, en realidad toda
la palabra hacia fuera. Entonces eso es porque le
pregunté cuando escribió la palabra dim aquí. Así que estamos declarando todavía. No lo estamos declarando aquí. Lo sentimos, sólo estamos
estableciendo un valor o no declararlo aquí. Por lo que el
índice de columna de cantidad debe ser a, precio debe ser tres. Cuando se utiliza esa información aquí, donde la cantidad es igual. Y vamos a tomar
esta información por aquí. Y luego en lugar del índice de columna de
precios, solo
vamos a estar
buscando índice de conteos de cantidad. Así que vamos a conseguir
el precio,
vamos a conseguir la cantidad. Y entonces vamos a
buscar simplemente lo llamamos producto, que es la
multiplicación de los dos. Llamaremos a eso un doble. También. Puede notar
que puedo declarar múltiples variables en una línea. Entonces eso es lo que estoy haciendo aquí. Puedes separarlo con
cava y ya no necesito usar el dim call out. Y puedo declarar múltiples
variables con una línea. Así que eso es lo que me estás
viendo hacer aquí. Entonces el producto es un doble. Voy a decir producto
equivale a precio veces cantidad. Entonces ahora lo que estábamos
mirando cuando estábamos describiendo antes no es el
precio ni la cantidad. Queremos ver si el producto, que es la
multiplicación de los dos, es divisible por cinco. Puedes buscar esto. Este es en realidad
un término diferente, que es mod cinco, que está comprobando si es o
no un múltiplo de cinco, básicamente haciendo lo
mismo que estábamos haciendo manualmente antes. El cual es ver que
si lo divides, hay algún resto es igual a 0. Entonces esto está recibiendo
el resto. Cuando se divide la cosa de la izquierda por el
valor de la derecha. Entonces a medida que pasamos por esto,
probemos esto. Destacamos las
primeras filas para que
podamos echar un vistazo y ver si nuestra
variable de alineación de expectativas no está definida aquí. Eso es porque no
declaré esta variable. Así que voy a venir aquí. Y así ahora tenemos nuestro índice de columna de
precios y nuestra columna de cantidad convexa. Vamos a correr esto y ver
si va sin problemas. Nuestro primer intento aquí, oh, olvidé que vamos
de abajo a arriba. que básicamente
significa que va a ser difícil para nosotros ver
qué está pasando aquí. Así que hagamos nuestra
regla muy rápido. Justo para que podamos ver desde
la otra dirección, de abajo a arriba a qué
filas van a. Vamos a agarrar una pareja aquí. Por lo que queremos múltiplos de
cinco se van a quedar. Entonces todas estas filas
van a ser eliminadas. Y entonces esperamos que
estas filas también se eliminen ya que no
son múltiplos de 5335 mil son. Entonces echemos un vistazo a
este producto mod 549. Estamos viendo este 49 por aquí mientras miramos nuestros productos. Entonces eso funciona correctamente. Y luego saltamos por encima de él. En realidad escribió esto a la inversa. Mod cinco es igual a 0 está
diciendo entrar aquí. Si es un múltiplo, queríamos eliminar los que no
son un múltiplo de cinco. Entonces vamos a cambiarlo de
igual a dos no es. Empecemos por todos aquí.
Voy a detener esto. Vamos a ejecutar esto. Estamos de vuelta aquí a las siete
veces siete es 49. Producto mod cinco no es
un múltiplo de cinco. Y entonces ahora estamos aquí. Hemos marcado la fila 36, y luego la
vamos a eliminar. O producto de nuevo, 76,
eliminar, eliminar, eliminar. Y luego ahora estamos golpeando
nuestra primera fila que esperamos que nuestro producto sea un
múltiplo de 533 aquí. Y luego saltamos. Entonces estamos saltando
por estas filas aquí, colgando otra ruta
y la estamos eliminando. Y sólo voy a golpear el juego y correr a través de todo esto. Ver, hemos eliminado nuestras
filas donde el producto de la cantidad y precio
no es un múltiplo de cinco. Solo quería mostrar esto como una demo de cómo puedes juntar
estas reglas. Y por supuesto, los
procesos que podemos programar pueden llegar a ser mucho
más complicados que esto como necesitamos.
58. 2.12 Datos en movimiento Añadir objeto de lista de fila: En nuestros últimos videos, repasamos nuestras
tablas de nombres y nuestro objeto de lista. Entonces esto fue un poco un desvío de lo que estamos
creando antes, que es este formulario de compra, que mueve datos de un formulario de entrada a una tabla de
datos por aquí. Entonces ahora que nos hemos
familiarizado con cómo interactuar con
este objeto de lista,
vamos
a construir esto de nuevo en nuestro formulario de compra y
ver cómo podemos asegurarnos que nuestro formulario de compra aún
agregará datos de esta pestaña a nuestra tabla
de datos de aquí. Lo primero, limpiemos esto y lo hagamos un
poco más pequeño, solo para que podamos ver
los datos más fáciles. Haré clic derecho
aquí, eliminaré filas, y simplemente hacemos una tabla más pequeña para
que no tengamos que ver
todo eso a la vez. Ahora vamos a volver aquí. Vamos a cambiar algunos números aquí, solo para que tengamos
algo más que mirar y ver si
podemos agregarlo a la otra pestaña. Se ha agregado la línea. Venimos aquí
y vemos el código que escribimos antes para ese botón
sigue funcionando aquí. Entonces eso es interesante
porque
volvamos a nuestro código para el botón. Estoy haciendo clic en el botón,
Desarrollador y Ver Código. Este es el código que se ejecuta
cuando hacemos clic en ese botón. Y no hemos actualizado en absoluto
esta subrutina. En base a todas las actualizaciones que hemos hecho respecto a
nuestro objeto de lista. Tenemos nuestra validación
de los videos anteriores, y tenemos nuestra lógica de añadir línea
de los videos anteriores. Si los
observas, recordarás que
la forma en que funciona esto
no es usar el objeto list que hemos pasado en
las últimas lecciones. Pero estamos utilizando una celda superior izquierda de los datos llamados
compras de mesa y usando
eso como ancla,
ancla esto para que podamos
ver ambos lados a la vez. Aquí. Estamos usando eso como ancla. Estamos contando
solo un gran número por aquí para nuestro bucle porque no sabemos
cuán grande es este dato. Y como vimos con
nuestro objeto list, ya no
necesitamos hacer eso
si usamos el objeto list. Y contamos todo el camino hacia abajo hasta que veamos
nuestro próximo espacio en blanco, que está justo aquí. Y cuando vemos nuestro próximo espacio en blanco, entonces lo marcamos
como nuestra próxima nueva fila. Y luego agregamos nuestra información
a la siguiente nueva fila. Entonces toda la lógica que teníamos
antes sigue funcionando, pero es la vieja lógica. No está utilizando ninguno
de los beneficios de este nuevo objeto de lista
que hemos creado, esta tabla de nombres en
la hoja Excel. Y seguimos usando este
ancla y contando atrás, encontrando la siguiente nueva fila y
luego agregando la información. Una cosa que quiero
mostrarte es si hubiéramos creado este
objeto de lista tabla mal nombrada. Para empezar, no
tendríamos esta celda ancla
llamada compras de mesa. Y no estaríamos
haciendo este proceso donde estamos
contando las filas. Y si estamos trabajando
con columnas, contando las columnas
a la derecha, todas basadas en este ancla. Entonces si venimos por aquí a fórmulas y luego Administrador de Nombres, vemos que tenemos compras de
mesa y eso es
este rango con nombre aquí. Aquí está nuestro cable con nombre, nuestro objeto de lista por aquí. Eliminemos esto porque
muchos casos
habríamos empezado a usar este nombre,
la tabla, en lugar de usar
este proceso de anclaje superior izquierda. Ahora que conocemos
este mejor método, vendremos por aquí
y eliminaremos esto. Sí. Ahora cuando hacemos clic
en esta celda, ves que ya no se
llama compras de mesa. Ahora, vamos a
esperar que este proceso ya
no funcione
porque como acabamos de ver, se basa en el uso
de este rango con nombre. Entonces cuando hacemos clic en esto, creo
que no va a ser capaz averiguar qué
es esto ahora que ya no
existe. Entonces vemos que eso
sucedió justo ahí. Y ahora nuestro botón enviar para agregar a los datos ya
no funciona. Entonces nuestra lógica anterior, que se basaba en eso
aquí, ya no se aplica. Entonces veamos lo que
tenemos que hacer para que este trabajo funcione con nuestra
lista objeto por aquí. Así que solo podemos tomar todo
este código por aquí, y
empecemos desde cero. Entonces vamos a eliminar todo esto y
necesitamos nueva lógica ahora
que estamos usando este objeto list de
nuestro ejercicio anterior, recordaremos que
queremos llamarlo tabla. Y queremos declarar
la variable que representa este
objeto de tabla por aquí. Entonces diremos tabla
como objeto de lista. Entonces vamos a establecer iguales. Tenemos que llamar a
nuestras hojas de trabajo. Objetos en el nombre de nuestra tabla de nombres por aquí es TBL comprado sabio. Yo creo. Podemos volver aquí y confirmar que
resaltando esto, yendo a nuestra configuración de mesa. Y la gente compra
líneas y lo confirman. Ahora que tenemos nuestra mesa aquí, en lugar de eso para
bucle que se desplazaba todo el camino hacia abajo cada celda y encontrando la siguiente fila en blanco. Y viste que si
tienes miles de filas, te desplazarías hacia
abajo miles de filas y encontrarías la
siguiente celda en blanco. Y hemos puesto un
marcador de posición de 99 mil, igual que allí un número enorme. En cambio, puedo hacer algo. Al igual que esta tabla que enumera filas. Así que probemos esto. Esta línea de código
sólo va a saber dónde está la siguiente nueva fila y
añadir una nueva fila allí. Y no le he dicho qué
contenido entra ahí. Pero porque tenemos
formateo en esta mesa, creo que vas
a ver que la tabla amplía una nueva fila apareciendo en el
formateo de la tabla, pesar de que
no le dijimos qué contenido para poner ahí. Así que voy a poner un salto de
línea justo aquí
porque nos vamos a centrar
mucho en este código para que cuando
estemos probando esto, sólo
voy a
ejecutarlo y va a saltar por encima aquí a nuestro nuevo código. Por lo que agregamos una nueva fila con
algo simple como esta. Y esto reemplaza
todo nuestro cuatro bucle, todo
ese proceso que tuvimos de desplazarse hacia abajo y verificar
una nueva fila y marketing. Qué número es nuestra nueva fila. Lo siguiente que queremos hacer es
descubrir cómo realmente poner contenido ahí
desde este formulario. Entonces ahora que tenemos una nueva fila, voy a crear
otro objeto. Y tenemos un objeto de fila de lista. Voy a llamarlo
L rho, fila Listas. Y se ve
como objeto list y todas estas otras variables tienen un tipo de variable u tipo de objeto. Hay un objeto de fila de lista. Y entonces ahora cuando creo es solo porque estoy en modo
break por aquí. Entonces detendré la
macro y procesaré. Por lo que queremos tomar esta cosa
y este objeto de fila de lista, queremos convertirnos en la
nueva fila que agregamos. Entonces voy a decir set L rho es igual a la nueva fila
que se crea. Entonces esto se va a ejecutar
y crear una nueva fila. Y mientras lo está haciendo, tan pronto
como crea
esa nueva fila, va a establecer esa nueva
fila para que sea este objeto, la variable fila que
acabamos de crear. Ya veremos cómo funciona esto. Porque si digo L
rho ahora arreglado, consiguió selecto,
voy a ejecutar esto. Ya ves creamos una nueva
fila después de esa línea, y aquí estamos con una nueva fila. Y luego si ejecuto esto
que es L rho select, ves L rho, R objeto ahora es esta nueva
fila que creamos. Ahora podemos empezar a hacer
algo con esa fila. Y usted dice range, igual que hicimos desde nuestro
último ejercicio cuando estábamos revisando los valores de celdas
específicas en esa ruta. Si dije rango un valor de
punto es igual, estoy poniendo información
en esta tabla ahora. Y así es como
podemos referenciar, igual que en nuestras últimas lecciones, los valores de cada
celda consecutiva. Sólo en lugar de solo
leer el valor. Y la última vez estábamos
haciendo algo
de limpieza de los datos
leyendo el valor. También podemos usar este mismo concepto para poner
datos en esa celda. Entonces si esta lógica, puedes empezar
a ver cómo podemos combinar estos conceptos y
mover los datos de nuestro formulario a la nueva
fila que creamos. Así que empecemos ese proceso
cuando diga ítem de dimensión. Y sólo voy a seguir
adelante y crear variables para cada uno de
los campos en el formulario aquí, llamaremos cantidad a
lo largo de un doble. Olvidé la palabra como aquí. Declararemos estas
variables por aquí. Usando nuestros nombres de rango. Ese valor. Nuestra cantidad es cantidad. Ese valor. Déjame asegurarme de
tener el nombre correcto ahí. Eso se va a formar precio. Sólo estoy adivinando aquí, pero
si nombramos las cosas
correctamente, seguirá ese
patrón por un precio. Y luego ahora como vimos, podemos entonces colocar contenido en la fila usando este índice de rango. Entonces si tomo esto y ponemos
artículos en nuestra primera columna, cantidad en un segundo y
precio y nuestra tercera, se verá así, 23. Y por aquí, no
voy a pasarle una cuerda. En cambio vamos a
pasarle las variables que usamos como intermediarios aquí, cantidad, precio. Y luego tenemos una
marca de tiempo por aquí, que no obtenemos
del formulario de usuario. Obtenemos la marca de tiempo de
solo nuestro propio código VBA. Entonces diremos VBA, que es una función VBA incorporada que nos conseguirá nuestra marca de tiempo del momento en que se ejecuta este código. Así que probemos esto.
Voy a golpear a F5 para correr. Como error ahí porque
hice un error tipográfico en F5 para correr, saltamos hacia abajo a donde
ponemos nuestro punto de interrupción y voy a usar F8
para pasar por el código. Entonces ahora estamos declarando
nuestras variables. Artículo, cantidad es cinco, precios ocho, o
agregando una nueva fila. Realmente no necesitamos esto, pero estamos seleccionando la fila
que usamos para esa demo. Y luego nuestro primer spot
en esa fila es el artículo, cantidad que precio,
que marca de tiempo. Y se ha agregado la línea. Entonces no necesitamos esto, que solo lo estaba seleccionando para
que lo veamos. Veamos, terminaré de correr esta línea y luego volvamos a
probar nuestro botón. Golpeamos a Enviar. Todavía
tengo mi punto de descanso aquí, así que está
parando en esta línea. Entonces voy a apagar
eso al golpear a F9. Podría haber hecho clic
aquí también para activar y desactivar el
punto de ruptura. Tengo que terminar de
correr por aquí. Y dice que se
ha agregado la línea. Esto vuelve a subir. Sólo para ver que
algo cambió. Aquí. ves que somos capaces
de agregar una nueva fila a nuestros datos usando
este objeto list sin tan complicado
de un proceso como antes que lo estábamos haciendo
sin el objeto list. Otra cosa de nuestra lección
anterior que
mencioné fue que realmente no
me gusta usar estos
números aquí mismo. Porque el problema,
como vimos antes, es si agrego otra columna aquí, esto tampoco va a funcionar. Así que voy a golpear a F5
y simplemente ejecutar esto. ha agregado una nueva línea y se ve que todo está
desalineado. Ahora, mi precio entró en tercera columna y mi marca de tiempo
entró en mi cuarta columna. Pero esto ya no funciona
correctamente. Entonces para resolver ese
problema, haremos lo
mismo que hicimos
en las últimas lecciones, pero solo
lo construiremos en nuestra forma aquí. Te voy a mostrar el largo
camino que hicimos la última vez. Y luego construiremos esto
directamente en el código. Pero digamos demencia también. Índice de cantidad así
como índice de columna de marca de tiempo larga. Entonces vamos a
utilizar estas variables. Eso es sólo un
pisón para llegar al resultado final aquí. Cuando digo, no
llamo índice igual. Y luego tenemos nuestra mesa y estamos usando nuestra lista libras, y podemos
llamarlos por su nombre. Y la lista de columnas por
nombre tiene un número de índice. Por lo que ahora podemos usar este
proceso para averiguar con
qué columna estamos trabajando en base al nombre real. Entonces vamos a hacer cantidad
que de forma incorrecta. Haremos cantidad,
precio marca de tiempo. Y queremos emparejar esto con la llamada real
en nuestra mesa aquí. Entonces esa es la cantidad del artículo. Contamos con precio en marca de tiempo. Y entonces ahora, en lugar de
poner este número aquí, 1234, podemos
alinear estos ítem llamado índice. Así que ahora en realidad estamos
averiguando con qué columna estamos
tratando de trabajar aquí. Sin tener que escribir
el número directamente. El código en sí
va a
averiguar dónde
se basa la columna en el nombre. Lo pasamos por la columna. Entonces vamos a correr esto por aquí. Y ves nuestra
columna de artículos aquí es una. Cantidad columnas
a la columna de precio es cuatro porque tenemos esta columna
basura que agregamos, y luego las
columnas de marca de tiempo cinco. Ahora estos números
no están codificados. Que nuestro proceso aquí
está averiguando dónde está
cada columna mientras
está haciendo el proceso. Y ahora ves que todo
está funcionando correctamente de nuevo. Y se ajustó para
esa nueva columna que
agregamos sin tener que
volver y actualizar el código. Usted ve aquí. El beneficio de esto
es que si vengo aquí y elimino esa columna, no
tenemos que
actualizar y cambiar yano
tenemos que
actualizar y cambiar
los índices de columna. Podemos ejecutar esto y
todavía tenemos una nueva fila que
se agrega aquí mismo. Lo que hago a menudo es ahorrar tiempo y no hacer todo esto con estas variables almacenando
el número de índice. Puedes poner esta información directamente en estos paréntesis. Y hace que la línea de código sea un poco más
difícil de mirar porque tenemos estas líneas
realmente complicadas con mucha información
anidada. Después de un tiempo, sólo como que te acostumbras a mirar eso. Y hay algunas formas de hacer
esto un poco más simple, pero esto ahorra el tiempo que tardamos en crear
estas variables. Aquí. Sólo estamos haciendo
exactamente lo mismo
solo que no estamos usando estos en el medio para
pasar los valores hacia abajo. Solo voy a
usar estos comandos directamente donde
quiera usarlos. Prueba esto. Golpear presentar un 11, y
ahí está nuestra nueva línea.
59. 3.1 Proyecto de herramienta de cita: introducción: Hola a todos. Por lo que quería
cambiar el proyecto que estamos trabajando
aquí en nuestros ejemplos. El proyecto en el que estábamos trabajando antes de que fuera una compra
básica cálida. Y entonces quiero
cambiarlo de nuevo en algo que tengo mucha familiaridad y que pudiéramos
construir todo tipo de características
diferentes a medida que
pasamos por nuestras lecciones. Quiero cambiar
esto por un creador. Y luego podemos crear muchos procesos
diferentes a partir de esta idea de una herramienta que ayuda a un
negocio a crear cotizaciones. Para ello, solo
quería grabar este video sobre enmarcar el principio
antes de meternos en cualquiera de los códigos de automatización
VBA real. Así que vamos a imprimirlos cómo podría ser un cráter
rápido. Y voy a empezar desde cero
completo aquí. Por lo que ves tenemos libro uno
con una hoja de Excel vacía. Y iremos de ahí
y solo vamos a volar a través
de algunas de las cosas que
cubrimos en nuestros
tutoriales pasados aquí. Así que vamos a
salvar esto y
sabemos que vamos a tener
macros ahí dentro. Así que sigamos adelante y guardemos este archivo dondequiera que lo guardemos. Y queremos guardar
esto como un XLS, un libro de trabajo habilitado para macros porque sabemos que
vamos a poner macros en él. Pondremos una etiqueta en la parte superior. Y vamos a imaginarnos qué insumos
tendría alguien mientras está
creando una cotización. Por lo que podría tener
algo así como un cliente. Algo más que podríamos
tener es jack name con una persona
con la que estamos hablando quien solicitó la cotización. Normalmente, podrías hacer
algo como recibir un correo electrónico de alguien como una
solicitud de cotización, entonces podría tener algo así como los artículos de línea que se están
comprando en la cotización. Por lo que vamos a tener línea de artículos aquí. Y tendrás
tu número de línea. Y tendrás
tu número de artículo. Y tendrás una descripción. Cantidad. Precio unitario dirá precio unitario. Y tendremos tu precio
extendido, que es el
precio total de esa línea. Y así esto va
a ser más de una mesa. Y para una cotización, puedes obtener más de un artículo de
línea comprado
por la cotización. Por lo que aquí arriba, podemos agregar también
un número de cotización, porque diremos que el
número es nuestra primera cotización. Y estás comprando
algo así como producto a. Producto B, estás comprando
cinco de estos, diez de estos. Entonces aprendimos antes. Entonces podemos convertir esto
en una tabla de nombres. Entonces vamos a
formatear esto como una tabla. Otro atajo que
podrías hacer es Control T. También
crearemos una
tabla fuera de aquí. Y puedes decir que mi mesa tiene
encabezados y hago clic, Ok, y ves que creó nuestra
tabla de líneas en una tabla de
nombres real aquí, nuestro objeto de lista que
vamos a usar en nuestro código VBA. Mejoremos un poco
las miradas de esto. Así que apegémonos al tema
básico que tenía antes. Entonces no tengo que pensar tan
duro en los colores aquí. Sólo vamos a hacer
blanco y negro aquí por nuestros campos. Se pegará a este
tema para la mesa. Entonces vamos a hacer cabeceras negras. Y buena parte de estas mesas es que solo puedes elegir
diferentes colores. Y lo va a tema para ti. Hagamos que esta
forma se vea un poco mejor y vamos a quitar
las líneas de rejilla aquí. Voy a crear
algunas fronteras por aquí, que es un poco
dejarlo con este aspecto. Y ahora tenemos algo
que parece una forma básica similar al formulario de compra en
el que estábamos trabajando antes de lo que
vamos a enmarcar este nuevo proyecto para
crear una cotización. Así que sólo voy a parar esto aquí y seguiremos adelante
en el siguiente video.
60. 3.2 Herramienta de cita Crear carpeta: Ok, Ahora que tenemos un formulario básico de cotización por
aquí que enmarcamos, imaginemos lo que podría
pasar cuando un negocio recibe una solicitud
de cotización de uno de sus clientes. Podrían obtener una solicitud de
presupuesto a través de un correo electrónico, y luego viene con
todos estos archivos extra. O es posible que desee simplemente guardar ese correo electrónico en sí que podría venir de algo
como Microsoft Outlook. Qué tipo de pega a
los productos de Microsoft aquí para nuestras demos. Por lo que entramos Cotización número uno. Digamos que estamos haciendo un seguimiento de nuestras cotizaciones con un número de
cotización aquí. Y tal vez queramos hacer algo
como crear una carpeta. Entonces aquí tenemos nuestro archivo
co-creador en el que
estoy trabajando ahora. Y es posible que tengas
algo así como archivos. Vamos a crear una nueva carpeta aquí. Y diremos cotización 000001. Y recibimos nuestras
primeras solicitudes cuando se inicia el sistema. Y tal vez queramos arrastrar nuestra solicitud de archivos de cotización
y dejarlos caer aquí, sea cual sea lo que nuestro cliente nos envíe, esa es información sobre la
cotización que están solicitando. La primera característica que quiero
intentar construir aquí es una forma de
crear automáticamente estas carpetas. Haremos algo
donde, por ejemplo, si escribimos en Cotización
número dos aquí, estamos en nuestra segunda cotización. Y luego haremos un botón
Crear carpeta para que no necesitemos crear manualmente estas carpetas aquí en este sistema de carpetas. Así que empecemos a
eso vendrá aquí. Haremos un botón y
llamaremos a este botón Crear. Así que ahora si venimos
a nuestras macros aquí, no
tenemos nada
porque este es un libro de trabajo limpio que acabamos de
empezar en el último video. Por lo que no tenemos ningún
módulo ni macros grabados. Insertemos una nueva macro o
más bien insertemos un nuevo módulo, que es una sección para que creemos
algunas macros. Y lo categorizaremos. Llamaremos a este
manejo de archivos como nombre de nuestro módulo. Empecemos en una nueva
subrutina aquí. Y lo guardaremos por un minuto y describiremos
qué hace esto. Para almacenar archivos. Esta es sólo una buena práctica, es poner un comentario
para describir en detalle lo que podría hacer cada subrutina
o función, sobre todo si no es
algo tan intuitivo. Por lo que sólo quiero mostrar eso, aunque este nombre es
bastante descriptivo. Entonces al principio solo hago
algo como decir creando. Y adjuntemos este botón a esta macro que
acabamos de crear. Y así porque
creamos esta subrutina, tenemos esta gran carpeta de cotizaciones. Y ahora he asignado este botón para trabajar
con esta subrutina, y hacemos estallar este mensaje y aún no estamos haciendo
nada más. Por lo que vamos a crear
nuestra carpeta de cotizaciones, en este caso usando
este número por aquí. Entonces vamos a crear una variable
que va a almacenar este número de cotización.
Llámalo cotización No. Como. Y diremos
como un largo por ahora. Y vamos a conseguir esto
de la interfaz. Por lo que ahora que hemos
declarado esa variable, se
puede decir igual a rango. Y tenemos que traer
esta celda por aquí. Entonces esta celda es antes, pero puede recordar de nuestras lecciones anteriores que
esta no es una buena práctica. Podríamos hacer esto. Pero entonces si
movemos las cosas o insertamos filas, el campo número de cotización
podría ya no ser B4. Entonces vamos a
llamar a esta cotización No. Ahora cuando pasas el cursor
sobre esta celda, puedes ver que se trata de un rango con
nombre, llamado
Quote number. Para que podamos hacer esto, pero solo
reorganicemos esto. Vamos a construir
esta cosa en pasos. Para que pueda seguir demostrando
cada concepto a medida que avanzamos. Voy a cambiar esto un poco
para que podamos ver más de
la
carpeta de cotización verde de código para cotización. Y solo estoy juntando
la cuerda para mejorar nuestro mensaje para que
podamos ver qué está pasando. Por lo que ahora cuando hago clic en esto, hemos creado una
carpeta y he hecho un error tipográfico ahí quise
escribir para el número de cotización. Y así cuando corro
este abrigo de piel número dos y ves dónde sacando
con éxito el valor
de nuestra interfaz aquí. Ahora, queremos crear una carpeta en el directorio
justo por aquí. En este caso, hay
diferentes cosas que podemos hacer para que esto sea un poco
más inteligente. Pero voy a empezar
con algo más básico a medida que construimos
nuestros conceptos aquí. Entonces digamos que queremos
crear una variable para cuál es la ruta de la carpeta que queremos
crear la nueva carpeta. Entonces esta no es una carpeta nueva todavía. Queremos decirle
dónde queremos
crear esta carpeta,
que está aquí. Similar a saber por dónde quieres empezar aquí antes de hacer un clic derecho e
iniciar una nueva carpeta. Si lo hiciéramos de esta manera. Por lo que queremos conseguir
este camino justo aquí. Diga ruta de carpeta como cadena. Y luego declararemos
esta ruta de carpeta. Y por ahora, solo
voy al código duro, que podríamos
cambiar esto más adelante. Y sólo voy a copiar
y pegar esto aquí que copié de este camino de aquí arriba. Ahora tenemos nuestra ruta de carpeta. Queremos averiguar cuál es
nuestro nuevo nombre de carpeta. Entonces estamos haciendo todas las cosas que tenemos que hacer manualmente. Sabemos en qué carpeta
necesitamos comenzar ahora y necesitamos averiguar cuál es
el nombre de nuestra carpeta. Entonces si fueran dos, por ejemplo, queremos esta notación, pero por supuesto que hay una simplemente
cambiaría a ella también. Por lo que podemos decir nombre de carpeta. Podemos decir nuevo nombre de carpeta, ser cadena más descriptiva. Y voy a decir nuevo nombre de
carpeta igual. Y luego nuestra notación aquí
que vemos a la izquierda es número de cotización y luego 00000, estamos usando seis dígitos
aquí y luego dos. Por supuesto que esto no es lo
que realmente vamos a hacer. Necesitamos que esto sea una variable. Entonces podríamos querer hacer
algo como esto. Sabemos que tenemos nuestro número de
cotización aquí arriba. Pero tenemos este
problema de que cuando
lleguemos a nuestra cotización
número de ser diez, entonces vamos a
tener un 0 extra aquí. Entonces, ¿cómo podemos hacer que este número de seis dígitos se
ajuste a medida que obtenemos más
dígitos en nuestro número de cotización. A pesar de que esto funcionará
por ahora hasta llegar hasta las diez,
vamos a probar esto. Y así trataremos
con esto más tarde. Volverá a mover nuestro cuadro de
mensaje más abajo, creando nueva carpeta. Y diremos
aquí nuestro
nuevo nombre de carpeta sólo para probarlo. Y lo voy a ejecutar. Veremos creando carpeta de cotizaciones. Tenemos nuestros ceros aquí. Y eso es porque
dejamos esto en blanco. Entonces supongamos que
se supone que debemos hacer aquí. Y si hago clic en esta
cotización número dos. Por lo que ahora hemos creado el nombre de
nuestra carpeta, pero sí tenemos este problema de
que si esto fuera diez, no
nos estamos ajustando correctamente. Queríamos un número de seis
dígitos y ahora hemos empujado esto para que
se convierta en siete dígitos. Entonces lo que podemos hacer es eliminar esto y
solo queremos anexar aquí
el número de cotización. Si corremos esto, vemos diez. Y tenemos que forzar que esto
se convierta en seis dígitos. Para que podamos utilizar esta función de
formato. Muchas veces. Estas son
funciones incorporadas como parte de VBA. Y así si escribo VBA, y luego punto,
ves que obtengo muchas funciones
integradas que solo forman parte de VBA. Uno de ellos es el formato aquí. Y como lo hago formateo, vemos que tenemos nuestra
expresión, que es nuestro número, y luego el segundo parámetro, que está entre paréntesis aquí, tenemos la opción de
forzar la fórmula. Entonces si pongo en seis ceros aquí, se va a saber que
el formato que quiero es un número con seis dígitos, lo que sea que esté aquí. Entonces por ejemplo, puedo mostrarte aquí
abajo en la ventana
anterior, voy a hacer una impresión de debug
y decir 123123. Entonces vamos a hacer seis dígitos aquí. Me falta mi función de formato. Por lo que quiero escribir formato aquí. Y luego al golpear Enter, ves que esto
se ha llevado el de
aquí y luego lo hizo en formato
de sexto dígito. Y entonces la gran diferencia
aquí es cuando escribo diez, y luego si hago clic Enter
o presiono Entrar aquí, tenemos el número diez, pero nuevamente obligado al formato de
sexto dígito. Por lo que ahora podemos hacer esto. Y lo mismo que
acabamos de demostrar aquí
aplica donde tenemos número de
cotización y tenemos diez
en formato de sexto dígito. Y entonces si estuviéramos a las dos, seguiríamos teniendo aquí este formato de
seis dígitos. Entonces ahora que tenemos nuestro nuevo nombre de carpeta y nuestra ruta de carpeta donde
vamos a crear esa nueva carpeta. Podrías recordar de
nuestro video anterior, tenemos este comando make
directory, que va a
crear una nueva carpeta. Y luego abrimos esto y este es el camino que necesitamos. Entonces construyamos esta nueva
variable antes de usar esta. Entonces tenemos nuestro nuevo nombre de carpeta, pero hagamos uno nuevo solo para que todo quede muy claro. Nueva carpeta. Si estuviera haciendo esta herramienta, podría no tener todas
estas variables de piedra de paso para construir lentamente todo. Podría combinar estas cosas
con menos líneas de código, pero debido a que estamos haciendo
una lección de aprendizaje aquí, es más claro crear todos estos pasos para que veamos
lo que está pasando. Queremos que nuestra nueva ruta de
carpeta aquí iguale nuestra ruta de carpeta y combine eso
con nuestra nueva carpeta. Y ya sé que aquí
hay un tema. Así que vamos a demostrar que a
propósito estoy dejando
algo aquí afuera. Entonces si hacemos una impresión de debug
al final de esto, de hecho, incluso
podemos usar nuestro cuadro de mensaje seguiría moviendo
esta cosa hacia abajo. Creando carpeta de cotizaciones. Y vamos a hacer de esto
la nueva ruta de carpeta. Pondré un nuevo colon aquí. Y si ejecutamos esto, ves como crear
nuestra nueva carpeta de cotizaciones, tenemos nuestra nueva variable, esa es la ruta de carpeta a la izquierda, combinada con una nueva
carpeta que estamos creando. Y lo que notamos es que nos falta una barra invertida por aquí. Entonces si vinimos aquí a cotizar carpeta uno que
creamos manualmente, tenemos esta barras invertidas
que falta. Y eso es porque cuando
creo una ruta de carpeta por aquí, no
incluí una barra invertida. Y entonces ahora que
tenemos esta barra invertida, tenemos nuestro nombre de carpeta
que no lo tiene. Podríamos haber tenido
dos opciones aquí. O podemos
dejarlo así y poner la barras invertidas por aquí porque vamos a
anexarlos juntos. O la opción, creo que
es un poco más claro como poner la barras invertidas
de la parte de la izquierda, pero tenemos ambas
opciones aquí siempre y cuando
el resultado final
tenga la barras invertidas. Entonces cuando hago clic en esto,
tenemos lo que
parece ahora la nueva ruta de la carpeta que
queremos crear. Ahora que tenemos eso, podemos usar nuestro directorio de comando
make. Y queremos usar
este nuevo teléfono o cadena de ruta completa
que hemos creado en, debería hacer un nuevo directorio por esta ruta completa
que acabamos crear aquí con
nuestro código anterior. Así que vamos a crear una nueva carpeta. Crea aquí una nueva carpeta. Haremos clic en OK, y
luego diremos cualquier cosa. Pero si hacemos una copia de seguridad aquí, vemos que ahora tenemos la
carpeta de cotización número dos. Solo para mayor claridad, podríamos decir que se
ha creado la carpeta
Message Box. Haremos lo mismo. Nueva carpeta, ruta completa. Y hasta podemos
eliminar este mensaje. Entonces presionaremos este botón. Digamos que tenemos
Cotización número tres. Haremos clic en Crear carpeta. ha creado una nueva carpeta. Aquí está nuestro cuadro de mensajes
confirmando que todo estaba hecho. Y aquí está nuestra nueva carpeta otra vez. Solo tocaremos
una cosa aquí arriba. Sólo un poco de limpieza. Voy a añadir un personaje
VB ELF, que es un feed de línea. Y eso simplemente haría que
este mensaje emergente te parezca un poco más limpio. Por lo que en realidad trataremos con
esto en la próxima lección. Estoy golpeando un error
porque está tratando de crear una carpeta para la cita tres, pero esa carpeta ya existe. Vamos a manejar
eso en la próxima lección. Por ahora, sólo vamos a
cotizar Porque se ejecutará esto. Y tenemos nuestro mensaje emergente que se ve un poco mejor ahora con nuestra carpeta
para cotización, para
61. 3.2.2 Herramienta de cita: marca y abre la carpeta: En nuestro último video,
creamos este botón con una función que
crea una nueva carpeta basada en nuestro número de cotización. Entonces si digo Cotización número cinco aquí y haga clic en Crear carpeta. puede ver que dice que la
carpeta ha sido creada. Hacemos click en Aceptar, y vamos a revisar
nuestra carpeta por aquí. Cuando abro esta carpeta arriba, vemos que tenemos una carpeta
para la cotización cinco aquí. El problema que vimos
al final del último video. Si vuelvo a hacer clic en esto, tenemos este error aquí. Esto está diciendo
error de acceso para un incendio o camino. Pero esto se está lanzando porque la carpeta
ya existe. Por lo que voy a hacer clic para aquí. Este es un error muy similar que si lo hiciste manualmente, si creé
aquí una nueva carpeta y dicha cotización 000005, entonces la carpeta ya existe y las ventanas en sí va
a lanzar este error aquí. Por lo que voy a seguir adelante
y eliminaré esto. Pero VBA está
tratando esencialmente de realizar esta acción y está recibiendo
un error propio. Entonces vamos a actualizar esto para que
manejamos esa situación. Tenemos esta línea de código
del último video, que es la línea de código
que crea una nueva carpeta. Entonces antes de crear
una nueva carpeta, pero lo que queremos hacer es
esencialmente comprobar para asegurarnos de que esta carpeta aún
no exista. La forma en que podemos hacer eso es con una función integrada en VBA aquí
llamada DIR para directorio. Y tenemos nuestro nombre de camino. Por lo que queremos entrar en la ruta
que estamos revisando aquí, que en nuestro caso se lleva a cabo en esta variable llamada
nueva carpeta full path. Y como usamos este comando
directory, vamos a usar
el segundo parámetro, que es el tipo
de archivo o ruta. Y vamos a
usar el directorio VB ya que estamos comprobando
si existe una carpeta. Y lo que vamos a
decir es si es igual a blanco, si el resultado de revisar
esta ruta está en blanco, eso significa que la carpeta
no existe. Entonces si es esto, entonces sólo voy
a decir carpeta
no existe como común aquí. Esto no es código,
pero solo estoy
comercializando nuestra secuencia
de acciones aquí. Y de lo contrario, el
titular sí existe. Entonces tenemos esta situación. Y si la carpeta
no existe, entonces podemos seguir adelante y podemos seguir adelante y
hacer la nueva carpeta. De lo contrario. Por ahora, solo
pongamos
este cuadro de mensaje que
dice que la carpeta ya existe
en la siguiente ruta. Haremos un feed de línea vb
igual que lo hicimos antes. Y usaremos aquí la
nueva ruta de carpeta y le
diremos al usuario que no vamos a crear la nueva carpeta
por este problema. Así que ahora vamos a intentarlo. Voy a golpear F9 sólo para que
paremos aquí y luego podamos
pasar por el código. Entonces al golpear a F5, nos detendremos aquí. Tenemos nuestra nueva ruta de carpeta. Todo está construido. Entonces. Ahora ya ves, porque
la carpeta sí existe, tenemos Carpeta cinco, que es la que ya
hemos golpeado el error en un
salado existe. Y ahora vamos a conseguir este cuadro de mensaje diciendo que
la carpeta ya existe. Entonces si cambiamos esto a seis, vamos a ejecutar esto de nuevo. Le pegaré a F5. Entonces ejecutamos este
código hasta el punto de ruptura, y luego ahora la
carpeta no existe. Y vamos a seguir adelante
y hacer este nuevo directorio. Y así en este punto, ya se debe hacer
la nueva carpeta. Y aquí está la cita seis. Y luego a medida que lo ejecutamos, obtenemos nuestro cuadro de mensaje normal
que queremos
subir cuando esto se ejecute sin que
pasemos por el código. Si presiono este botón,
dice que estamos en modo break porque todavía estamos en este modo de ejecución donde
estamos atravesando. Detendré la macro y ahora
podremos volver a usar este botón. Carpeta ya existe en
la ruta para la cita seis. Se puede ver que en realidad
doblamos este mensaje. Así que vamos a mostrarte esta
secuencia que no arreglé es que golpeamos esta notificación diciéndote que la
carpeta ya existe. Pero luego continúa
por nuestro trámite aquí, y luego nos dice que la carpeta ha sido creada con éxito. Por lo que sólo queremos
notificar al usuario que la carpeta ha sido
creada con éxito si estamos
creando una nueva carpeta. Por lo que ahora vamos a detener esto, vamos a quitar esto y
podemos intentarlo de nuevo. Nos dice que la carpeta
ya existe. Entonces ahora cuando
cambiemos esto a siete, va a decir que hemos creado aquí una nueva carpeta siete. Sólo voy a seguir adelante y
borrar todas estas carpetas. Estamos creando muchas
carpetas basura aquí. Entonces vamos a empezar con uno de nuevo, y vamos a crear una nueva carpeta. Y la carpeta de
cotización uno ahora existe. Una característica más que
podemos agregar es en lugar de solo notificarnos que la carpeta ya
existe y que no
podremos crear una nueva
porque no tenemos que hacerlo. Podemos entonces abrir la
carpeta si existe. Olvido cuál
es el comando de abrir una nueva carpeta. Entonces voy a
abrir aquí mi navegador, y voy a
escribir algo como VBA, Open Folder Path. Vamos a venir aquí,
mira la respuesta. Y tenemos nuestro código
aquí mismo que está llamando a
nuestros estantes. Así que tomemos este código y vamos a
abrir la carpeta aquí. Y así usamos nuestro Explore. Explore es nuestra
ventana de carpetas por aquí. Esto en Windows se llama
nuestro explorador de archivos. Y luego aquí está el camino
que estamos tratando de abrir. Y de nuestro ejemplo
tenían este camino. Pero realmente queremos
eliminar esto y podemos usar nueva carpeta full path aquí. Entonces veamos si esto funciona. Pasemos a través de
nuestro código de nuevo, F5, y luego pasaremos por la carpeta sí existe
porque acabamos de crearlo. Entonces tenemos nuestro cuadro de mensajes
diciendo que ya existe. Y corre esa línea
y se ve que abrió nuestra ruta de carpeta que
habíamos construido antes, que es para cotización
una que se muestra aquí. Para que podamos hacer una copia de seguridad y
vemos que abrimos esta carpeta. Y podemos configurar
esta situación. No sólo abrirá la carpeta si ya existe la
carpeta, sino como estamos
creando la carpeta, por qué no la abrimos de todos modos, justo después de
crear la carpeta, porque presumiblemente lo
vas a usar justo después de
crear el nuevo. Vamos a probar esto.
Vamos a golpear Crear carpeta. Ya existe la carpeta. Entonces aparece la carpeta. Entonces si hacemos una
cotización número dos, que es un número que aún
no tiene carpeta. Se ha creado la carpeta. Y luego aquí
aparece automáticamente la carpeta
después de que se crea. Y cuando volvemos
aquí, vemos que tenemos nuestras carpetas
para Cotización número 12. Ahora, sólo para limpiar esto, porque hemos creado
esta función donde también estamos abriendo la carpeta si la
creamos o incluso si existe, vamos a cambiar este botón para
decir crear slash carpeta abierta. Hará este
botón un poco más ancho solo para que podamos
leer el comando completo. Y de esta manera el usuario
puede ver que ambos estamos creando o abriendo una carpeta.
62. 3.3.1 Herramienta de citas - Configuración de la interfaz de usuario de línea: Al mirar nuestra herramienta de cotización, la siguiente característica que quiero
crear es una forma de agregar y administrar líneas de
pedido en esta cotización. Por lo que tienes una cotización, puedes tener Cotización número dos. Y luego en esta cotización, podrías estar comprando
una o más cosas, y esas serían artículos de línea. Entonces aquí por ejemplo, estamos
mostrando que estaríamos comprando producto a y producto B. Así que hay una cotización
tendría más de una línea de artículo. ¿ Qué va a crear aquí?
Antes de llegar a la automatización es
simplemente configurar cómo
podría verse esta interfaz de usuario. Entonces llamaremos a esto sumar líneas. Esto es la gestión de nuestras líneas de pedido. Y entonces aquí
llamaremos a esto mío. Esto está tomando el formato porque ve esta columna. Excel piensa que sabe
qué formato y queremos. Pero hagamos
esto normal por ahora. De hecho, aquí haremos normal un estilo de
celda para que
no tengamos Excel
cambiarlo automáticamente por nosotros. Diremos artículo y
diremos cantidad. Y estas son las cosas que
necesitamos para agregar una línea, pero básicamente estamos
haciendo un formulario de usuario que va a agregar filas a
esta tabla abajo aquí. Por lo que hasta decir
precio unitario por ejemplo, agregaré más como
pensamos en ellos. Puedo tomar este formato aquí
y sólo voy a copiar esto abajo para que
tengamos esta entrada similar. Y vamos a crear un
nuevo botón aquí. Y lo llamaremos. Acabo de golpear cancelar
aquí así que no tenemos una macro que le esté
adjunta todavía, ya que aún no creamos
esa macro. Pero vamos a llamar a
este botón Agregar Artículo. Entonces cuando llenemos esto y entre nuestro
primer video sobre éste, decidí que
vamos a empezar a vender helados en nuestra tienda aquí. Y diremos que
vamos a hacer vainilla. Añade aquí una nueva fila. Diremos que las unidades son galones. Venderá un galón
de helado de vainilla aquí están precio unitario es de $10. Digamos. Convertiremos esto en formato
de moneda. Entonces cuando hacemos clic en
este botón Agregar elemento, queremos tomar esta información y agregar una nueva fila
a nuestra tabla aquí. Estamos configurando el formulario para esta función que
vamos a tener. Y esto va a necesitar detectar nuestra siguiente fila y agregar aquí una nueva fila con
la información de apoyo. Por lo que esencialmente haremos
clic en este botón. Habrá que saber que
esta es la línea tres. Artículo que estamos agregando es helado de
vainilla. La descripción
será helado de vainilla. En realidad tal vez
lo cambiemos a algo como esto, donde nuestro número de artículo es uno. Ahora que acabamos de asignar nuestros artículos
números secuenciales aquí, uno a través de lo que
se nos ocurra en nuestro ítem será uno. Vainilla. Helado de vainilla o
cantidad será uno. Las unidades serán galones, o precio unitario será de diez en nuestro precio extendido en este
caso también será de diez. Pero si tuviéramos una cantidad
de dos, por ejemplo, entonces nuestro precio extendido
es nuestro precio total de línea, nuestro precio unitario multiplicado
por cantidad siendo $20. En las siguientes lecciones, diseñaremos el código para que este botón realice
esta acción aquí.
63. 3.3.2 Herramienta de citas - agrega una nueva fila de lista parte 1: Siguiendo a
nuestro video anterior donde estábamos configurando
el formulario aquí también, ahora, eventualmente
tenemos esta
funcionalidad donde vamos a ingresar información sobre la línea que queremos agregar a nuestra cuadrícula de línea y haga clic en
este botón Agregar elemento. Vamos a construir eso. Por lo que tenemos nuestros módulos aquí, uno para la gestión de archivos
donde ponemos nuestro código relacionado con abrir
y crear carpetas. Pero separemos las cosas. Por lo que vamos a crear un
nuevo módulo aquí, y llamaremos a esta gestión de
línea. Entonces quédate con ese tema. Pero vamos a
tener otras cosas aquí relacionadas con la gestión de
esta cuadrícula de líneas aquí, vamos a mantener nuestro código por
completo en este módulo. Entonces vamos a configurar una nueva
subrutina y la llamaremos. Línea-ítem. Enmarcará esto hacia fuera. Y diremos que esto va a agregar línea de elemento de dos líneas tabla. De nuestro video anterior. Sabemos que queremos tomar esta
información y luego
agregarla a una nueva fila de
información aquí, hay un montón de
formas de hacerlo, pero la forma en que
vamos a querer hacer esto es hacer de esta una tabla de nombres. Y vamos a
utilizar los conceptos que podría haber visto en la sección anterior que
titulé datos móviles. Entonces ese es otro grupo de lecciones para mover datos alrededor. Y queremos usar
un objeto list, que va a llamar a
esto una tabla de nombres. Y vamos a utilizar
muchas de las propiedades de esta siendo una
tabla de nombres para administrar nuestras, sus filas y para agregar nuevas filas y hacer otras funciones que vamos a utilizar eventualmente. Si no estás seguro de
lo que quiero decir aquí, puedes volver atrás y
mirar las lecciones tituladas en la
sección de datos móviles etiquetadas con los objetos de lista, nombres de video. Entonces lo que estamos configurando
aquí es saber que necesitamos agregar esta información
a nuestra red. Necesitamos introducir esta información en nuestro código para
poder trabajar con ella. Entonces vamos a crear algunas variables
para contener esta información. Entonces vamos a necesitar una
variable llamada número de artículo. Eso va a ser una cuerda. Vamos a necesitar
una cantidad. Por ahora. Vamos a decir que es un largo, que es básicamente
un número entero. Y entonces nuestras unidades son una cuerda. Olvidé añadir un espacio ahí. Parece que lo
agregó para mí. Entonces tengo precio unitario, que es dólares y centavos. Entonces vamos a
hacer eso un doble. Entonces básicamente un número
que puede contener decimales. Ahora que tenemos estas
cuatro variables configuradas, necesitamos obtenerlas
de la interfaz, igual que lo hicimos antes
con un número de cotización, digamos número de artículo igual, y luego nuestro rango, que en este caso es B9. Pero como no queremos teclear la dirección celular
y trabajar con eso, queremos dar nombres a
estas celdas para
que se definan
aunque cambiemos las cosas alrededor. Por lo que llamaremos a este número de artículo
celular. Llamaremos a esta cantidad
de un artículo. Llamaremos a esta unidad de un artículo. Llamaremos a este un
artículo precio unitario. Así que ahora hemos creado un poco de
un tema de nomenclatura donde las cosas en esta sección comienzan
con la palabra item. Y aquí son nombres bastante
descriptivos. Entonces el número de artículo es el número de artículo. Ese valor, cantidad
es igual a rango. Cantidad del artículo. Unidades
equivale a unidades de artículos de rango. Y el precio unitario
equivale a artículo de rango. Precio unitario. No valor. Creo que los tenemos bien. Hice un error tipográfico aquí en Price y solo voy
a ejecutar éste
aunque en realidad no estamos
haciendo nada
más que establecer estos valores
variables, me dirá si
algo salió mal. Y entonces eso es sólo un chequeo rápido para demostrar que no me lo dijo. No arrojó un
error decirme que estos nombres no
fueron reconocidos. Entonces esa es una buena señal para
empezar, al menos. Ahora lo que queremos hacer es agregar esta información para
ser una fila aquí abajo. De nuevo, si miras hacia atrás
a esos videos pasados, no
voy a repasarlo de
nuevo en detalle aquí, pero podemos usar esto aquí, que es un nombre, la mesa. Y vamos a llamar a
esta mesa líneas. Ahora esta tabla un nombre
llamado Líneas de tabla. Y podemos usar este objeto
list para agregar filas y hacer
cosas diferentes que lo
harías con una tabla de datos. Esto es para evitar otra
forma en la que pudiéramos hacer esto, pero que es un poco
más desafiante, donde tendríamos que desplazarse hacia abajo, tal vez usando un bucle para detectar cuál es la
fila inferior para que saber dónde está nuestro número
de fila
de hoja de cálculo Excel para agregar nuestra siguiente fila. Por lo que podemos evitar que mediante el uso esta función de tabla de nombres que ahora la
llamamos líneas de tabla. Entonces la forma en que puedo usar
esta tabla es similar a cómo declaramos un
rango con una variable. Podemos decir líneas de tabla
como objeto de lista. Que es el objeto VBA para tablas con nombre en
la hoja de cálculo. Vamos a decir
establecer líneas de cable iguales y tenemos
esta hoja uno aquí. Realmente lo que podríamos
escribir es Sheets, Sheet1, esa lista de objetos. Y luego decir líneas que se presentan, que es el nombre de nuestra mesa. Entonces esto debería funcionar
solo para mostrarte, voy a hacer líneas de mesa
y comprobaremos esto. Voy a decir
rango que seleccione. Entonces tenemos nuestra mesa aquí. Vamos a hacer el
rango y luego seleccionarlo solo para ver si
obtenemos lo correcto. Y a medida que esto se ejecuta, se ve
la última línea de código que encontró esta tabla
en la seleccionada. Otra cosa que
realmente no me gusta, es que esto dice hoja uno y tenemos una llamada
directa por aquí. Y Sheet1 no es un gran
nombre ya que estamos haciendo una herramienta robusta que este
no es un nombre descriptivo de pestaña. Así que tal vez voy a
cambiar esto a main. Y de esa manera
no tenemos algo tan genérico como Sheet1. Y así ahora que hemos hecho,
veremos si esto funciona. Voy a correr esto otra vez. Y ves que está recibiendo esta tabla de nombres y
seleccionando una correctamente. Por lo que conocemos nuestras líneas de mesa. Objeto de lista es la
tabla aquí abajo. Ahora, sólo para mostrarte,
puedo decir líneas de tabla, esa lista de filas, ese anuncio. Y cuando se ejecute esta línea de código, voy a crear un
break aquí y ejecutarlo. Si golpeo F8, cuando
ejecutamos esta línea de código, sabe dónde
está la
parte inferior de la tabla y agrega una nueva fila. Entonces ahora voy a refuerzos aquí. Para hacer las cosas un
poco más fácil, voy a crear una lista
de objeto de fila, lista de rho. Entonces este es un nuevo objeto aquí. Y voy a establecer esta fila de lista y combinar esto junto con
lo que acabo de demostrar. Entonces esencialmente este código
aquí va a agregar una nueva fila. Pero entonces exactamente al mismo tiempo, va a establecer esta
variable de objeto de fila de lista como la nueva
fila que creo. Ahora tengo esta
situación donde puedo decir listas fila, seleccione. Y esto es sólo para
demostración de nuevo, donde voy a crear
un descanso aquí, correr. Esta línea, crea una nueva fila y crea esa
referencia cruzada donde L rho representa la nueva
fila que se creó. Así que ahora cuando lo selecciono, se ejecuta esta línea de código. Ves nuestro objeto L rho
aquí mismo es esta fila. Así que ahora voy
a parar esto aquí. Y ahora que
tenemos un objeto que representa la nueva fila
que acabamos de crear. Vamos a usar
esto para poblar la información en la
nueva fila que creamos. Entonces aquí podemos decir
L rho ese rango. Y de nuevo, si
ves la lección pasada, entro en esto con más detalles. Pero básicamente, quiero que mi número de artículo aquí arriba entre en nuestra segunda columna, que funcionaría si digo que
esto es igual a número de artículo, que es nuestra variable que
declaramos aquí arriba. Entonces vamos a
crear una nueva fila. Y luego vamos a
decir el segundo índice. Cuál de esta fila, el segundo índice o la
segunda celda está aquí. Vamos a colocar
el número de artículo. Así que vamos a ejecutar esto. Ya ves, almacenamos el número de
elemento en nuestra variable y luego creamos una nueva fila en su lugar para
finalizar el segundo índice. Así que ahora no quiero
usar esto para, y en su lugar, quiero
descifrar la columna por
nombre por razones expuestas
en nuestro video anterior. Y voy a
decir, en lugar de dos, voy a decir
líneas enviadas que lista elemento de columna, porque item es el nombre
de esta columna de aquí. Y esta columna tiene un parámetro de
índice que
devolverá el recuento de columnas de
la columna titulada ítem. Entonces esto es
lo mismo que decir también. Pero el beneficio es que si
añadí aquí una nueva columna
y se movió por ahí, esto devolvería la
nueva ubicación de los ítems. Por lo que no siempre diría que,
se va a averiguar dinámicamente dónde está la columna de elemento. Vamos a probar esto en realidad, y vamos a ejecutar esto y
ves lo mismo funcionó aquí. Solo voy a
eliminar estas filas que no terminemos
saliendo de la pantalla. Y seguiremos
construyendo esto hacia arriba. Ahora que vimos esta es una forma
fácil de agregar el artículo. Quizá no sea tan fácil, pero es una forma de agregar el artículo. Podemos pasar a
los otros campos que ya tenemos,
como cantidad. Estamos tomando esto
al colocarlo aquí. Y este es nuestro nombre de columna. Y podemos continuar con esta
tendencia donde vamos a decir unidades y precio unitario. Entonces aquí tenemos unidades. Toma esto, colócalo aquí
conseguiremos el valor de las unidades. Tomaremos el precio unitario, que tenemos que desplazarse
por encima antes del precio unitario. Y ahora cuando ejecutamos esto, hemos tomado toda esta
información, la almacenamos, creamos nuestra nueva fila, y luego la hemos colocado aquí. Por lo que aquí 1234 elementos. Y sólo voy a hacer
esto alineado en el centro, por lo que se ve un poco mejor. Tal vez incluso
lo haga a la izquierda aquí. Entonces. Ahora tenemos esta
otra información aquí que aún no
llenamos. Entonces vamos a trabajar a través de
cada uno de estos uno por uno. Nuestro precio extendido no es
del campo de entrada. Al menos aún no lo es. Pero tal vez podamos hacer eso. Así que agreguemos aquí una nueva fila. Sólo voy a
hacer algo de espacio y diremos precio extendido. Para que podamos ver esto en vivo. Voy a
hacer esto sólo una copia por el bien de formatear y conseguir esos bordes celulares. Pero entonces esta
va a ser una fórmula en nuestro precio extendido, es nuestra cantidad veces
nuestro precio unitario. Y haremos de esto una moneda. Y entonces esto es $20. Entonces si hacemos esto cinco, entonces esto se
multiplicará. Algo que me gustaría hacer aquí es cada vez que tengo una
fórmula en una celda, me gusta hacerla gris. Por lo que el usuario
obviamente puede ver que no
debe escribir en esta celda que se va a calcular. Una pequeña cosa que
podrías notar aquí es cuando creas Celdas Nombradas, como hicimos antes
en el video, que en vez de decir
vender, usa los nombres que le
dimos aquí. Ahora tenemos otra
celda y podemos llamar a este artículo precio extendido. Podemos hacer lo mismo
aquí, pero vamos a crear una nueva, una nueva variable llamada
precio extendido como configuración doble. Lo mismo equivale a rango, artículo, precio final. Ese valor. Podemos crear
otra referencia ya que estamos pasando esta
información a la nueva fila, aquí
creamos precios extendidos. Y nuestro nombre de columna para precio
extendido viene de aquí. Y aquí es donde
ponemos el nombre de nuestra columna. Así que vamos a ejecutar esto.
Vemos vainilla, todas estas cosas. Y tenemos nuestro
precio extendido de $50 en este caso. En realidad, lo guardaré
para el siguiente video separado donde repasaré cómo podemos crear parte de la información de
apoyo. Porque queremos tomar parte de la información y hacerlo para que el usuario no
tenga que escribirla. Podemos empezar a
crear algo así como una búsqueda donde la
descripción en, por ejemplo, las unidades es una búsqueda
basada en qué elemento seleccionamos para que el usuario no tenga que
escribirlo por sí mismo.
64. 3.3.3 Herramienta de citas - búsqueda de datos de elementos: Ahora en el último video, creamos una nueva fila y
pusimos la información de nuestra forma de líneas agregadas
hacia abajo en esa nueva fila. Pero luego notamos que
todavía nos faltan algunas
piezas de información. Por lo que tenemos nuestro precio extendido, que hicimos al
final de nuestro último video, pero aún tenemos
descripción y número de línea. Y otro campo
que mencioné fueron las unidades que
está en galones. Entonces algo que queremos hacer aquí no
es hacer que la persona escriba en galones y no tenemos una descripción el
lugar ahí dentro todavía. Entonces vamos a tratar con estos. Lo que quiero hacer es hacerlo para que cuando una persona
elija su artículo, que algo así como
la descripción y las unidades para cada artículo
sean siempre consistentes. Y así como hay
una relación directa que cuando elijo, por ejemplo, mi artículo vainilla, siempre
va a ser la
misma descripción escrita. Entonces no quiero que el usuario
tenga que lidiar con eso. Entonces, por ejemplo, podría
poner una fila aquí. Lo llamamos descripción. Y la
forma directa es simplemente hacer lo
mismo que hicimos
con estos otros campos. Pero entonces el usuario está atascado necesitando escribir en
la descripción. Pueden ser inconsistentes y solo
es trabajo de
oficina extra para ellos. Entonces lo que vamos
a hacer esto
es hacerlo para que
cuando elijas el ítem, esa información que puede
estar directamente relacionada con ese artículo se
llene automáticamente. Entonces la forma en que voy a hacer esto es típicamente voy a crear
una pestaña extra aquí. Y lo llamo datos de subrayado. Y sólo va a contener información de
apoyo. Por lo que voy a decir
información de apoyo aquí arriba. Y haremos una mesa. Yo lo inventaré aquí
y lo llamaremos ítem. Dirá el artículo número uno. Descripción del artículo. Acabo de usar la palabra
descripción aquí y diremos, lo que estoy configurando aquí es una DataTable donde puedo
decir algo como esto. Donde el número que usamos
antes, que era vainilla, tendrá una descripción
diciendo helado. Como aquí abajo, estoy bastante
seguro de helados a las palabras. Y luego tenemos nuestras
unidades, que está en batas. Y como ejemplo, podríamos poner
algo más aquí, es decir, tal vez
tengamos otro artículo al
que llamaremos, lo
llamaremos cuchara, donde podríamos vender cucharas de
plástico que van junto con
nuestro helado, digamos cuchara de plástico. Y vamos a decir, esto se vende en cualquiera de
las unidades que sean piezas. Ahora tenemos una mesa, y
como mostramos antes, me gusta usar estos mesa con nombre. Por lo que voy a golpear
Control y té, que establece el rango que había destacado para
convertirme en una tabla de nombres. Entonces voy a decir que mi
mesa tiene encabezados porque sí
tenemos encabezados en el
rango que resalté. Y ahora tenemos esta mesa aquí. Y voy a llamar a
este mes de abril ítems. Ahora que tengo esto, lo que puedo hacer es tomar mis artículos y hacerlo para
que los artículos que
elegimos en este campo puedan sacar de nuestros
artículos que están aquí. Entonces esto no es realmente una cosa
macro o automatización. Esta es una característica de Excel que tenemos que
puede haber visto antes. Y si vengo aquí,
déjame volver aquí. Si voy a la pestaña Datos, estoy resaltando esta celda. Y luego por aquí tengo
este campo de validación de datos. Así que voy a hacer clic en esto. Hay un montón de formas
diferentes en que puedes validar la información
en esta celda. Y voy a elegir lista. Y uso esto todo el tiempo. Y esto va a
crear una lista desplegable. Entonces hay algunas formas en que puedo
poner información aquí. Puedo hacer algo como
decir Sí, Common know. Y esta es una lista
separada por comas. Y tan pronto como lo haga, ves obtenemos un desplegable, que me permite elegir sí o no. Pero en realidad no queremos que
esto diga sí o no. Lo que queremos que sea esto
es que si destaco esto, voy a venir aquí
y resaltar estos dos. Y lo ves muestra nuestra gama
que acabo de destacar. Esta es la forma en que la mayoría de la gente ha utilizado esto en el pasado. Si has utilizado
esta herramienta en Excel, donde tenemos vainilla y
artículo a nuestra cuchara aquí. En realidad vamos a
cambiar esto un poco porque esto es un
poco tangente. Pero un problema que
vamos a tener aquí es si agregamos otro artículo, helado de
chocolate
viene en galones, entonces notarás que
este campo no se expandió. Y eso es porque seleccionamos
este rango por aquí, que son solo estas dos
celdas que realicé. Entonces muchas veces
verás que la gente hace algo así como resaltar todo esto. Justo para que añadamos más filas
a nuestros datos por aquí, como digamos añadimos cuatro, agregamos cuatro, fresa aquí. Trabajaremos nuestro camino hacia arriba. Tenemos este campo, pero
aún tienes este problema
donde terminamos en alguna parte. Para que pudieras resaltar
todo el camino hacia abajo. Pero esta no es la mejor
manera de hacerlo, en mi opinión. En cambio, podemos utilizar esta
otra notación aquí, donde en lugar de
tener este rango, que tuvimos que
seleccionar aquí un rango, voy a decir indirecto. Entonces puedo usar los
nombres que dimos, la tabla y la columna. Entonces si digo en el rec, podría decir los ítems TBL, que es el nombre de la tabla, esta tabla de nombres
que aquí ponemos. Entonces en estos paréntesis, puedo poner el nombre de la columna. Tengo la flecha
en este tipo de, esta fórmula actúa
un poco tonto. Si pulsa las teclas de flecha, seleccionará otro rango. Pero puedo decir que la
columna es número de artículo. Entonces un indirecto, tengo mi nombre de tabla aquí y luego el nombre de mi columna
específica. Y entonces esto sabrá que estoy hablando de este rango de información que está en la tabla y luego
la columna específica. Así que voy a hacer clic en OK. Entonces verás que esto sigue funcionando de la
misma manera que antes. Todos nosotros, no necesitábamos poner un rango específico y puedo hacer algo como sumar cinco aquí. Veamos, vamos a
llegar a otro. Lo pondría en tal pecana de
mantequilla aquí. Y entonces ahora tenemos
nuestra otra selección. Por lo que esto es más
un truco de Excel que un trucos de automatización hasta ahora. Pero ahora vamos a agregar
algunas fórmulas más aquí. Ahora, podemos usar una fórmula de búsqueda
x. Y en las
secciones anteriores de esta clase, deberíamos tener más videos
sobre estos diferentes temas. Específicamente, ahora solo
los
estamos utilizando para este
proyecto real aquí. Y así podemos usar una búsqueda x donde vamos a
buscar nuestro artículo. Vamos a buscar eso
en nuestra columna de número de artículo. Y luego en nuestro tercer parámetro, lo que vamos a devolver
es nuestra columna de descripción. Y luego si
no hay coincidencias aquí, vamos a decir que no se encuentra. Y una cosa genial es
que cuando estamos usando una búsqueda X contra
nuestras tablas nombradas, en lugar de tener un montón
de rangos que son difíciles leer como nuestras coordenadas celulares. En cambio se ve que se da cuenta de
que estamos hablando nuestra mesa y de la columna
de esa tabla específica. Por lo que estos son beneficios
continuos de usar rangos nombrados y
tablas con nombre en lugar de simplemente usar coordenadas de celda como A1 a C diez o
algo así. Como te mostré
antes, me gustaría
hacer que cualquier celda que tenga una fórmula gris para
que la gente sepa que no debes escribir
sobre esta fórmula. Al final de un
proyecto como este, siempre se
puede
proteger las celdas, pero esta es sólo la
notación que me gusta
mantener todo muy visible. Y entonces ahora a medida que
cambiamos nuestro ítem, entonces está haciendo una búsqueda
en la tabla aquí. Y ves aquí
hemos encontrado un hit, pero está en blanco, por
lo que está mostrando 0. Por lo que podemos añadir algunas
descripciones aquí. Haz esto un poco más amplio. Y entonces podemos hacer lo
mismo, aunque escribí
aquí en galones para nuestro video anterior, podemos hacer de esto una búsqueda también. De hecho, incluso puedo tomar
esta fórmula que tenemos aquí. Y es exactamente lo mismo. Sólo en lugar de devolver
nuestra descripción, queremos devolver
unidades y lo ves incluso sabe qué
columnas hay aquí. Entonces, debido a que estamos
usando una tabla de nombres, sabe cuáles son nuestras
columnas y está tratando de ayudarnos a poblarlas
automáticamente. Entonces aquí están nuestras unidades. Y si vengo aquí
y vamos a la cuchara, que es la única
con diferentes unidades. Ves que las unidades
cambian a piezas. Y luego además de unidades, lo siguiente que
podemos hacer es el precio, porque no vamos a saber el precio ni maquillarlo
como sumamos línea. En cambio, el precio es algo
que olvidé poner aquí donde podemos simplemente tipo de, creo que estamos destinados a
estos números aquí y luego la mitad del precio
que buscaremos también. Y por supuesto que estoy
inventando completamente números por aquí. Pondremos algunos precios aquí y haremos
exactamente lo mismo. Tomaremos nuestra búsqueda,
conseguiremos nuestro precio. Y luego en lugar de
devolver nuestras unidades, se
puede ver ahora
los textos que
teníamos una columna de precios
que acabo de agregar. Lo mismo aquí. Y entonces ahora
realmente hemos reducido el trabajo clerical que el
usuario necesita hacer para seleccionar un ítem para que no necesiten
conocer esta información
que está en el gris que todo está siendo
mirado desde nuestro esencialmente nuestra base de datos, que es sólo una otra pestaña de
Excel en este momento. Entonces si alguien
mantiene esta
información correctamente, entonces siempre va a
sacar la misma información. Entonces vuelve aquí. Tienes nella, tenemos chocolate y nuestra información
se está actualizando a medida que avanzamos. Por lo que vamos a pausar el video aquí, y en el siguiente video, pasaremos a actualizar
nuestra macro Agregar elemento que va a usar esta nueva
información y agregar una nueva fila. Y también tendremos que lidiar con el recuento de números de línea
y asegurarnos de que
poblemos esto al número de
línea incremental a medida que agregamos filas.
65. 3.3.4 Herramienta de citas - Termina la línea de adición básica: Donde lo dejamos
en el último video, habíamos creado esta búsqueda donde cuando poblamos
nuestro ítem aquí, que busque esta información adicional de
apoyo que
podamos añadirlo paraque
podamos añadirlo
a lo que necesitamos nuestra nueva
fila de nuestra tabla de líneas. Ahora tenemos que actualizar
nuestra macro Agregar elemento, que creo que este botón aún
no está adjunto. Para que se ocupe de
estas nuevas piezas de información que
ahora hemos sacado para el ítem. Entonces lo primero que podemos hacer
es hacer clic derecho y asignar este botón a nuestra
macro de pedido de línea AD. Ahora si recuerdas
dónde lo dejamos, haré clic en Agregar línea de artículo
aquí tenemos nuestra nueva línea, pero no tenemos
información como nuestra descripción y
nuestro número de línea. Yep. Así que vamos a tratar con
el fácil 1 primero, voy a eliminar un
par de líneas aquí. Sólo para que podamos ver
la mesa más fácil. Y tenemos que tirar
de nuestra descripción, que ahora tenemos
con este campo aquí, y aún no la hemos nombrado. Entonces si nos quedamos con nuestro
naming de antes, lo
llamamos descripción del artículo, y sólo voy a dejar breve
descripción aquí. Agarra eso una nueva
variable por aquí. Diremos descripción
como una cadena. Ponlo aquí. Descripción es igual a rango, descripción
del artículo, ese valor. Y entonces lo mismo que hicimos
por estos otros campos. Vamos a colocar
nuestra descripción en la columna de descripción. Entonces tenemos nuestra columna aquí, que viene de
este encabezado de columna. Vamos a pegar eso ahí. Y luego descripción
aquí arriba es lo que colocamos en
el valor de esa celda. Ahora vamos a ejecutar esto. Aquí vamos. Ahora tenemos nuestra descripción,
que es otra vez, miró hacia arriba desde nuestra pestaña Datos sin necesidad de
hacer nada cuando el usuario selecciona el ítem. Ahora lo último que
tenemos que
tratar es el número de línea. Entonces digamos que tenemos 234. Podríamos hacer un supuesto de que la última línea aquí es
el número más alto, pero eso va a
tener problemas más adelante. Por ahora, ¿por qué no
hacemos eso y luego nos ocuparemos de
cualquier problema más adelante. Para que eso es
lo más fácil es que solo
miremos las líneas actuales aquí y haremos que mire el último número de la fila en la
parte inferior de la tabla, para luego agregarle una. Empecemos con eso. Vamos a venir aquí.
Vamos a averiguar nuestro número de línea aquí después de que
consigamos todas las cosas fáciles, que está aquí acaba de tirar
directamente de la interfaz de usuario, diremos el número de línea como decir que es un largo, tiene
un número entero de nuevo. Entonces en realidad necesitamos nuestra
mesa para poder hacerlo. Entonces el código que vamos
a usar, el Find, va a estar
aquí abajo porque necesitamos nuestro
objeto de mesa ya declarado. Entonces aquí declaramos nuestra
mesa, que está aquí. Y aquí estamos
agregando nuestra nueva fila. Así que hagámoslo entre aquí. Entonces tenemos nuestra mesa con la
que podemos trabajar, pero aún no hemos agregado
nuestra nueva ruta. Permítanme mover esto aquí abajo sólo para mantener todo junto. Diremos el último número de
línea siempre. Y vamos a averiguar cuál es
el último número de línea primero. Eso está en la última
fila de nuestra mesa. Entonces, ¿cómo podemos conseguir la
última fila de nuestra mesa? Refuerzos aquí en realidad? Entonces si tenemos nuestra mesa, que es Líneas de Tabla, y tenemos nuestra
lista de filas aquí. Podemos seleccionar nuestra lista
de filas como esta. Para que ese rango no seleccione. Voy a poner un
descanso aquí y golpear a F5. Y luego si golpeo F8, verás esta fila
seleccionada uno. Y luego si pongo un
dos aquí y golpeo F8, la segunda fila seleccionada. Entonces esta es la fila cuatro aquí. Pero tenemos que poner
un número aquí, pero no tenemos
que codificarlo. En cambio, podemos decir líneas de cable
que listan y se levantaron de nuevo. Y en cambio tenemos una
propiedad llamada count, que es el número de filas
que hay en la tabla, va a devolver el número
de filas, que es cuatro. Y esa también va
a ser la última fila, como decimos, queremos
devolver la fila cuatro, que es el
recuento total de filas. Puedes ver aquí, mientras
arrastro esto hacia arriba y golpeo F8, estamos seleccionando la última fila,
y eso va a funcionar. Bueno, tenemos otra fila, digamos cinco filas a continuación. Que esto va a
devolver que hay cinco filas y nos va a
conseguir la quinta fila. Y luego desde aquí, ahora mismo, sólo lo
estamos seleccionando. Y en cambio, podemos tirar del primer índice aquí
en lugar de toda la fila. Y si vuelvo a
subir aquí, apagaré este salto de
línea y golpearé a F8. Estamos seleccionando la primera
celda de esa última fila. Entonces si combinamos esto juntos, podemos decir que nuestro
último número de línea es el valor de esa celda, en lugar de simplemente seleccionarlo. Y podríamos ir aún más lejos. Sé que esta línea de código se está volviendo muy
larga y cambiar ésta para usar lo
mismo que mostramos antes donde estamos
buscando la columna de lista, índice de la columna número de línea. Pero solo
lo dejaré como uno aquí. Muchas veces
sólo podría dejarlo para éste cuando es
la primera columna porque es tan poco probable que esto va a ser cualquier
cosa menos la primera columna, no
vamos a
insertar nuevas celdas aquí o nueva columna aquí. Eso va a empujar esto
a la derecha más. Ahora supuestamente tenemos
nuestra última línea aquí. Entonces nuestro número de línea, incluso
podemos llamarlo
nuevo número de línea. Veamos donde el modo de descanso
aquí, así que lo detendré todo. Por lo que es más fácil editar nuestro código. Llamaremos a este nuevo número de línea. Y luego aquí vamos a
poner un nuevo número de línea es igual a número de más uno. Así que voy a seguir adelante y
probar esto aquí fuera. Vamos a golpear a F9, F5 aquí,
accidentalmente golpeó a F5. Y así ves
agregamos aquí una nueva fila, pero no hemos usado
este nuevo número. Entonces si llego a F8, aquí, vemos nuestra última línea número 0. Me arruino las cosas porque
accidentalmente agregué esta nueva fila. Este es uno de nuestros defectos con el sistema
que estamos usando aquí, aunque vamos
a correr con él por ahora hasta que lo mejoremos. Pero si esta última fila
accidentalmente como en blanco, si las cosas son el último número de
línea es 0, en lugar de darse cuenta que
hay un cuatro aquí y esto se supone que son cinco y nuestras
nuevas líneas van a ser seis. Entonces ese es el problema que acabo de crear
accidentalmente aquí. Entonces si estoy aquí y
elimino esta fila, ejecuto esto, me paro
aquí y golpeo F8. Y ves que el último número de
línea es cuatro. Y nuestro nuevo número de línea es cinco. Entonces voy a detener esto ahora
antes de que hagamos algún cambio. Y luego vamos a
sumar una nueva fila. Y entonces
lo único que nos falta aquí es que vengo aquí
a nuestro número de línea. Y vamos a hacer esto. Solo voy a
copiarlo y pegarlo desde aquí para que puedas
ver de dónde viene también
desde nuestro
número de columna en nuestra hoja de cálculo. Este es nuestro número de línea, y entonces esta va a ser la variable que creamos
una nueva línea en él. Por lo que voy a quitar este descanso y
vamos a correr esto aquí. Obtenemos nuestro último número cinco. Y vamos a cambiar esto. Y ahora obtenemos nuestro
último número seis. Entonces esto funcionará por ahora. Pero como ya vimos, en una situación que
accidentalmente creé esto tiene muchos agujeros en
ella que pueden causar problemas. Y lo sintonizaremos a medida que
pasamos por este proyecto para que
el césped no pueda funcionar mejor.
66. 3.3.5 Herramienta de citas - Línea de eliminación - repetición: Al final de nuestro último video, terminamos de actualizar
nuestro botón de añadir línea, el cual solo voy a pasar por aquí. Y se nos ocurrió cuál sería
nuestro siguiente número de línea cuando sumamos un número. Entonces nos dimos cuenta de que
obtenemos el siguiente número incremental. Y de inmediato, me estoy dando cuenta que vamos a
golpear el problema de
inmediato ya que incluso intenté empezar
a trabajar con esta tabla de líneas. Entonces creo que vamos a
tener que lidiar con esto ahora que si quisiera
limpiar esta tabla y simplemente
hacer que estos datos sean más pequeños, voy a eliminar estas filas. Y mis líneas están inmediatamente
fuera de secuencia aquí. Y entonces eso es un problema. Ahora, tendría que
entrar manualmente aquí y cambiar estos 212. Permítanme cambiar un poco el formato
aquí. Y vamos a mover todas estas
cosas a la izquierda. Sólo un poco limpiamos
esto un poco. Voy a cambiar algunos
números cada año. Eso no es importante,
pero me volverá
loco si no
lo arreglo un poquito, solo un poco de OCD ahí. Y tenemos este problema
donde los números de línea
solo están funcionando cuando tenemos esta situación perfecta donde
estamos agregando una nueva línea. Y entonces como necesito ajustarme, mi información no está cambiando. Entonces vamos a tratar con esto. Que voy a hacer
una función que
va a eliminar también la línea. Entonces en lugar de solo
tener un botón, cuando agregamos un ítem, queremos crear
una interfaz de usuario. Entonces el usuario no tiene que
hacer lo que he estado haciendo, que es hacer clic derecho en la fila y eliminar la fila
para deshacerse de ella. Hagámoslo como parte de lo que esencialmente estamos
imitando aquí, que es una aplicación completa. Y construiremos esto a la derecha
en nuestra interfaz de usuario. Al igual que lo hemos hecho. Agregar elemento hará un
botón llamado eliminar elemento. Y nos pondremos en
cómo construir esto. Y podemos hacer que esto sea realmente fácil de usar simplemente
haciéndolo para que elimine el
elemento que se selecciona. Por lo que diremos eliminar elemento
seleccionado. Y esta es una función realmente
simple. Este botón sólo va a hacer esta función de Clic derecho
y eliminar la fila. Pero hay muchos conceptos en los
que vamos a construir aquí. Entonces creo que vale la pena hacerlo solo desde un
punto de vista de entrenamiento de ver todos los
conceptos interesantes que implica hacer esta
sencilla función, o al menos lo que es
simple en la superficie. Así que vamos a dividir esto de nuevo
para que podamos ver todo. Y la forma en que vamos a hacer esto es eliminar nuestro elemento
seleccionado aquí. Entonces vamos a crear una nueva
subrutina para manejar esto. Y eso es lo que
vamos a
terminar uniéndonos al botón. Por lo que vamos a decir
eliminar elemento seleccionado. Lo describiremos como
eliminar la fila seleccionada de la grapa de línea de la
celda que está activa. Entonces si la persona
viene por aquí, digamos que tenemos
tres ítems y destacamos esta segunda fila. Vamos a hacer clic en
Eliminar elemento seleccionado, y esta es la fila que
va a desaparecer. Y entonces el problema que
estamos resolviendo aquí también es que
vamos a recalcular nuestros números de línea para que la
gente no tenga que
eliminar manualmente esas filas y luego tener este problema con
nuestros números de línea. Entonces lo primero que
tenemos que hacer es ver qué es la celda seleccionada. Por lo que podemos hacer eso
con célula activa. Si decimos
celda activa que selecciona, eso es una especie de redundante porque la celda activa ya
está seleccionada. Pero digamos otra cosa. Digamos que debug la dirección de punto de
celda activa. Así que hagamos eso en su lugar. Asignemos este botón a nuestra nueva subrutina aquí
y eliminemos el elemento seleccionado. Y cuando hacemos clic en
esto, deberíamos ver nuestra impresión de debug dice E6. Y eso es porque
tenemos seleccionada la celda E6. Entonces si hago clic aquí, tenemos C 20, que es la celda que
hemos seleccionado. Entonces así es como podemos
usar este acto de auto, que fin que está integrado en VBA. Imagina que hasta podemos hacer fila aquí. Entonces, siempre que tengas un rango, celda
activa es un objeto de rango. También tenemos nuestra propiedad de fila. Entonces si corro esto, se
puede ver que estamos en la Ruta 20. Ahora la forma
más fácil de eliminar una fila es si estamos usando nuestro objeto de lista
de mi tabla de filas de lista. Así que en realidad vamos a declarar
nuestras listas fila objeto de nuevo, igual que lo hicimos aquí arriba. Y entonces ahora tenemos esta
lista objeto en el que trabajar. Entonces si estamos en la Ruta 20
aquí en la hoja de cálculo, mostramos en nuestro último video
que en realidad podemos hacer esto y decir lista de filas
a Dot seleccionar ese rango. Y si hicimos
algo como esto, esta es nuestra segunda fila. Pero cuando estamos usando
nuestra celda activa, tenemos nuestro carril activo siendo 20 en la propia
hoja de cálculo. Por lo que necesitamos
traducir la fila 20 para convertirnos en ruta a porque
tenemos esta función incorporada, pero queremos sacar el
número dos de ella. En este caso cuando estamos
en esta ruta 20, algo que podríamos hacer es tomar nuestra fila de puntos de celda activa y
luego restar diferencia. Entonces si restamos
a los 18 de aquí, por ejemplo, solo usando la
información que ya hemos reunido. Esto sería 20.
Te restarías 18, y luego estarías en la segunda fila. Entonces si estás en la fila 21
aquí en la hoja de cálculo, y luego restas 18, tendrías tres, y entonces
estarías en la fila tres de la lista. Por lo que básicamente es sólo
tomar la diferencia entre aquí a aquí. Para que puedas traducir
tu fila de hoja de trabajo a la fila de lista de
esta tabla real. Entonces esta es una idea bien, excepto por el hecho de que
si agregamos alguna fila aquí, que probablemente lo haremos a través de
este proyecto que va a empujar las cosas y entonces esto ya no funcionará
correctamente. Entonces en cambio, no
queremos codificar duro 18. Esto se parece mucho a
nuestra idea de columna de lista. No queremos codificar duro 18. En cambio, podemos obtener la
fila que es 18 aquí, que es cuántas filas son la diferencia
entre el inicio de nuestra primera fila con
esta otra función. Así que voy a comentar
esto muy rápido. Y podemos decir líneas de mesa, punto. Y nuestro objeto de lista tiene una propiedad que se llama
rabia de fila de cabecera. Y luego si selecciono esto, verás que sabe
qué fila son heterocigotas. Entonces vamos a hacer lo mismo aquí. Si tenemos fila, entonces eso
va a devolver en qué fila está ese rango. Por lo que encuentra nuestro encabezado de nuestra tabla y luego
devuelve las filas. ¿ Puedo presionar esto? Tenemos demasiadas cosas aquí, así que voy a crear esto
y tenemos 18 por aquí. Entonces lo que te he mostrado es si
he sustituido este 18 algo que se acerca
dinámicamente donde está el hetero. Ahora estamos haciendo
ese mismo concepto de averiguar
el desplazamiento entre
la hoja de cálculo y la fila del objeto de lista
solo es dinámica. Entonces si yo golpeo aquí F5, se
puede ver que estamos seleccionando esta tercera
fila por aquí, y puedo resaltar la
segunda fila de nuestra mesa. Y ahora se está dando cuenta de que este es el
objeto de fila de lista en el que estaba. Ahora, sólo estamos seleccionando una fila. Voy a hacer esto
un poco más amplio aquí. Pero en cambio, podemos
tomar este rango ahora que sabemos
que estamos seleccionando la fila correcta y
simplemente decir eliminar. Así que ahora si estoy por
aquí y hago clic en esto, se
puede ver sabía que esa era la fila lo que estamos
seleccionando antes. En cambio estamos ejecutando el comando
delete en su contra. Podemos añadir un nuevo elemento aquí. Y podemos eliminar estas filas. Ves que todavía
tenemos nuestro problema porque aún no lo hemos
abordado. Pero al menos ahora estamos
haciendo la eliminación de una fila a través de algún código aquí. Y eso nos va a
dar un poco
de control de lo que podemos hacer como
parte del procedimiento. Ahora, ¿qué pasa si hacemos clic aquí
arriba y hacemos clic en
Eliminar seleccionado? Llegamos a un error aquí. Y eso es porque como
hacemos todas estas matemáticas, verás que no
hay fila de lista. Va a ser algo así como
16 menos 18 es negativo dos. Y entonces esto ya no tendrá ningún
sentido. Por lo que es importante
para esta función, el trabajo que estamos seleccionando una celda dentro de este rango de tabla. Queremos tener cuidado aquí
porque estamos eliminando cosas. Cada vez que estamos eliminando las cosas, podemos
estropear accidentalmente nuestra hoja de cálculo. Pero sé que incluso si
hacemos clic en este encabezado, no
va a funcionar
porque eso va a ser 18 menos 18 es igual a 0. Y así
no hay lista de fila 0. Entonces nos detendremos aquí. Entonces antes intentamos
eliminar una fila, vamos a comprobar el error para esto. Tenemos
que asegurarnos de que la celda que hemos seleccionado incluso
a continuación aquí, no funcionará. Tenemos
que asegurarnos de que la celda que hemos seleccionado esté dentro de este rango. Por aquí. Está específicamente dentro de los datos de la tabla. Por lo que nuestro objeto de lista nuevamente, además de tener
nuestra gama hetero, tenemos nuestro rango de cuerpo de datos. Y sólo voy a usar select otra vez para que puedas
ver lo que está pasando. Voy a crear
un punto de ruptura, golpear F5 y una carrera de fe F, solo esta línea y ves que está seleccionado que contiene rango de cuerpo de
datos. Si subo aquí y golpeo F8, sabe dónde están los
datos de nuestra tabla. Ahora necesitamos una función
que vaya a averiguar si nuestra celda
activa está o no dentro de aquí. Así que en realidad conozco
esta función, pero podrías ir a
Google por ejemplo. Y escribiría
algo como VBA. Herman, si la célula activa está dentro de cierto rango
o algo así. Y deberías conseguir el resultado para el comando aquí
que voy a usar. Es un poco un comando
no intuitivo. Entonces vamos a decir, si no, intersectar
coma celular activa y nuestro rango, que es líneas de mesa que cuerpo de
David con la edad. Nada. Entonces en realidad,
no quiero decir que no. En realidad, voy a quitar
ese cruce no es más que cuerpo celular de los pulmones. Entonces esto básicamente
devuelve un valor. Devuelve un rango si este rango y este otro
rango de parámetros se superponen. Entonces si hay una superposición, esto devolverá el rango que se superpone no es nada, es decir que el
devuelve nada. Entonces si Esta función que está encontrando la superposición no devuelve nada, entonces eso significa que no
hay superposición. Entonces si no hay solapamiento, vamos a enviar un cuadro de mensaje. El usuario que dice que la celda activa no
está en los datos de la tabla. Seleccione celda. Y entonces lo que
tenemos que hacer es parar porque en realidad lo haremos por ahora, sólo
vamos a dejar esto. No queremos que esta línea
corra si golpeamos la situación. Entonces en cambio
vamos a decir otra cosa. Unas formas diferentes de hacer esto. Otra forma en que podría
hacerlo es simplemente terminar todo el proceso aquí
si golpeamos esta situación. Pero en cambio, lo
voy a hacer aquí en casa. Entonces si no estamos superpuestos, envía este mensaje. Entonces si estamos superpuestos, entonces podemos continuar y
ejecutar nuestro comando delete. Ya ves si estoy fuera de aquí, no
puedo
ejecutarlos modos de descanso, voy a parar para que
podamos empezar de aquí. La celda activa no está
en los datos de la tabla. Por favor, seleccione la
celda. Ahora si volvemos aquí de nuevo,
ahora está funcionando. Y ahora la parte que
originalmente nos hizo crear esta función es que necesitamos
manejar estas filas aquí. Entonces cada vez que eliminemos una fila, debemos reevaluar
cuáles son nuestras líneas. Así que vamos a crear algún código aquí,
re-evaluar los números de línea. que pudiéramos tratar de mirar
esto y resolverlo. Pero en cambio creo que
lo que hay que hacer es simplemente borrar nuestros
números de línea y reemplazarlos, y simplemente
los crearemos desde cero. Es
algo bastante simple de contar, solo una y hacia arriba. Entonces hagamos eso. Vamos a recorrer nuestras filas. Entonces vamos a decir que yo es igual 12 y luego nuestro número de
filas, líneas, filas irreflexivas. Ahora, vamos a usar
nuestra propiedad de mesa. No hemos declarado variable IN. Entonces vamos a
decir yo tanto tiempo i Así que hemos creado este
bucle que va a
recorrer uno al
número de filas. Sólo hay
dos. En este caso. Vamos a decir Líneas de
tabla, esto filas. Y luego otra vez esta es
la fila en la tabla. Y podemos usar nuestro contador ion. Entonces va a ser uno y luego fila dos y luego fila tres. Y luego diremos range. Entonces lo primero
del rango
siempre va a ser el número de
línea todo el camino a la izquierda porque es
la primera celda de la fila. Ese valor es igual a I. Así que voy a ir 123 y luego va
a etiquetar las filas. Así que vamos a ejecutar esto. De hecho, voy
a separar esto en una subrutina separada, que teníamos en nuestros videos
anteriores que podemos llamar una subrutina de
otra subrutina. Digamos que Refrescar los números de línea, creará allí una nueva
subrutina. Sólo vamos a
tomar todo esto aquí, cortar y pegar. El único punto aquí es que nuestro
objeto de lista de líneas de tabla no está declarado. Por lo que tenemos que declararlo de nuevo en esta subrutina separada. Y así vamos a ejecutar esto de nuevo. Y ahora podemos ejecutar esto
refrescando los números de línea sin ejecutar la
eliminación de una línea. Por lo que lo ves acaba de
recalcular esto aquí. Golpea esto otra vez. Si agrego otra línea aquí,
123, eso está funcionando. Si aclaro todo esto, entonces estamos refrescando
nuestros números de línea. Y luego cuando eliminamos
un ítem seleccionado, todavía
tenemos este problema aquí. Pero entonces podemos llamar a esta subrutina
separada, que va a refrescar
los números de línea
al final de nuestro proceso de
eliminación. Para que podamos agregar una línea de artículo. Aquí hay algo interesante, solo
me estoy dando cuenta es
que arruinamos nuestras líneas. Agregamos una línea va,
hey, la más reciente es tres, por lo que tu siguiente debe ser cuatro. Entonces algo que
podemos hacer es desde que
hicimos de esto una subrutina, lo
bueno que hicimos. Podemos reutilizar esto una vez más, incluso cuando estamos
agregando una línea de pedido. Así que aquí está nuestro añadir línea de artículo. Y al
final, volvamos a actualizar los números solo para
asegurarnos de que estén correctos, ya que este es un poco de código muy
pequeño para ejecutar. Ahora cuando agrego una línea de ítem, incluso reevaluó todo, incluso si estropeamos algo
manualmente y
se vuelve a calcular nuestros números de línea
para que sean correctos. Entonces si quiero ir
a eliminar algunas líneas, entonces puedo seleccionar estas. Y se está recalculando
cada vez. Y ya verás aquí, aunque añadamos vainilla
como nuestra cuarta fila, vamos a eliminar
esto y en realidad se puede ver que esta es la
fila que se está eliminando. Pero los números de línea ahora
son correctos de nuevo. Ok. Una última cosa que
quiero mostrarte ya que estaba revisando la grabación
antes en este video, ¿es esa otra forma que
hubiera sido más simple? De vuelta al inicio
del video, podría haber pensado, ¿por qué no simplemente hacemos clic derecho
y eliminamos la fila? En cuyo caso
evitaríamos toda esa lógica que necesitábamos
hacer para determinar el objeto de fila de lista específico
de la tabla cuando pudiéramos eliminar toda la fila de
la hoja de cálculo como esta. En lugar de ir en la lista áspera específicamente en
el 0 líder aquí. Esta es otra parte
mágica sobre la tabla nombrada
que tenemos aquí, o el
objeto list row es que cuando trabajamos con la
fila de lista o el objeto list, es específicamente sabe que estamos hablando de esta fila. Y eso es algo que puedes hacer, es tener esta separación entre incluso esta
misma fila exacta aquí, donde si eliminamos
esto en una hoja
de cálculo, por supuesto esto
va a desaparecer. Pero mientras tanto, si trabajamos con el objeto de lista de esta tabla en la
fila de lista, específicamente, excel es realmente bueno con
poder averiguar
que solo estamos trabajando con nuestros datos dentro de
este rango en lugar trabajar con las filas o columnas de
toda la hoja de cálculo. Entonces esa es una de las
razones por las que estamos trabajando con nuestro objeto de lista
y nuestra tabla de nombres es porque Excel está haciendo un
muy buen trabajo al darse cuenta de que esto específicamente son
nuestros datos por aquí. Y no queremos
salir de nuestro camino para afectar las cosas que
están fuera de ella. Entonces eso es todo. Solo
quería añadir esto al final
del video como
una explicación más. Ahí.
67. 3.4.1 Citas - Plantilla de salida de Excel: Ok, Ahora que hemos
terminado nuestras funciones donde podemos crear nuestra
cotización y podemos sumar líneas, y podemos eliminar líneas
seleccionadas y
configurar la información básica
para nuestra cotización aquí. Pasemos a alguna automatización
real. Estoy seguro que nos falta un
montón de detalles aquí, pero lo agregaremos más tarde. Vamos a seguir adelante y
entrar en nuestro paso donde agregamos un nuevo
botón que
va a crear nuestra cotización
real cancelar aquí porque aún no
tenemos una macro. Agregaré este nuevo
botón, diremos crear. Hay un montón de
formas diferentes en que podemos hacer una cotización. Pero solo para empezar, porque estamos haciendo mayormente
automatización en Excel en este momento, hagamos nuestro formulario de cotización como otro archivo de Excel tendrá
la opción más adelante para actualizar esto y convertirlo en un archivo de
Microsoft Word PDF y todas estas
diferentes formas en las que podemos
generar documentos de forma automática. Pero para construir sobre lo que
hemos pasado hasta ahora, haremos nuestra salida de cotización
en archivo Excel por ahora. Vamos a configurar esta cotización para que
necesitamos un cliente aquí. Diremos helado de tinta
al por mayor de helado como
nuestro nombre de cliente. Y nuestro nombre de contacto
será algo. Podemos hacerlo. Un nombre rápido aquí. Y agarremos aquí la
arcilla O'Neill. Entonces nuestro nombre de contacto
será arcilla en Neil en helados wholesale
piensa ahora hay un par de formas en que
podríamos hacer esto, pesar de que hemos optado por hacer nuestra plantilla de salida en
Excel o cotización de salida, o bien se puede generar a partir de un archivo Excel
completamente desde
cero. Por lo que podríamos crear
un nuevo libro de trabajo aquí y crear una nueva plantilla de
cotización aquí, completamente desde cero
y tener nuestro código construir lo que podría ver
una cotización, podría parecer. Entonces empezará a decir
aquí y en realidad
teclear cosas y tendríamos que reorganizar todas nuestras celdas y todo. Otra forma en que podríamos hacer esto es no tener el código
que haga muchos detalles, sino que en su lugar vamos a configurar un formulario de cotización como un archivo
independiente de Excel, y luego abriremos eso y esencialmente
llenaremos en los espacios en blanco. Entonces la información
que tenemos de nuestra cotización aquí, único que
cambia es básicamente nuestro contenido en nuestro encabezado
y luego nuestras líneas. Y así podemos hacer
toda una plantilla que luzca cierta manera ya en
este archivo Excel guardado. Y nuestras Macros sólo
van a abrir la plantilla y luego poner la información en
el lugar correcto. Para empezar. Esa segunda opción
suena mucho más fácil. Entonces sigamos adelante y
empecemos a construir esa idea. Entonces en realidad
voy a cerrar esto. Vamos a venir a
nuestros archivos de cotización aquí. Aquí es donde está nuestro archivo
principal de Excel. Y tal vez lo voy a
poner aquí en esta carpeta y vamos a
crear un nuevo archivo de Excel. Y llamaremos a eso. Voy a usar un subrayado aquí
solo para evitar un espacio. Vamos a abrir esto. Y este es un
nuevo archivo de Excel en blanco. Y vamos a hacer de esta
nuestra plantilla de cotización. No voy a hacer una muy
buena porque esa
no es necesariamente la idea
de estos tutoriales. Así que voy a hacer uno
bastante crudo aquí. Digamos que la cotización
hará que este tipo de
similitud aquí. Diremos, tal vez vamos a poner aquí
nuestro número de cotización. Diremos contacto con el cliente. Y entonces tendremos alguna
información por aquí sobre nuestra cotización
nos hará estilo por aquí, vamos a formatear esto como una tabla. Por qué no vamos con verde, supongo que tal vez vayamos
con un tema verde aquí. Si nuestras líneas de cuadrícula en tu número de
cotización pueden ir por aquí, en cambio, haz esta fuente un
poco más grande aquí, crea algunos bordes
por aquí. Yo estoy aquí. De acuerdo, bueno, sólo empieza
con esto por ahora. Guardaré esta
plantilla y necesitamos configurar esta plantilla
para que
sea relativamente fácil para nosotros poner información
en estas áreas. Entonces mismo concepto del que he
hablado muchas veces aquí. No queremos simplemente
colocarlo en la celda B3, aunque podríamos,
incluso podemos en esta plantilla de salida, crear rangos con nombre para que podamos trabajar con
estos campos más fácilmente a su cliente Contacto. Y nombraremos esta mesa. Las líneas de tabla en realidad estaban
reutilizando sus líneas de tabla de nombres. No sé si
eso es una gran idea, pero en realidad es un archivo
diferente completamente. Entonces ya verás cómo podemos
salir con la suya teniendo el mismo nombre y
vamos a trabajar con eso. A pesar de ser un nombre que
usamos en nuestro otro archivo de Excel, podría ser una mejor idea
decir líneas de salida de tabla, pero lo dejaremos así y verás cómo
se trata eso en el código más adelante. Y aquí arriba hay un campo también. Y vamos a hacer este número. De acuerdo, vamos a correr
con esto por ahora.
68. 3.4.2 Cita: transferencia de encabezados de salida de Excel: De acuerdo, vamos a correr
con esto por ahora. Voy a salvar esto. Y ahora tenemos este botón
genial por aquí. Pasemos a nuestro código. Y dividiremos nuestro código
por aquí como lo hacemos normalmente. Y tenemos este
botón click F5. Creo que esto se generó
cuando creé el botón. Hagamos de hecho esto un nombre de subrutina
diferente. Y llamaremos a esto Generar. Y cambiaremos este
módulo uno Nombre. Generar Documentos. Nuevamente, sólo para doblar todo juntos de una
manera descriptiva para generar accionable,
digamos con Excel. De acuerdo, entonces tenemos nuestro
archivo Excel separado que acabamos crear como plantilla por aquí. Y así necesitamos
abrir ese expediente para empezar. Entonces vamos a establecer un
objeto de libro de trabajo que va a soportar este
archivo de Excel que abrimos. Porque entonces
vamos a tener que interactuar con este cuaderno de trabajo. Vamos a decir libro de trabajo, cita como este objeto libro de trabajo. Entonces esta es en realidad una variable objeto para
un libro de Excel, esencialmente un archivo de Excel. Y vamos a
decir set wb es igual. Y luego vamos
a abrir una carga de trabajo, que creo que son libros de trabajo. En realidad se puede ver que voy a
recoger el espacio de control aquí. Y agregó una S automáticamente porque esa es la única
palabra clave, dirá abierto. Y entonces necesitamos el camino de nuestra plantilla de cotización por aquí. Así que sigamos adelante y creemos
esa dimensión como cadena. Lo que esto necesita para ser el camino
completo de nuestra cotización. Lo que eso significa es
aquí, nuestra ruta de carpeta. Y luego invertida, nuestro nombre de
archivo por aquí. Y agregaré este nombre de
archivo por aquí. Y este es el
camino completo de ese archivo. Una forma más fácil de conseguir eso. Aquí está Windows 11. Puedes usar copy como ruta. Y este es también el camino completo. Así que eso realmente acaba
de poner lo mismo por ahí, pero esa es una forma más rapida de
obtener la ruta completa de cualquier archivo de Excel cuando estés navegando en tu Explorador de
archivos. Por lo que ahora el libro de trabajo que
vamos a abrir es nuestra plantilla de cotización. Y después a medida que la
abrimos, vamos a establecer esta cotización del WB como el
libro de trabajo que estamos abriendo. Y podemos seguir adelante
y probar esto. Vamos a golpear Play. Y ves nuestra plantilla acaba de
abrirse por aquí. A modo de ejemplo, podemos
decir WB, cita cerrar, ya que este objeto
representa nuestro archivo, y se puede ver si le pego a F9, así que nos detenemos aquí, le pegaré a F5. Entonces esto corre y
esto está abierto ahora. Y luego si golpeo F8 y ejecuto esta línea cerrada,
ese libro de trabajo se cierra. Por lo que ya ves tenemos
este objeto de libro de trabajo, que va a ser ese
archivo y podemos trabajar con él. Ahora antes de cerrar
ese taller, queríamos hacer
algo con él. Queremos traspasar toda
esta información. Y en realidad ni siquiera
queremos cerrar el libro de trabajo, así
que comentemos eso por ahora. No sé si lo
usaremos más tarde, pero llegaremos allí. Ahora, vamos a seguir adelante
y correr esto. Y tenemos este cuaderno abierto. Y ahora podemos
pensar en la información que necesitamos para poblar aquí. Por lo que vemos tenemos
nuestro número de cotización, tenemos nuestro cliente y nombre de contacto. Entonces
empecemos con eso. Básicamente las tres piezas de
información justo ahí arriba, digamos número como String, cliente, como gris, y contacto. Así que vamos a buscar estas cosas
de nuestra interfaz de usuario. Por aquí a la izquierda está
el valor de nuestro rango. Número de cotización. Por aquí. Tenemos estas dos celdas que aún no
hemos dado nombres. Para que podamos subir aquí y
llamar a ese nombre de cliente. Y diremos contactar. Buena vieja arcilla O'Neill por aquí. Y vamos a tener un
cliente igual a rango. Nombre del cliente valor de punto, y nuestro nombre de contacto es igual a
rienda, póngase en contacto con el valor. Una cosa que mencioné aquí es que sólo estoy llamando a
este rango fuera. Pero algo que puede
volverse un poco confuso. Y creo que estamos bien por ahora, pero sin duda puede
confundir el programa en sí es que
tenemos dos cuadernos. Y así cuando digo
algo así como rango, número de
cotización, vamos a ver el mismo problema
con el nombre de nuestra tabla. Tenemos número de cotización por aquí, pero también tenemos
número de cotización por aquí. También. Puede ser fácil para nosotros e
incluso el programa
confundirse en cuanto a qué rango
estamos hablando. Ahora que tenemos dos libros de trabajo, sobre todo cuando tienen rangos
nombrados que se superponen. En este caso, nuestro código
existe dentro de esta cotización, mayor archivo Excel
por aquí a la izquierda. Y así creo que va a saber dónde sacar
la información. Puedo seguir adelante y crear un punto de ruptura y ejecutar
esto solo para probarlo. Si pego a F8. En realidad, me equivoqué ahí
ves que no lo sabe. Ves que este
número de cotización está en blanco. Eso se debe a que
está incumpliendo el
archivo que está activo. En el archivo activo en este caso es el
último con el que hemos trabajado, es
decir, abrimos este fichero. Este archivo es lo
que está mirando. Y ahora está obteniendo
el valor del número de cotización, que está en blanco de este archivo. Entonces estamos viendo un problema
directamente sobre cómo se confunde
el código en
cuanto a los rangos nombrados. Y con esa lógica, este archivo es lo que
estamos viendo. Y ni siquiera va a
saber qué
rangos el nombre del cliente porque
no hay rango por ese
nombre en este archivo. Entonces si pego F a,
tenemos un error. En tanto, si acabo de activar este archivo original de Excel donde sí
tenemos nombre de cliente, ves
que ya no tenemos problema. El término para esto es
que no estamos siendo explícitos en nuestro uso de
estas llamadas por aquí, lo que significa que no estamos
indicando los detalles. Entonces esta cosa está tratando de
adivinar lo que queremos decir y encontrarnos con errores. Entonces para aclarar que no
estamos trabajando con rangos
nombrados por estos nombres
en nuestra plantilla de cotización. Vamos a escribir este trabajo, que es sólo otro objeto de
libro de trabajo, pero significa el archivo Excel en el
que vive este código. Esto se va a
decir explícitamente que cuando
usamos estos rangos de nombres, nos referimos en este libro de trabajo. Entonces sigamos adelante y hagamos
eso por cada uno de estos. Entonces no hay confusión. Así que no, vamos a
ejecutar esto de nuevo. En realidad tenemos este problema que el libro de trabajo es
solo un nivel de libro de trabajo, el nivel de archivo, y los libros de trabajo en realidad no
tienen rangos en ellos. En cambio los libros tienen hojas de trabajo y luego las
hojas de trabajo tienen rangos en ellas. Entonces tengo que aclarar, eso realmente significa esta
hoja principal dentro de nuestro cuaderno de trabajo. Por lo que puedo añadir esto a
eso. Ya hemos añadido esto. Ahora estamos
contando muy explícitamente al código
dónde están nuestros rangos. Por lo que golpeamos otra zona aquí donde olvidé
poner en la S. Son sábanas, no barato singular. Así que intentemos esto de nuevo.
Tal vez lo haga bien. Y luego golpeamos a F8. Después pasamos el cursor sobre estos, podemos ver números de cotización al
cliente y nombre de contacto. Y estamos obteniendo la
información correctamente. Y ahora puedes poner un
comentario aquí. Información. Y ahora podemos usar esta referencia explícita donde
le decimos específicamente en
qué libro de trabajo estamos, que es cotización WB
que aquí configuramos. Cuando abrimos la
plantilla, decimos hojas. Podemos decir Hoja uno aquí. O podríamos decir uno, lo que significa que la primera hoja, que es la única hoja
en esta plantilla, solo
cambiará
este grifo, digamos cotización. Esa es la
forma más fácil. Y de esa manera, nuevo, no estamos usando
estos nombres genéricos. Entonces vamos a decir que
es cotizar ese rango. Y luego en nuestra plantilla de cotización, el rango también es número de cotización, valor igual a número de cotización. Vamos a probar este
para asegurarnos de que funcione. Ahora, si yo FAA, eso es incluso paso a través de esto, abrimos nuestro archivo, hoja de cotización
WB, cotización, y luego voy a citar el valor del
número. Vamos a correr esto y lo
ves colocó nuestro
número por aquí. Cambiará cómo
se ve un poco esto. Haré un Control X para
cortar y pegar por aquí. Y luego la parte agradable
sobre rangos nombrados, como ves se nombran referencia movidos junto con
nuestro corte y pegado. Y luego puedo
hacer clic derecho y pagar formato
especial solo para que coincida con el formato de
aquí. Así que voy a despejar esto. Le pegaré a Save y
terminemos esto. Detener nuestro modo de ejecución. Y repetiremos el
mismo proceso para número de
Cotización y luego dos
clientes para contratar. Y luego aquí
queremos a nuestro cliente, que podemos copiar y
pegar y contactar nombre. Esta puesta por aquí.
Ahora cuando ejecutamos esto, ves que esta información viaja
a nuestra plantilla de cotización. Y vamos a hacer este formato
y cambiar un poco aquí. Simplemente cambiaré este formato
por aquí a la izquierda.
69. Transferencia de líneas de salida de Excel: Ahora tenemos que
poblar nuestras líneas. Al comparar estos, podemos ver que nuestra información
y nuestras dos tablas comparativamente es básicamente
la misma descripción,
cantidad, precio unitario. Así que me olvidé de aquí una columna. Podemos hacer un inserto
columnas a la izquierda, y diremos unidades, precio
unitario y total de línea. Así que cosa muy similar aquí. De hecho, sólo para la práctica, permítanme quitar estas unidades
que acabo de agregar. Vamos a
eliminar esta columna. Y por cantidad
combinará esto juntos solo para ver cómo las cosas no tienen que
ser exactamente lo mismo. Podemos hacer algún procesamiento a
medida que movemos cosas, por lo que podemos agregar nuestras unidades
directamente a nuestra cantidad. Simplemente te mostraré que
no tienen que ser uno-a-uno, que podemos manipular los
datos como lo agregamos aquí. Ahora que hemos movido
estos datos, hagamos otra
sección y diremos línea y por ahora, crearemos objetos que
representen nuestra tabla fuente. Y luego haremos
otro que signifique nuestra salida por aquí. Voy a
llamarlos fuente de nuestra información y
nuestro destino, que es donde se va a aterrizar la
información. Entonces, como puedo hacer eso es que
voy a crear
estas listas objetos con los que hemos trabajado antes. Y lo voy a llamar
líneas de tabla , fuente, objeto de lista. Y luego
líneas de mesa destino. Ahora el conjunto de ellos,
voy a decir establecer líneas de cable fuente. Si te acuerdas. Estos nombres, tablas en nuestros archivos de Excel
tienen el mismo nombre. Pero podemos hacer
algo como decir, este libro de trabajo que ella hizo. Entonces al igual que antes, podemos decir nuestros objetos de lista
y por nombre son líneas de cable. En tanto, vamos a establecer
nuestras líneas de mesa destino es
igual a no este libro de trabajo
va a ser hojas de cotización WB. Entonces ya ves, a pesar de
que tenemos nuestros mismos nombres de tablas aquí, porque estamos trabajando
en dos archivos. Podemos ser muy explícitos en
qué expedientes estaban trabajando para que el código
sepa cuál es cuál. Y ahora en nuestro código
tenemos dos tablas diferentes. Uno que es la fuente y luego uno que es el destino. Por lo que vamos a mover
toda la información de esta tabla de fuentes a
nuestra tabla de destino. Entonces vamos a
tener que recorrer cada fila en nuestra tabla fuente. Entonces sigamos adelante y hagamos eso. Para I equivale a una a
Líneas de tabla, recuento de puntos fuente. Ahora para hacer las cosas más fáciles, vamos a trabajar
una fila a la vez. Así que vamos a crear objetos
incluso para las filas. Entonces de la misma manera que
hicimos las tablas harán L rho, que es nuestra fila de lista para nuestra información fuente como ruta de
lista y
diremos ruta L, destino de esta fila también. Verás cómo
usamos eso por aquí. A medida que configuramos nuestra fuente, mientras pasamos por cada mesa, vamos a decir L rho. Entonces nuestra fila fuente, medida que pasamos por cada
fila va a ser fuente de líneas de
tabla
que enumera las filas. Entonces, a medida que pasamos por la fila uno, tenemos nuestra fila fuente. Vamos a ver esto. Y entonces nuestra fila de destino
va a ser esta primera
fila de aquí. Y luego mientras
miramos la segunda fila aquí, vamos a crear una
nueva fila por aquí. Es algo que te
mostré antes, es Excel es lo suficientemente inteligente
como para que a medida que agrego nuevas filas de esta tabla, se va a conocer el
push este texto hacia abajo. Entonces incluso si tenemos una
línea o una 100 líneas, va a saber que
empujan toda la información hacia abajo mientras trabajamos con
esta mesa de aquí. Entonces mientras miramos por aquí, vamos a poner nuestra fila. Y luego vamos
a crear una nueva fila. Establecer L rho destino es igual a líneas de
cable destino, esa lista baja, que es algo que usamos cuando estábamos creando
el fondo de la línea de anuncios puede la
función Agregar elemento para esta tabla. Y cómo podemos alinear esto. En realidad, voy a crear algunas variables extra aquí solo para que las cosas sean más claras. Va a haber más código, pero hará que lo que está
sucediendo sea más claro es que vamos a crear
todas estas variables. El número de línea es una
cadena, elemento como cadena. De hecho, ya que es
sólo una salida, solo
hará que todo
cadenas para mantenerlo simple. Sé que la suma
de estos son números, pero solo les haremos
todas las cuerdas por ahora. A ver si podemos simplificar
las cosas de esa manera. Como palabra clave aquí, puedo decir cantidad como anillo, unidad, precio y precio extendido. Así que vamos a poner todos estos. Ahora que tenemos nuestra fila
fuente de información, queremos tomar esta información y colocarla en nuestras variables. Entonces digamos que mi número es igual Aquí está nuestra fila aquí. Fuente de fila. Podríamos decir 12345 ya que hemos
pasado unas cuantas veces ahora, realidad no
queremos usar nuestros números en caso de que cambien
nuestras columnas. Entonces vamos a utilizar
este método donde
tenemos nuestra fuente de líneas de cable. Vamos a
averiguar el índice de
nuestra columna de lista cuando
suministre el nombre de la columna de lista. que si estos índices para nuestras columnas
se mueven alrededor e
insertemos o eliminemos columnas que lo resolverán
dinámicamente sobre la marcha. Y así vamos a
decir índice de número de línea, que esencialmente está diciendo uno. Vamos a conseguir ese valor de
índice de nuestra fila. Entonces esto va a devolver uno. Entonces es esencialmente la
primera celda de nuestra fila. Y luego a medida que escribimos
en este próximo, será más claro que
estamos diciendo que el ítem es igual, y podemos tomar toda
esta fila de información y cambiar esto para ser nuestro
encabezado de columna por aquí línea, lo siento, nuestro elemento de cabecera de columna. Y esto va a volver a por ser nuestra segunda columna. Y vamos a conseguir la segunda
columna de esa fila. Y seguiremos
copiando esto. De hecho, copiaré
esta línea por aquí. Y diremos descripción
cantidad unidades, precio y precio extendido. Descripción cantidad unidades,
precio, precio extendido. Y tenemos que
actualizar nuestra columna. Por lo que nuestra descripción
proviene de nuestro encabezado
de columna de descripción. Sólo voy a seguir moviendo la información con copiar
y pegar así. A pesar de que podría
ser fácil de escribir, te va a dejar
claro dónde estoy obteniendo
estos valores. Unidades proviene de este encabezado. El encabezado de precio entra en
la variable de precio unitario. Y entonces nuestro precio extendido
es este hacia adelante extendido, entra en nuestro nombre de variable de
precio de capital. Y ahora tenemos todo para esta fila en estas variables. Y hemos agregado esta nueva fila
a nuestra tabla de destino, debería poder
mirar esto por aquí. Y luego para nuestra mesa de
destino, vamos a hacer
esencialmente lo contrario. Al igual que estamos
recibiendo información de una celda en la
fila de aquí. En realidad vamos
a poner información en nuestro destino L rho. Tenemos nuestra gama, tenemos nuestro nombre de columna
llamado número de línea. Entonces vamos
a establecer este valor. Todo este código básicamente
significa esta celda de aquí. Y vamos a
establecer que estamos en número de
línea que obtuvimos
de nuestra fuente aquí arriba. Y luego hacemos lo mismo
por la descripción de nuestro artículo. Unidades de cantidad, que en realidad no
serán unidades porque
combinamos esos dos
campos juntos, precio
unitario y precio extendido. Y en realidad tenemos
una columna menos en esta salida porque
combinamos cantidad en unidades juntas donde estamos
planeando hacer eso. Así que vamos a copiar esto por aquí, que es elemento que sólo
voy a escribir esto. Estoy obteniendo esto de
estos encabezados de columna, pero sin meterse con todos mis tamaños de ventana,
dirá descripción, cantidad,
precio unitario . Y precio. Utilizamos aquí la palabra precio de línea en lugar de precio extendido. Oh, en realidad usamos el precio total de
línea. Y entonces
parece que accidentalmente me mudé por encima de una fila extra. Entonces por aquí
tenemos 1234567 líneas. Y luego por aquí,
ya que los
combinamos, tenemos seis meses. Entonces esto se ve bien. Y luego en nuestra salida
tenemos número de línea aquí. Tenemos artículo por aquí. Descripción como nuestra cantidad
variable. Ahora aquí es donde estamos
combinando nuestra cantidad en unidades. Entonces vamos a decir
cantidad y un espacio vacío. Y luego vamos a poner nuestras
unidades y verás cómo eso se unirá
en una cuerda combinada. Y luego tenemos nuestro precio
unitario por aquí. Y luego tenemos nuestro precio
extendido por aquí. Entonces aquí hay mucho código, pero creo que hay un poco más claro lo que está pasando. A pesar de que nos tomó más tiempo, estábamos recibiendo
toda la información de nuestra fila fuente y luego ponerla en nuestra
nueva fila de destino. Y entonces esto va a
recorrer todas las filas. En realidad vamos a correr a través de esto. Entonces esto es lo mejor
que puedo hacer por aquí. Tratemos de ejecutar
esto y usaré F8 para que puedan trabajar nuestro camino
a través de esta línea por línea. Por lo que abrimos nuestro archivo, hemos establecido nuestras referencias de tabla,
fuente y destino. Y de inmediato nos encontramos un tema con el bucle
a través de nuestras filas aquí. Y eso es porque tengo
este parámetro de conteo, pero olvidé escribir eso. Lo que estamos contando es
nuestra lista filas conteo de puntos. Así que acabo de olvidar la
lista Rosenberg aquí. Seguiré diciendo F8. Ahora tenemos nuestra fila por aquí. Estamos consiguiendo nuestro número uno
por aquí, nuestros artículos de línea. Por lo que ahora estamos recibiendo la
información de esta fila. Ahora agregamos una nueva fila de
información por aquí. En realidad teníamos una fila
en blanco por aquí. El claro que fuera. Y estamos agregando la información
a esta cuadrícula. Ahora, está diciendo que tenemos un problema con esta
fila de información. Revisemos nuestra línea precio
total por aquí. Y nuestro problema aquí es
que está diciendo que
no tenemos una columna
llamada línea precio total, pesar de que vemos
una por aquí. Y eso es porque por
aquí estamos trabajando con nuestra mesa de destino. Y olvidé cambiar esto
a nuestra mesa de destino. Por lo que está buscando
una columna llamada Line Total price en
nuestra tabla fuente. Por lo que hay un montón
de pequeños detalles por los que mezclarse aquí. Vamos a seguir adelante y
arreglar todo esto. Por lo que en realidad tomaré toda
esta palabra para que
pueda hacer doble clic y actualizar todos
estos para estar hablando de nuestra mesa de destino. Entonces voy a
hacer esto más grande. Algo que olvidamos
hacer al venir
aquí es que ya había una fila en blanco. Entonces, antes de hacer esto, tenemos que despejar completamente
esta mesa. Por lo que queremos asegurarnos de que esta
tabla no tenga información en ella. Voy a seguir adelante y eliminar todas
estas filas por aquí. El tipo de
cosa extraña de estas mesas es incluso cuando no hay filas, parece que hay una fila. Así que en realidad no se puede ver
visualmente la diferencia entre una tabla con
una fila y 0 filas. De todos modos,
volvamos por aquí. Vamos a ejecutar este paso
a través de nuestro código. Ahora ves que la información
está apareciendo por aquí. ves aquí tenemos, hemos combinado
con éxito la información para que nuestra cantidad en
unidades estén juntas, en nuestro precio unitario se
muestra en blanco. Y no estoy seguro por qué es eso. Y ves es que aquí no
hay precio de unidades. Creo que es precio unitario. Sí, accidentalmente
tuve un s ahí. Y así si vengo
aquí y hago clic en esto, ahora, era sólo un
error tipográfico en la variable. El precio unitario no se
pobló correctamente. Y entonces ahora deberíamos
estar haciendo un bucle a través la siguiente fila es llegar
de nuestra fuente. Entonces ahora está poniendo
esta información en nuestra
mesa de destino con otra fila. Ya ves la principal diferencia
aquí es que estamos en la línea dos y tenemos diez
galones en lugar de cinco, que podemos volver a
revisar aquí en nuestra fuente que estamos
a diez galones. Voy a golpear play sólo para correr esto todo
el camino a través. Y ya ves que tenemos toda nuestra información
de nuestra tabla fuente, se trasladó aquí a nuestra tabla de
destino.
70. 3.4.4 Citas - Archivo de salida de Excel: Ahora que tenemos esto, y ahora esencialmente hemos
poblado nuestra plantilla. Esta es una cotización muy simple. Habría más que
esto en una cotización normal, pero solo usaremos
esto para la demo. Y lo que tenemos que hacer es simplemente guardar este archivo como nuestra salida. Digamos cotización WB. Y podemos decir Save As
porque no
queremos guardar esto encima de nuestra plantilla. Tomamos nuestra plantilla que
debería comenzar como en blanco, y vamos a guardar
esto como un nuevo nombre. Entonces donde podemos guardar esto, en realidad
creamos
una carpeta de cotizaciones. Entonces en este caso estamos
trabajando en la cotización número dos. Probablemente deberíamos guardar nuestra cotización en esta
carpeta para cotizar a. En lugar de tener que lidiar con
todo esto desde cero. Recuerda que
creamos esta herramienta que va a construir una
ruta de nuestra carpeta de cotizaciones. Entonces tenemos nuestra ruta de carpeta, que es la carpeta donde están todas
las carpetas de cotizaciones. Entonces tenemos esta
lógica por aquí, en realidad incluyendo
nuestro número de cotización, para obtener nuestro número de cotización. Después para construir
nuestro nombre de carpeta sub y crear nuestra nueva
carpeta ruta completa. Así que en realidad vamos a copiar eso. Y hice un Control
C ahí
regresará por aquí para generar docs. Y necesitamos crear
nuestra nueva variable. Por lo que vamos a decir salvo a respectivo. Voy a pegar
esto por aquí. Estamos recibiendo nuestro número de cotización, que en realidad ya tenemos, así que ya no necesitamos eso. Tenemos nuestra ruta de carpeta, que está justo aquí. Tenemos nuestro nuevo nombre de carpeta. Por lo que en realidad llamó. Recordemos, su nombre es actualizar esta variable,
tenemos que trabajar cotización. Tenemos nuestro
número de cotización empujado al formato de
seis dígitos y los
agregamos juntos. Y entonces nuestro camino completo es
nuestra ruta de carpeta más
nuestro nombre de carpeta de cotización. Y podemos llamar a esto
nuestra carpeta camino completo. Ahora tenemos una carpeta de ruta completa. Podemos ver que la función guardar como toma
en nuestro nombre de archivo, que será nuestra
carpeta de cotización ruta completa. Una cosa más que nos
falta es nuestro nombre de archivo. Entonces esto es en realidad
solo una ruta de carpeta. No hemos llegado a
nuestro nuevo nombre de archivo. Vamos a guardar esto ya que
en realidad cambiará esto
a una ruta completa de archivo. Vamos a añadir en nuestra
cotización nombre de archivo aquí, y lo llamaremos cotización. Llamaremos a esto en realidad, reutilicemos el nombre de nuestra carpeta, que va a ser de dos
con seis dígitos aquí. Y lo llamaremos carpeta
llamada output dot XLSX, ya que se trata de un archivo Excel. Entonces eso fue mucho lo que hemos
hecho aquí sin revisar. Veamos si esto funciona. Lo último que necesito para
actualizar este archivo ruta completa,
esta cita dispara ruta completa para ser lo que estamos guardando como en lugar
de la ruta completa de la carpeta, que es la
variable que cambiamos. Esto fue mucho. Entonces, si estás siguiendo a lo largo, puedes pasar por
este código línea por línea. Vamos a borrar nuestra plantilla, eliminar nuestras filas, y eliminaremos todo nuestro
contenido aquí. Y veamos si sucede que esto funcione en
este primer intento aquí. Y antes de que hagamos eso,
abramos la plantilla de cotización. Sólo para confirmar que esta plantilla de cotización está en blanco en este
momento, la cerraremos. Ven aquí a nuestro código. Y en realidad una
cosa más agregará aquí es un cuadro de mensaje que dice que
el archivo se ha guardado. Haremos otra alimentación de línea vb. Y vamos a mostrar
nuestra ruta completa del archivo por aquí a nuestro usuario. Por lo que confirma que
hemos
guardado con éxito el archivo si
esto funciona correctamente. Así que voy a seguir adelante y
presionaremos Guardar aquí, donde vamos a golpear play más bien. Ves que todo esto es poblador. Archivo se ha guardado en
este camino por aquí. Todo se ve bien hasta ahora. Y si pasamos a
nuestra cotización a subcarpeta, aquí, tenemos nuestro archivo de salida. Si lo abrimos, acabo de encontrar en realidad ya
estaba abierto. Entonces vamos a cerrarlo. Básicamente nunca se cerró
después de regenerarla. Entonces ahora lo abrimos. Vemos que tenemos
nuestra cotización aquí. Si volvemos
aquí a nuestra plantilla, vemos que todavía está en blanco. En realidad vamos a crear una cita
número tres por aquí. Eliminemos una de estas líneas y agregaremos
otra línea por aquí. Vamos a añadir un poco de fresa, agitar un poco. Agregaremos otra línea de pedido. Y vamos a crear nuestra
cotización por aquí. En realidad nunca
adjuntamos este botón a la subrutina
que lo creamos. Entonces vamos a adjuntarlo para crear. Generar cotización es
nuestra subrutina. Haremos clic en esa
plantilla aparece. En realidad tenemos un tema
por aquí para Save As. Y de inmediato me estoy
dando cuenta por qué
tenemos un tema de ahorro por
aquí para la cita tres. Así que vamos a cerrar esto por aquí. Eso es
porque va
a intentar guardar en la carpeta de
cotización tres, pero aún no tenemos una carpeta de
cotización tres. Entonces vamos a abrir esta plantilla para arriba. Todavía está en blanco. Tenemos que golpear Crear carpeta. Por lo que ahora en realidad tenemos
una cita tres carpeta. Ahora que tenemos una carpeta de
cotización tres, vamos a crear nuestra cotización. Esta información consiguió
archivo poblado se ha guardado. Aquí estamos con nuestra carpeta de
cotización tres, doble clic en ella, y
ahí está nuestro archivo de salida. Vimos un pequeño tema ahí, que es si vamos a cuatro, entonces no
teníamos carpeta en ella, intentamos guardar y
tropezamos con un error. Así que vamos a
cerrar esto muy rápido. Vamos a nuestra subrutina
para generar la cotización. Antes incluso generamos
el error de cotización. Consulta eso solo para
asegurarte de que tengamos
una carpeta de cotizaciones. Veamos. Por lo que necesitamos revisar
esa carpeta con toda esta
información por aquí. Así que en realidad vamos a llevar esto a
la cima porque
queremos hacerlo antes
incluso de empezar a degenerar la cotización, porque no queremos
hacer el expediente y después no poder guárdalo. Así que vamos a ir por aquí, archivo de
cotización, ruta completa. En realidad queremos un
escalón donde tendríamos solo nuestra carpeta de
cotizaciones porque eso es lo que
queremos comprobar. Queremos ver si existe
esta carpeta. Entonces si hacemos cuatro, queremos
básicamente comprobar si existen cuatro. Así que separemos esto. Diremos carpeta, ruta
completa, cadena. Carpeta, ruta completa es solo esto sin nuestro nombre de archivo al final. Entonces es esencialmente esto. Y luego nuestro archivo de cotización, camino
completo, manos son nombre de archivo. Por lo que ahora usamos nuestra carpeta de
cotizaciones para matemáticas. Y luego agregamos nuestro nombre de
archivo por aquí. Y no necesitábamos
este ampersand extra. Entonces si sigues lo
que acabamos de hacer, básicamente sólo dividimos
esto en dos pasos. Por lo que tenemos otra
variable que mantiene nuestra carpeta ruta completa
antes de construir lo completo que va a dar
salida a nuestra ruta completa
con nuestro nombre de archivo. Solo para mostrarte, esto
es un poco confuso, sobre todo con todos estos nombres de
variables largos que creé. Sólo vamos a dar salida a estos. Entonces aquí está la salida
para la carpeta. Aquí está la salida para el archivo. Pasemos por
esta línea por línea. Está diciendo que aquí tenemos una declaración
duplicada. Eso es porque estoy usando la variable número de
cotización a pop, y aún no lo he declarado. Entonces digamos el número de cotización
como cadena aquí arriba. Pasaremos un paso. Aquí está nuestra carpeta de cotizaciones. Esto está diciendo que nuestro número de
cotización es 0. Entonces, ¿por qué es eso? Eso es porque obtenemos nuestro número de
cotización justo aquí, que está abajo de todo este
código donde lo estamos usando. Así que de nuevo, tenemos que mover
este brote de cosas, así que estamos reorganizando. Por lo que ahora obtenemos nuestro
número de cotización
lo primero para que primero construyamos
nuestros caminos. Vamos un poco capaces de construir el guardado de carpetas de
archivos. Abierta a ella. Puedo empezar a poblar datos. Sé que esto se está volviendo
un poco confuso, pero vamos a
asegurarnos de que
tenemos nuestra secuencia correcta aquí. Ahora, vamos a parar. Volveremos a golpear a
F8 y pasaremos. Ahora nuestros números de cotización,
en realidad algo. Y luego cuando construimos nuestra carpeta camino completo,
vamos a despejar esto. Aquí está nuestra ruta de carpeta. Aquí está nuestra ruta de archivo aquí
con nuestro nombre de archivo allí. Y entonces la razón por la que creamos esto es para que podamos
usar algo que
usamos en nuestra crear una subrutina de Carpeta Abierta
donde vamos a decir si ruta de carpeta directorio, ruta entera en realidad
directorio db es igual a blanco, entonces la subcarpeta no existe. Ahora echemos
nuestro mensaje de error. Generar. El expediente no existe. producirá un error. Incluso en proceso
será cancelado. Entonces solo vamos a
usar esta palabra clave end, que sólo va a
detener toda la macro en sus pistas cuando
llegue a esta línea va a parar todo y no
seguir hacia abajo. Entonces en teoría, tenemos todo
esto resuelto. Hemos reorganizado las cosas
donde estamos averiguando todos los nombres de carpetas
y nombres de archivo
arriba para que podamos comprobar para
asegurarnos de que exista la subcarpeta
antes de seguir adelante. Y si todo funciona ahí, vamos a
pasar por todo lo de abrir una plantilla, poblar la información,
y luego guardar nuestro archivo. Por lo que tenemos una bonita
subrutina construida por aquí. Puedes ver que nuestra herramienta se está volviendo bastante inteligente
y complicada. Junto con eso,
vamos a crear cotización, en realidad va a dar un paso a cuatro, donde aún no tenemos
una sub carpeta. Entonces vamos a asegurarnos de que
estamos atrapando esta situación. Golpeamos Crear cotización,
no podemos generar archivo, sub carpeta no existe. Hagamos esto aún mejor. No se puede generar archivo alguna
carpeta no existe. Digamos que la siguiente
subcarpeta no existe. Pondremos un colon aquí, pondremos un feed de línea, vamos a poner en lo que
estamos comprobando, que es una
carpeta flotada ruta completa aquí. Vamos a utilizar este espacio de personajes de
subrayado. Underscore nos permitirá seguir
hasta la siguiente línea. Y esto hace que la
segunda línea de continuación de esta misma
línea de código por aquí. Eso es lo que hará este
personaje de subrayado, es decirles que continúen
en la siguiente línea. Vamos a decir ampersand
y otro feed de línea
dirán que el proceso será cancelado. Entonces veamos cómo se ve esto. Y veremos cómo se ve esto. En realidad voy a
crear dos canales de línea aquí. Por lo que verás la brecha
cuando ejecutemos esto. Ahora si digo crear cotización, la siguiente carpeta
no existe. Nos dice la carpeta
que está buscando. Y luego dice que el proceso
será cancelado. Y es por eso que
tenemos dos espacios aquí. Ahora. Creamos nuestra cotización para carpeta. Ahora podemos crear
nuestras corridas de cotización. ha guardado este archivo de plantilla. Aquí adentro. Vemos cotización para tiene una salida. Entonces el
toque final que podemos poner en esto se cierra este archivo. Entonces ya que estamos guardando el archivo mientras seguimos adelante y lo cerramos, por lo que no hace falta
que se quede abierto. Y ahora vamos a enfatizar una vez
más. Diremos cinco. Crea la cotización. La carpeta no existe. Vamos a crear la carpeta. Crea la cotización. Cinco aquí. Apenas nos dice que el archivo ha
sido guardado. Se cierra. Entonces aquí está nuestro archivo de salida
Excel para la cita cinco.
71. Herramienta de cita 3.5: correo electrónico de Auto Outlook: Ahora donde estamos
dejando fuera es que
tenemos este botón donde
podemos hacer clic en Crear cotización, y va a abrir
nuestra plantilla de Excel y generar una salida de cotización como un
archivo Excel separado y luego guardar en su respectiva carpeta de
cotizaciones. Queremos pasar
a nuestro siguiente paso. Por lo que ahora que generaste
en cotización de Excel, típicamente
vamos
a querer enviarlo a alguien. Queremos enviarlo de
vuelta a la persona que ha solicitado nuestra
cotización para nuestra tienda aquí. Entonces voy a crear
un nuevo botón por aquí. Cancelo para que
no tengamos que seleccionar la macro y decir
crear nuevo mapa. Entonces vamos a usar eso. Vamos a pasar a
nuestro código por aquí, abriremos nuestro
editor de VBA y vamos a ver, tenemos la gestión de
archivos Generar Documentos. Simplemente lo pondremos en
generar documentos. Así que vamos a poner esto junto con nuestro código antes de simplemente compartir
el mismo módulo aquí. Por lo que no tenemos
demasiados módulos y
diremos sub generar correo electrónico. Entonces pin esto por aquí, y tenemos nuestro botón de
correo electrónico general por aquí. Vamos a adjuntar nuestro botón generar
correo electrónico a nuestra
subrutina de generar correos electrónicos que acabamos de crear, que no tiene
ningún código en este momento. Sólo voy a poner
un cuadro de mensaje que diga a punto de generar correo electrónico. Doy clic en mi botón y decimos
sobre el correo electrónico generado. Así que ahora estamos listos para
escribir algún código aquí de una lección anterior
para temas de introducción, pasamos agregando
una biblioteca de referencia. Entonces vamos a hacer este
pop-up y Microsoft Outlook. Entonces vamos a subir a
Herramientas aquí, referencias. Y queremos agregar nuestra biblioteca de objetos para que podamos controlar
Microsoft Outlook. Entonces si me desplazo hacia abajo aquí a Microsoft en orden
alfabético. Entonces estamos buscando
Microsoft Outlook. Aquí. Vemos nuestra biblioteca de objetos outlook
16, esa es la más reciente y
la única en este caso, si hay más de uno, siempre elijo el número
más alto. Entonces nuestra biblioteca de
objetos outlook 16, revisamos y hacemos clic, Ok, va a restablecer nuestro proyecto porque
estaba en modo de ejecución. Así que eso está bien. Entonces si vengo aquí y voy a crear
un mensaje de Outlook. Por lo que queremos hacer
el equivalente crear un nuevo correo electrónico
en Microsoft Outlook. Voy a decir dimensión
O L para Outlook. Y diré que el mensaje es el nombre de nuestra
variable objeto que estoy calificando. Dirá perspectiva. Y esto sólo existe
porque agregamos esa biblioteca de objetos donde
fui a Herramientas y referencias. Pero desde que hicimos eso,
tenemos este objeto de perspectiva. Y luego en nuestra biblioteca de
objetos de Outlook, podemos decir elemento de Outlook Mail. El artículo masculino es un mensaje. Ahora que hemos declarado
nuestro mensaje de Outlook, necesitamos configurarlo como un mensaje
real de Outlook. Como siempre lo hacemos con las variables
objeto, lo
declaramos y luego
necesitamos configurarlo como un objeto. Diremos O L, O
L mensaje es igual a la aplicación de Outlook
dot create item. Vamos a crear
un elemento de Outlook Mail. Entonces esto está declarando
nuestro tipo variable. Y entonces ahora estamos configurando nuestra nueva variable como
un nuevo elemento de mensaje. Entonces esto es un poco similar, me
recuerda si haces un
nuevo objeto de libro de trabajo, entonces dices dimensión Libro de
trabajo, Libro de trabajo, y luego dices establecer libro de trabajo
es igual a libros de trabajo que agregan. Esto que hemos visto antes. Este es el equivalente
de libros de trabajo no añadir. Esto está creando un
nuevo mensaje de Outlook, pero al mismo tiempo, configurándolo en el objeto de elemento de
Outlook que hemos creado para
que podamos trabajar con él. Por lo que elimino esto. Y sólo para mostrar
esto, podemos decir pantalla de puntos de mensaje de
Outlook,
y vamos a hacer esto para empezar. Voy a seguir adelante y quitar este cuadro de mensaje
porque veremos eso un montón de veces
mientras probamos esto. Vale, ahora vamos a probar esto. Por lo que golpeé F8, creamos nuestro
objeto mensaje y ejecutamos la línea de visualización y ves un correo electrónico
aparece automáticamente por aquí. Entonces fue así de sencillo. Ahora tenemos un botón que
al hacer clic en Crear correo electrónico, aparece automáticamente Outlook y crea un
mensaje aquí para usted. Ahora eso no
nos está ahorrando demasiado tiempo todavía. Entonces vamos a añadir algunas
funciones más a esto. Por lo que tenemos nuestro
mensaje de visualización y podemos empezar a escribir algunas cosas
como el mensaje de objeto. Ese sujeto igual
es el tema. Podemos decir, oh, bien mensaje que el cuerpo es igual. Lo que
realmente deberíamos hacer aquí es usar una declaración width
porque ya puedes decir que vamos a estar llamando nuestro objeto un montón
de momentos diferentes. Entonces vamos a entrar en
guardar esa repetición aquí envolviendo esto
en una declaración width. Y entonces no tenemos que
escribir un mensaje una
y otra vez. Por lo que nuestro cuerpo se guarda aquí. Y acabamos de empezar con esto. Ahora, si yo golpeo play aquí, se
puede ver que fue así de fácil. Ahora, estamos enviando
nuestro correo electrónico aquí, nuestro impuesto de línea de asunto
en nuestro texto corporal. estas propiedades
sobre el correo electrónico. Entonces como estamos haciendo
algo con nuestra cotización aquí, podemos empezar a enmarcar
esto donde vamos a decir nuestro número de cotización como cadena. Como hemos hecho en los videos
anteriores. Diremos que nuestro número de cotización es
un número de cotización llamado rango. Y entonces podemos
decir Número de cotización. Y diremos sonda ahora
aquí como nuestro tema y en nuestro cuerpo
podríamos decir algo como aquí está cita, número de
descotización
tus peticiones, gracias por tus intereses. Por lo que creamos nuestro mensaje ahí. Ten algún error aquí. Probablemente estoy fastidiando, sí, ampersands y comillas. Normalmente cuando estoy combinando
cadenas como esta, ejecutamos esto con F5 y
vemos ahora estamos creando un
verdadero correo electrónico automatizado aquí. Y al igual que nuestra plantilla de
cotización, estamos manteniendo esto bastante crudo. El objetivo de esta clase no
es mostrarte cómo
escribir buenos correos electrónicos, sino automatizar este proceso de
correo electrónico. Ahora lo principal que
nos falta es que nos estamos perdiendo
nuestros archivos adjuntos. Entonces, cómo podemos agregar archivos adjuntos
es lo mismo. Podemos decir. Archivos adjuntos. Recuerda que esto es lo
mismo que escribir archivos adjuntos de
puntos de mensaje OL , ese anuncio. Y entonces nuestra fuente
es nuestra ruta de archivo. Entonces vamos a dejar
ese espacio en blanco por ahora. Subiremos aquí y
crearemos una nueva variable llamada apego como cadena. Tendremos camino de apego
equivale a algo por aquí. Ahora pasamos a
nuestros archivos de cotización. Digamos que estábamos en la carpeta de
cotización cinco aquí. Y si recuerdas, te
mostré el atajo. Si haces clic con el botón derecho y dices
copiar como ruta en Windows 11, entonces tenemos la
ruta completa de ese archivo. Y podemos decir que nuestra ruta de
archivo adjunto es esta, e incluye las
comillas cuando usamos esa función de
Windows. Entonces este es el camino de
nuestro archivo para la cita cinco, acabo de elegir
uno al azar en este momento. Y por supuesto que
vamos a tener que
hacer eso ajustable. Pero ahora podemos tomar
nuestro camino de apego, pasarlo como parámetro a
nuestro comando add attachments. Y vamos a golpear a F5
para probar esto. Fuera. Ahí vamos. Tenemos un archivo de cotización
adjunto a nuestro correo electrónico aquí. Ahora el tema es si
estuviéramos enviando cotización para no queremos tener cotización
cinco hardcoded por aquí. Por lo que ahora tenemos que construir
esto dinámicamente. Y entonces si hacemos eso, entonces podemos reemplazar esa
variable en estos dos lugares. Entonces sigamos adelante y hagamos eso. Bueno, lo llamamos lo
llamaremos nombre completo. Y nuestra cotización, notación de
nombre completo es cita. Y como recordarán
de antes, vamos a tomar
nuestro formato numérico. Voy a tomar
nuestro número de cotización, ponerlo en el formato de sexto
dígito aquí. Por lo que esta debe ser nuestra
cotización, nombre completo. Y vamos a tomar eso y reemplazar estos dos puntos por él. Ampersand. Esto siempre es un poco
de un teaser cerebral aquí para simplemente trabajar con estas cuerdas combinadas aquí y asegurarnos de que tenemos
nuestra secuencia correcta. Pero creo que lo
tengo justo ahí. Por supuesto, tendrá un
error si no funciona. Por lo que siempre podemos volver y
arreglarlo y vamos a ejecutar esto. Y ahora Cotización número cuatro. Y hemos adjuntado la capa
número cuatro por aquí porque nuestra ruta de archivo para
nuestro archivo adjunto ha cambiado. Aquí está nuestra cotización
es cotización para eso generamos a partir de
nuestro video anterior. Y tenemos esto como un botón de
crear correo electrónico. Y ves que esto
aparece automáticamente. Por aquí. Ya ves que no tenemos un correo electrónico
automatizado de
quién lo ha enviado, lo que puedes devolverlo a la persona escribiendo
su nombre automáticamente. La parte agradable de
aparecer esto en Outlook es que
va a aparecer en tu casilla de correo electrónico enviado y estás usando todas estas características
que están integradas en Outlook. Por lo que se puede tipo de
recoger donde esta macro lo dejó y
agregar gente a CC. Conoce tu libreta de direcciones y todo así después,
en lugar de tener que codificar
todo eso en tu macro. Pero lo que nos falta
aquí es un e-mail de contacto. Entonces digamos que ponemos
nuestro e-mail de contacto y aquí solo estoy copiando y
pegando este formato aquí. Teníamos juego en IC W.com aquí. Ahora podemos nombrar a esta
celda como e-mail de contacto. Y luego podemos venir
aquí a nuestro código de nuevo. Vamos a crear una nueva
variable aquí para correo electrónico de
contacto ya que la
primavera tirará nuestro correo electrónico de contacto como nuestra gama de ese correo electrónico
que acabamos de nombrar. Y luego
lo pondré en el orden que
generalmente enviamos o
escribimos nuestros correos electrónicos en dos
equivale a un correo electrónico. Y voy a
limpiar esto muy rápido. Y así que ahora si volvemos
aquí y pulsamos Crear correo electrónico, incluso
tenemos nuestra
dirección de correo electrónico por aquí. Eso es todo. Ese es un correo electrónico básico por ahora. Podemos añadir muchas funciones
diferentes aquí. Hay diferentes formas en
que podemos hacer de este un e-mail
muy personalizado con tablas y toda la
información que alguna vez
querrías
en un cuerpo de correo electrónico. Y podemos controlar todo
eso automáticamente también. Pero aquí solo hay una
prueba básica de concepto.
72. 3.6 Herramienta de cita - Tabla de búsqueda de clientes: Entonces en nuestro último video donde lo
dejamos fue que creamos esta función donde
tenemos un botón de correo electrónico. Al hacer clic en él, generó
automáticamente
este correo electrónico con el texto del cuerpo del asunto y el adjunto del archivo de salida de Excel
generado. Y automatizamos nuestra
dirección de correo electrónico de contacto desde nuestro correo electrónico de contacto aquí
a buena arcilla vieja en Neil. Este video va a tener
mucha automatización en él. Sólo vamos a hacer
un retoque rápido de esta herramienta donde
vamos a hacer lo mismo por los clientes que
hicimos por artículos de aquí. Por lo que en este momento estamos configurados donde necesitamos el nombre de contacto NR. Y lo tomamos de un generador de nombres aleatorios y nuestro correo electrónico de contacto,
que también inventamos. Por supuesto que vamos a
seguir inventando información. Pero lo que podríamos hacer es
similar a nuestros artículos. Podemos hacer un poco
DataTable de nuestros clientes. Información del cliente aquí
, dirá nombre de cliente. Podemos decir nombre de contacto. Y estamos haciendo la
suposición aquí por ahora que hay un contacto por cliente dirá que el
correo electrónico de contacto convertirá
esto en una mesa. Entonces Control T. De nuevo, mi mesa tiene encabezados. Podemos tomar esta información, esta nuestra
arcilla de primera línea en Neil aquí. Tenemos arcilla en
helado wholesale.com. I CW. Estoy seguro de que este es probablemente un
sitio web real o algo así. Lo siento, si esto es u. y ahora agrega aquí un par
de líneas extra. Entonces esta será la parte divertida. Y así tendremos nuestro
Nombre de Cliente ser Connie's cones, LLC y nuestro nombre de contacto, supongo que tiene que ser Connie. Dejaremos ese espacio en blanco por ahora. Volveremos a trabajar generador de nombres
aleatorios y un poquito a
otro aquí. Será helado. Y luego necesitamos
algunos nombres de contacto. Así que vamos a ir a nuestro generador de nombres de confianza por aquí
es el que usamos antes. Tomaremos un nombre por aquí. Entonces veamos. Tenemos a Clarissa Vargas y
diremos batería de Connie Mack. Connie en CCL.com. De nuevo, lo siento si estoy tomando aquí
su nombre de página web y marissa en ICR view.com. Muy bien, ahora tenemos nuestra información de
clientes. Podemos hacer lo mismo que
hicimos por nuestros artículos de aquí, que es que acabamos de
usar una fórmula vLookup. Entonces aquí en
nuestro nombre de contacto. En realidad, antes de que
hagamos eso, nos
acercaremos a nuestro cliente y olvidé dar
esta mesa y nombre. Entonces vamos a tener que hacer nuestro nombre de cliente un desplegable. Entonces diremos
clientes de mesa por aquí. Si recuerdas de antes hicimos esto una validación de datos, fuimos a la lista y luego podemos decir indirectos y en realidad
usar nuestros nombres. Así clientes de cable. Y luego por aquí
en nuestros paréntesis, estoy teniendo cuidado de no
usar nuestras teclas de flecha aquí porque en esta barra de fórmulas
específica, usar nuestras teclas de flecha
izquierda o derecha accidentalmente va a
elegir todos estos rangos. De hecho, lo haré
igual que un recordatorio de lo que
sucederá es en lugar de
mover nuestro cursor sobre, comienza a seleccionar celdas. Así que pincha aquí y
escribimos el nombre de nuestra columna, que es nombre de cliente. Yo creo. Si está mal, arrojará
un error, que no lo es. Entonces ahora tenemos nuestro menú desplegable. Y luego para nuestra información de
apoyo como nombre de contacto y correo electrónico, utilizamos una búsqueda extra. Entonces digamos búsqueda X, el valor que estamos viendo. La columna que
estamos mirando, la información en, la columna en la
que queremos devolver
información. Y luego si no se encuentra, vamos a decir que no. Hacemos esto gris
ya que es una fórmula y queremos que el usuario sepa
que se llena auto, tomará esta fórmula y solo la repetirá para el correo electrónico de
contacto por aquí. Actualizaremos el nombre del contacto
a la matriz de devolución, que es nuestro correo de contacto. Y ahora podemos seleccionar nuestros diferentes clientes y tener esta información auto poblar. Y si vengo aquí
y creo nuestro email, podemos ver que nuestro
correo electrónico automatizado va a Connie. Mientras estamos aquí,
¿por qué no
retocamos un par de
pequeñas cositas? Voy a venir aquí y
arreglar un poco estos botones. Puedo ir a Formato de Forma. Y desde que resalté
todos estos botones mientras sostengo el control, sólo un pequeño truco por aquí, tenemos estas líneas. Tienes esta función alineada
donde podemos alinear el medio. Por lo que todos están alineados y luego se
distribuyen horizontalmente, lo que va a
espaciar por igual estos botones. De acuerdo, así que eso es todo
para este video. Seguiremos
en el siguiente.
73. 3.5.2 Herramienta de cita - Verifica el adjunto: Bueno, estamos creando
nuestra función de correo electrónico aquí, donde hacemos clic en Crear correo electrónico y automáticamente pop up
este correo de outlook. Un tema que me di cuenta que
necesitamos abordar
aquí muy rápido, es que si vamos a cotizar número seis y hacemos clic en Crear correo electrónico, entonces obtenemos este error que
dice ruta no existe. Y eso es porque aún no
generamos una cotización para la Cotización
número seis. Por lo que están o
es ahora carpeta o
por supuesto es ahora archivo Excel
o una mezcla de ambos generalmente. Entonces si venimos aquí
a nuestra carpeta, cotizamos archivos, y vemos que no tenemos carpeta
para la cotización seis. Cuando se va a buscar la ruta que vamos a
adjuntar el archivo Excel. No lo puede encontrar, y ese es el error con el que
nos encontramos aquí. Esta es una solución simple. Vamos a usar lo que hemos
usado en el video anterior, que es sólo captura de errores
al inicio de
nuestra subrutina y lanzar un error si el archivo no se encuentra donde espera
encontrar el archivo adjunto. Entonces este es un tema realmente
común, que está al principio
de las subrutinas es
donde se quiere captar
todos los problemas y notificar al usuario si
falta algo y el proceso no va para
completar con éxito. Por lo que como es habitual,
subirá a lo más alto de nuestra
subrutina y
comenzará a escribir
algún código para detectar errores y hacerle saber al usuario si sucede y
detener el proceso. Para hacer eso, en realidad
necesitamos el camino del apego. Así que voy a hacer copias de seguridad aquí
y en realidad vengo
aquí abajo para revisar el camino de los
archivos adjuntos después de que lo hayamos llegado. Puede recordar que el código
aquí es si entonces DIR, que va a comprobar si existe
un archivo o carpeta. En este caso, estamos buscando un archivo que vaya
a ser el adjunto. Entonces vamos a decir camino de
apego. Y antes creo que usamos directorio
VB porque estamos comprobando si existe
la carpeta. Ahora en cambio, ya que
¿qué es un expediente? Sólo vamos
a decir VB normal, que es lo que usamos
para un archivo estándar. Y luego si está en blanco, aquí
paréntesis, entonces eso significa que el
archivo adjunto no existe. Por lo que ahora vamos a lanzar
un mensaje diciendo que archivo no se encuentra el
siguiente una ruta. Diremos alimentación de línea VB. Y luego mostraremos
la ruta del usuario solo para que puedan investigar
que querían. Así que cada vez que estoy haciendo
algo con caminos, conduzco a mostrar la ruta
al usuario y el mensaje. Para que así puedan navegar a esa carpeta específica y confirmar por sí mismos
cuál es el problema. Y luego al igual
que antes, accidentalmente pegué Enter there, así que voy a golpear Deshacer y
vuelve espacio camino de apego. Entonces el problema es
que estoy en modo break, así que por eso
sigue apareciendo esto. Entonces voy a golpear stop. Vas a nuestra siguiente
línea aquí con ese subrayado
y diremos tener otro feed de línea BB
y otro feed de línea
vb hoja dirá proceso. Entonces para asegurarnos de que en realidad
paremos el proceso y no sigamos con la generación de nuestro correo electrónico. Vamos a golpear fin aquí. Y una cosa que quiero hacer es que este mensaje de Outlook configurado
sea un nuevo mensaje. Porque hacemos nuestra
validación por aquí. No quiero crear
nuestro mensaje de Outlook aunque esté colgando en segundo plano porque
como vimos antes, realidad no
aparece hasta que ejecutemos esta línea de código de visualización aquí. No quiero crear un mensaje si vamos a encontrarnos con este tema y detener
todo abruptamente. Entonces en cambio, voy a tomar esta línea y moverla aquí abajo. Entonces básicamente vamos
a decir validación. Si fuera a
ser realmente explícito, en realidad
voy a decir datos aquí arriba. Tenemos nuestra validación aquí. Y luego crear
correo electrónico está aquí abajo. Por lo que lo rompimos en estas
diferentes secciones aquí. Entonces si tenemos un error de
validación, no
vamos a haber iniciado nuestro proceso en absoluto
y terminar con posiblemente algunos procesos o
un mensaje de Outlook que está colgando en segundo plano.
Vamos a probar esto. Golpearé Crear correo electrónico. Ves que el archivo de cotización no se encuentra en la siguiente ruta. detendrá el proceso. Ahora, si creamos la cotización, vamos a ver, tenemos
un tema aquí. Dice que no está definido. Y honestamente, me di cuenta de esta manera atrás cuando
grabamos este video. Entonces eso fue hace unos videos donde noté que pesar de que tenemos
Option Explicit aquí, no nos hizo declarar i Así que ese fue un escenario extraño
que acabo de posponer. Pero el problema aquí es que no declaramos
la variable I. Así que vamos a
llamar a eso un largo, que creo que debería
manejar ese problema. Estoy en modo break, creo. Entonces. Golpeé parada aquí. Se crea cotización. Y estamos haciendo lo
mismo aquí donde está atrapando un error. Entonces al menos no estamos
golpeando errores de VBA. El usuario, en este caso,
sabemos lo que está pasando, pero si fuera otro usuario que no estaba familiarizado
con el código, están recibiendo buenas flechas aquí que les está diciendo lo que está pasando mal y
detener el proceso. Entonces nos está diciendo
que no hay subcarpeta para la cita seis. Cíclico crear carpeta abierta. Ahora realmente hemos creado
la carpeta para las cotizaciones seis. Golpeé Crear correo electrónico. Todavía tenemos este problema donde la salida no existe. Por lo que ahora necesitamos
crear la cotización, que se genera aquí. Archivo ha sido guardado. Hacemos clic en Ok, se
guardó automáticamente. Ahora por fin hacemos clic en Crear
correo electrónico para la cotización seis, y tenemos todo listo. Por lo que el correo electrónico se
auto-generó correctamente.
74. 3.8 Herramienta de cita - Agregar precio total: Una cosita que
quería añadir con este video, que ojalá debería
ser bastante rápido, es que olvidé que quería
sumar nuestro precio total. Por lo que tenemos nuestro precio extendido para cada una de nuestras
líneas en la cotización. Pero típicamente para cotización, vamos a querer decirle
al cliente un precio final por
aquí, precio total. Y esa es la suma de
estas líneas por aquí. Entonces solo vamos a
usar una fórmula de Excel. Nuevamente, haz esto gris. Y ahora lo que tenemos que hacer es agregar esto a
una plantilla de cotización. Entonces si vengo aquí, cambiaremos esto a la
capa número siete. No puedo crear la cotización porque aún no
tengo carpeta. Así que vamos a crear nuestra carpeta con nuestro bonito botón que
automatiza ese proceso. Después hacemos clic en Crear cotización, y generamos nuestro archivo. Y en realidad cerró
con nuestra automatización aquí. Entonces abriremos la
plantilla y veremos que no tenemos nuestro precio
final en ninguna parte. Vamos a seguir adelante y agregar eso. Creo que necesitamos configurar
esto en una plantilla. Entonces en nuestra hoja de cálculo de aquí, puse el precio final en la parte superior, solo para que sea fácilmente visible. Pero típicamente para una salida, creo que un lugar más
típico para poner el precio total estar aquí en
la parte inferior de la tabla. Entonces esta es nuestra
cotización siete salida. Esta no es la
plantilla real que
usamos de videos anteriores
para empezar a cotizar. Entonces esto es un activo
lo que vamos a hacer, pero solo quiero
redactar cómo podría verse esto. Entonces básicamente, queremos
que esto diga 310 por aquí. Cuando se termine generando. Y vamos a hacer algunas cositas como probablemente te estés dando cuenta que esto no está en
el formato por aquí. Para que podamos arreglar eso. Ahora
que me estoy dando cuenta, podemos hacer
lo mismo aquí. Queremos que nuestras cotizaciones
se vean algo así, solo para limpiarlo un
poco más y añadir aquí
esta importante pieza
de información. Vamos a cerrar esto. Con lo que realmente
queremos estar trabajando es nuestra plantilla de cotización. Entonces esto es con lo que empezamos
cuando generamos una cotización. Entonces echemos un
vistazo a esto aquí. El primer problema que tuvimos aquí es que quizá
no somos el primer problema, pero el problema más fácil resolver es que no
teníamos números aquí. Y vamos a poner esto
en formato contable. Y ahora si voy por aquí y accidentalmente
agregué una fila, si vengo por aquí
y elimino nuestras filas, y luego escribo aquí
y agrego una nueva. Ves que están nombrados
tabla aquí en realidad conserva nuestro formatear estas celdas incluso cuando la
tabla se borra, cuando empezamos a agregar
filas de nuevo en, conserva la
notación de formateo que tenemos. Entonces todo lo que tenemos que hacer es hacer de
este el formato contable. Y se va a quedar
ahí cuando lo poblemos. Y de hecho, voy a clic derecho y
asegurarme de que eliminemos nuestras filas. Y luego intente esto de
nuevo. Veamos, guardaré esta plantilla
e intentaremos escanear. Y en realidad estamos
golpeando un error aquí. Se puede ver que el archivo
realmente sí guardó correctamente. Y tenemos nuestro formateo
que queremos aquí. Voy a cerrar esto. Todavía tenemos este
problema de que
golpeamos este error por aquí. En otro video, a lo mejor voy a
mostrar los detalles de eso. Pero lo que creo que en realidad está sucediendo porque
correctamente
me motivó a preguntar si quería guardar sobre el archivo y golpeé Sí, y todo
parecía que funcionaba correctamente. Lo que creo que pasó
es que esto está errando porque solo estoy almacenando todos
mis archivos en mi OneDrive, que es una carpeta Cloud Sync. Eso es todo otro tema. Pero estamos creando algunos problemas con nuestras nubes de OneDrive que se
hunden de archivos, haciendo que el sistema
piense que hay una
especie de conflictos de gestión de archivos que están ocurriendo. De todos modos,
continuaremos lo que originalmente queríamos hacer, que es seguir trabajando en nuestra plantilla. Contamos con
nuestro precio total. Ahora, lo que quiero hacer
es bajar aquí. Cuando digo precio total. Nos preocuparemos demasiado por el
formateo aquí. Crearemos un nombre para este rango para que podamos colocar allí
la información. Vamos a asegurarnos de que sea este tipo de formato contable. Despejen eso. Y entonces la parte
interesante aquí, creo, es porque estamos trabajando aquí con
nuestra tabla de nombres. Cuando insertamos filas, la forma en que escribimos este
código originalmente, va a agregar
filas esta tabla, pero debería saber no
sobrescribir esta fila por aquí. Nuevamente, estos son los beneficios
continuos de usar una tabla de nombres. En realidad no estamos escribiendo en estas celdas y
anulando estas cosas, igual que no anulamos
esta nota por aquí. Si tuviéramos, si sumamos a
diez líneas esta cotización, se va a saber que este rango está empujando
todo por debajo hacia abajo. Y de nuevo, al igual que
un escalón, en realidad
probemos
esta cosa. Vamos a hacer todavía
una nueva cotización por aquí. Seguiré haciendo otros nuevos. Y luego tampoco nos
encontraremos con ese tipo de mensaje de error de archivo de
OneDrive
que estaba apareciendo. Y podemos simplemente evitar eso, vamos a crear una nueva
cotización aquí para cotización. Y se puede ver que apareció e incluso desde
nuestra pantalla por aquí. Podemos abrirla para que
quede en la pantalla. Empujó el precio final a la baja. Mientras estamos trabajando en esto, vamos a nuestro código por
aquí para crear la cotización. Y hasta podemos comentar esta línea que está
cerrando el archivo de cotización. Porque vamos a
estar trabajando en esto. Podemos simplemente
cerrarlo manualmente cuando queramos y cuando lanzamos esto para que
un usuario pueda utilizar potencialmente, puedes hacer estas características de
automatización, pero puedes agregar
estas poca calidad de vida características que les
guarda un clic. Pero para nosotros queremos
ver todo lo que podamos así que no
cerraremos ese archivo ya que estamos trabajando
con una plantilla. Ahora lo que tenemos que
hacer es en realidad
volver a esta fórmula
que teníamos arriba. Y queremos asegurarnos
cuando estamos generando la cotización que estamos
trayendo en el precio total. Por lo que aquí, deberíamos tener alguna información de
dónde estamos trayendo nuestra información de nuestro
archivo fuente a nuestro archivo de
destino. Por lo que aquí podemos sumar el
precio total como un doble. De hecho, de nuevo, lo
haremos como una cadena para que no tengamos que
preocuparnos por los tipos es sólo una salida visual. Entonces creo que esto
va a funcionar. Lo cambiará si es necesario. Tomar precio total
es igual a esta obra. Tengo hojas que pueden
variar y precio total. Y así esto es conseguir la información de esta
celda justo por aquí. Una cosa a
retocar ya que estamos aquí, es que tenemos esto escrito tres veces como hemos pasado
en nuestra otra lección, que podemos usar una
declaración width por aquí. No necesitamos este periodo aquí. Terminaremos con declaración. Y luego para asegurarnos de que tenemos
nuestro formateo legible. Y lo aclaro, y esto es lo mismo. No tenemos que escribir esta
información una y otra vez. Sé que en realidad fue
más trabajo en este caso arreglarlo porque al principio
no lo hicimos. Pero esto solo hace que
todo sea mucho más limpio. Bueno, no tenemos información
duplicada. Podemos incluso hacer lo
mismo por aquí. Por lo que voy a cortar esto, decir con eso, reemplaza esta información sangría hacia fuera. Y eso
se limpió un poco. No tenemos que hacerlo
absolutamente en todas partes, pero solo quiero
acostumbrarme a ese hábito de hacer eso cuando tenga
sentido para nosotros. Por lo que aquí estamos tomando
nuestra información y agregamos un precio total aquí mismo. Queremos sumar eso
ahora a nuestra salida. Queríamos variar, nombramos lo mismo, precio
del carbón aquí, valor igual. Ahora, volvamos
con nuestro co-creador. Podemos hacer otra cotización aquí.
Crearemos nuestra carpeta. Se ha creado el archivo, o se ha creado una carpeta. Más bien. Yo creo mi cotización, aparece. El formateo es fijo. Tenemos nuestro campo de precio total, que ahora se rellena
automáticamente. Empujó todo hacia abajo en la salida de formato es
igual que lo que queríamos. Cerramos esto y ves
que funcionó comentando la línea que cerraría el expediente funcionó y se
quedó abierto esta vez. Y aquí está nuestro archivo en
nuestra respectiva carpeta.
75. 3.9.1 Cita - Registro de historial: comienza: Ahora que tenemos un buen generador de cotizaciones
decente por aquí que incluye las funciones de llenar
rápidamente una cotización con algunas entradas básicas. Tirado unas pecanas de mantequilla
aquí, aún no he usado eso. Añadimos nuestro artículo y
podemos crear carpetas. Podemos crear una cotización. Esto se está construyendo por aquí. Tenemos nuestra mantequilla convertido en línea, e incluso podemos
crear nuestro correo electrónico. Quiero pasar esto
al siguiente paso. Entonces la siguiente gran característica que un negocio que podría
usar una herramienta como esta puede querer es pasar de algo
que solo está generando la cotización y los
correos electrónicos para
enviar para realmente registrar
todo esto información. Entonces después de
enviar muchas cotizaciones, decir en el transcurso de
un cuarto o un año, tienes toda la información sobre las cotizaciones que
salieron para que puedas revisar la información y tipo de tener más datos
sobre tu negocio. Y luego podemos
empezar a meternos en cosas como el análisis de datos de averiguar cuántas cotizaciones
salieron a qué clientes. Eventualmente incluso tu tasa de
ganancias de la frecuencia con se
convierten en pedidos
y cosas así. Por lo que para la siguiente serie, pasaremos a construir una base de datos que
automáticamente tomará esta información la cual ya
hemos
rellenado y presentando eso a una tabla de datos que podamos mantener registros de
todo. Revisar más adelante. Voy a
trabajar lentamente nuestro camino hacia arriba. Entonces tenemos un montón de diferentes opciones de cómo podemos hacer esto. El primero que
voy a hacer a continuación es almacenar esta información justo
en la misma hoja de Excel. Y por supuesto podemos
entonces trabajar nuestro camino
hasta diferentes tipos de bases de datos. Pero no nos meteremos en eso ahora. Vamos a
construir lentamente la robustez de esta cosa a medida que avanzamos y
dar los pasos lentos para que nos involucre todo el
entrenamiento medida que construimos sobre una herramienta como esta y manejamos cada
vez más complejos con mejor y
mejor automatización. Entonces para empezar,
hagamos una nueva pestaña. Entonces por ejemplo,
solo voy a llamar a este registro de cotizaciones. Ahora volvemos aquí
y veamos la información que
queremos en nuestro log de cotizaciones. Tenemos cosas como
nuestro número de cotización o cliente o contacto. Eso parece toda la
información importante o precio total. Así que vamos a
planear esta mesa. Entonces llamaremos a esto,
nuestro registro de cotización en la parte superior tendrá algo así
como nuestro número de cotización. Tendremos nuestro nombre de cliente, tendremos nuestro nombre de contacto. De hecho, por ahora, ni siquiera
voy a
tener nuestro nombre de contacto. Sólo mantengamos estos datos
lo más mínimo posible. Podemos añadir eso más adelante. Pero a medida que nos metemos en la idea de bases de
datos y estructuras de datos, vamos
a empezar a ver la idea de no repetir datos. Entonces si tenemos abrigo número
uno aquí y tenemos nuestro nombre de cliente
como tinta al por mayor. Creo que fue si empezamos
a almacenar datos como este, en realidad
tenemos una referencia cruzada
donde nuestro cliente de tinta
al por mayor de helados solo tiene un contacto y
eso es arcilla O'Neill. Y así como almacenamos estos datos, en realidad no necesitamos almacenar el nombre del contacto
necesariamente aquí mismo. Podríamos si hay una buena
razón para ahorrar ese tiempo. Pero siempre podríamos
hacer una búsqueda del nombre de nuestro cliente en contra estos datos suponiendo
que se mantenga estancada. Por lo que tal vez queramos
cambiar esto más adelante. Pero por ahora, esta es una especie de
información redundante
porque siempre es esta relación
uno-a-uno. Si tenemos nuestro nombre de cliente, siempre
podemos
buscar nuestros contactos. Nuestro precio total aquí. Si tenemos esta información
en nuestro precio total, no
necesitamos esta
información porque es sólo una herramienta para que
agreguemos líneas aquí. Y entonces tal vez quieras almacenar qué líneas
tienes aquí. Pero en realidad no
queremos hacer una columna loca como esta. Se puede tipo de
mirar esto e intentar pensar
a través de
nuestra estructura de datos. E imagina
que va a ser difícil llegar
a cómo podemos colocar toda la información sobre
estas líneas aquí, que tiene una sola fila de
información para una sola cotización. Tenemos cotización también y algo
más de información aquí. Así que dejemos eso a un lado por ahora. Para una cotización, solo necesitamos
algo como esto. Por lo que le pegué a Control T. Para que
podamos declarar esto una mesa. Y tenemos una mesa básica aquí. Cuando te metes en sistemas de software más
comunes que a mediano tamaño usan las empresas
más grandes, como un sistema ERP, que podrías estar
familiarizado con ese término, que es la planificación de
recursos empresariales. Una idea común aquí es que
tenemos estas líneas
donde necesitamos
almacenar esta info y
tenemos esta información de encabezado, lo que estoy llamando
el encabezado info, que es que cuando
tenemos cotización diez, tenemos algunas cosas que
cabe en una fila de datos, igual que creamos aquí. Entonces también tenemos esta otra información que está relacionada con la cotización número diez, donde necesitamos más de
una fila de información. Entonces por ejemplo, por
aquí tenemos cita uno. Pero luego voy a crear
una nueva pestaña por aquí, y llamaremos a esta líneas líneas largas citas log
aquí para el encabezado. Si dices Cotización número, y digamos que estamos
en la cita uno aquí. De hecho, estamos
mirando a la Corp diez. Entonces, ¿por qué no acabo de
cambiar esto realmente rápido? Entonces es la que realmente
tenemos en nuestra
pestaña Principal en este momento. Por lo que tenemos cita diez, y luego tenemos esta
información por aquí. Sólo voy a copiar esto de un e-mail y
pegaré esto por aquí. Puedes ver tenemos
nuestro número de línea, artículo, descripción, cantidad, unidades, unidad, precio, precio
estándar. Que cada una de estas líneas corresponde
todas a la
cita número diez. Permítanme convertir esto en un formato de tabla aquí vamos a
hacer Control T otra vez, configurarlo así. Y se puede ver
tenemos dos tablas
en las dos tablas combinadas sostenemos la información que queremos para Cotización número
diez en este caso, donde tenemos una
cosa donde
solo hay una fila de información
para el número de cotización. Y hasta podemos poner
nuestro precio total aquí para referencia, por lo que 375. Pero entonces no queremos
repetir nuestras líneas aquí. Entonces estamos mezclando y
emparejando nuestra información. Se puede ver que las columnas
no se alinean para que
pongamos nuestras líneas en una tabla
que está configurada así. Pero entonces tenemos una tabla separada que tiene
nuestra información de nivel de línea, que es información que necesita múltiples filas de
datos para el registro R1, que en este caso nuestro registro siendo nuestra cotización número de diez. Esta es una estructura de datos realmente
común que verás a través de las empresas. Y la terminología
que suelo ver en que me uso es que esto se considera el
nivel de cabecera y luego esto se
considera el nivel de cotización. Y esto realmente refleja muchos de tus formatos de cotización,
que voy a abrir aquí. Ves nuestra nomenclatura es porque nuestro nivel de cabecera está
aquí arriba y luego nuestro nivel de
líneas para cotización, a menudo muy similar para
facturas y órdenes de compra. Que tienes. Una
tabla en el medio, que es la información de su línea, que puede ser una línea o mucho más de una línea en
relación a este registro, pero su encabezado es
solo una pieza de información en
relación con el registro. Por lo que ojalá eso tenga sentido. A lo mejor has tenido alguna
exposición a esta idea ya a través de tu
negocio o trabajo, y tal vez no lo has hecho, pero cuando te
encuentres, empezarás a reconocer esta misma configuración de
encabezado en líneas. Por lo que esencialmente hemos
creado dos mesas aquí porque queremos hacer un
seguimiento de nuestras líneas. Además, podría ser el caso de
que no te importen tus líneas y solo quieres
este total de la cotización. Así que eso también es posible. Pero yo quería abordar esto
y vamos a configurar
ambos a la vez porque usarán conceptos
similares. Si vinimos aquí y
realmente limpiamos esto, igual que lo hicimos
para nuestros registros de cotizaciones, sí
tenemos alguna información
redundante, que es que nuestra descripción siempre
es la misma. Si conocemos nuestro artículo. Esta es en realidad una columna
redundante que puedo eliminar aquí, porque si necesitamos conocer
la descripción de esta línea, siempre
podemos tomar nuestro
ítem y hacer una búsqueda que tenga una
relación uno-a-uno su número de artículo y
su descripción. Si volvemos a los datos, en realidad, veremos
que las unidades son las mismas. Entonces esta es sólo información más
redundante que realmente no necesitamos hacer seguimiento de asustado ahora, a menos que tengamos una
buena razón después y siempre podemos
agregar eso de nuevo. Ahora tenemos nuestro precio unitario. En realidad voy
a dejar esto. Esta es más información, no necesariamente
de la automatización, sino de cómo podrían funcionar las empresas, pero creo que vale la pena
entrar de todos modos, voy a dejar
el precio unitario, aunque usando la
lógica que teníamos antes, creo que tenemos nuestro precio unitario
justo aquí, lo que hacemos. Pero existe la posibilidad de que el precio
unitario cambie. Así que muchas veces es
poco probable que algunas de estas otras cosas cambien, pero su precio podría
actualizarse con bastante frecuencia. Y entonces queremos estar capturando el
precio real al que cotizamos. Y luego si entramos
aquí y cambiamos de nuestra mesa maestra el precio
de uno de estos artículos. No queremos que cambien nuestras líneas de cotización, que es más bien un registro
histórico. Queremos que recuerde el
precio al que se cotizó. Y luego tenemos nuestro precio
extendido por aquí, que en realidad no
necesitamos porque siempre podemos calcular eso con nuestra
cantidad en precio unitario. Entonces
lo importante aquí, creo, es que quería cubrir a la hora
de almacenar datos, especialmente datos que
potencialmente podrían convertirse en
muchos y muchos datos. El registro histórico como este podría convertirse en cientos
o miles, o para grandes negocios, incluso en millones de
filas de información. Puedes hacer cosas como esta para mantenerla más
eficiente y no almacenar información que
podrías averiguar
cuando la necesites. Porque de lo contrario,
habríamos tenido por filas extra aquí
que tal vez no necesitemos. Y si terminaste con
cientos de miles de filas
de información a
lo largo del tiempo, eso va a ser una
gran diferencia en la memoria que se necesita para
almacenar esta información. Tenemos algunas fronteras por aquí solo de mi copia y pega. Por lo que en realidad voy a resaltar esto
irá a Cell Style, hacerlo normal, que
en realidad sólo va a hacer que coincida con el
formato automático de la tabla. Podemos venir por aquí. Haremos
precio unitario en dólares, precio
total también en dólares
por la mitad el formateo. Y hemos tipo de configurar estas
dos pestañas como nuestra base de datos, esa va a ser
nuestro registro de historial son cotizaciones a medida que las enviamos. Entonces eso es sólo el
encuadre aquí de lo que
vamos a utilizar para
almacenar nuestra información. En los siguientes videos, entraremos en el código real que va a administrar
esta información.
76. 3.9.2 Herramienta de cita: información de los encabezados de tu registro: Ahora que hemos
configurado el encuadre en nuestra hoja
de Excel de cómo vamos a almacenar alguna información básica sobre las cotizaciones
que se envían. Por lo que tenemos nuestra
información de cabecera aquí, en nuestras líneas información aquí. Empecemos a pensar
en el proceso de cómo
funcionará funcionalmente esto. Entonces digamos que estamos
trabajando con 11. Creamos uno nuevo aquí. Y creo mi carpeta. Este es nuestro flujo de trabajo aquí. Por cierto,
eventualmente podemos empatar todo
esto
si quisiéramos, no
nos molestaremos en este momento,
pero podríamos lograrlo. Entonces cuando creas cotización, también comprobará si no
hay carpeta, creará la
carpeta para ti. Por lo que incluso tienes que hacer
clic en menos botones que los tres que necesitamos
hacer click aquí para crear
rápidamente una carpeta
y luego una cotización. Podríamos combinarlos. Vamos a lidiar
con eso por ahora. A continuación, crea una cotización
después de configurar todo, simplemente
dejaremos
las cosas como está por ahora. Después golpeas Crear correo electrónico
que va a aparecer el correo electrónico. El atrapado aquí es que este correo electrónico no
sale hasta que golpee Enviar. En realidad es
realmente fácil hacer que este correo electrónico envíe
automáticamente. Pero típicamente no lo he
hecho porque la mayoría de los usuarios
no se sienten cómodos con los correos electrónicos solo volando a su nombre sin que lo
lean primero. Y muchas veces
es posible que quieras
agregarle más información, editar algunas cositas, o agregar a alguien más que CC. Por lo que es agradable simplemente aparecer. Y si te gustaría
todo, haces clic en Enviar a ti mismo. En
realidad muy rápido. Simplemente muéstrale si
vienes a crear correo electrónico, donde escribimos en display aquí, realidad
podemos reemplazar
eso con send in. Este comando hará que el
correo electrónico simplemente
salga sin aparecer y mostrar primero. Así que no vamos a hacer eso. Lo vamos a
dejar como exhibición. Pero la captura aquí
es que queremos registrar esta información
en nuestro historial después de que sepamos que
salió a nuestro cliente
y nos hemos movido porque tenemos que hacer
click
en el botón Enviar y
perspectiva para que salga. No podemos detectar que el usuario haya hecho clic en el botón
enviar en Outlook. Entonces si una persona crea
el correo electrónico así, entonces se da cuenta de que
hicieron un error tipográfico o algo así o
que no les gusta
la forma en que esto está configurado. Y luego
cierran el correo electrónico. Tal vez no se hagan. Y tal vez se
alejan de su computadora para el final del
día y luego
regresan mañana para terminar de trabajar en
esta cita 11 aquí. No estamos listos para iniciar sesión
esto en nuestra historia. Lo que queremos hacer es registrar la cotización finalizada
cuando hayamos terminado. Por lo que no queremos registrar uno. No estamos seguros de que esté completa. Entonces en lugar de que el tiempo le hace
a nuestro email de crear, no
sabemos si la
persona creó un correo electrónico solo para comprobarlo y
va a cambiar algunas cosas. Entonces en cambio, al menos por ahora, sólo
vamos a hacer
un botón completamente nuevo. Ce, marca como completa. Este botón marcado como completo
es el botón que por ahora un usuario simplemente presionaría al final de su
proceso para decir, Hey, he terminado por completo aquí. Y eso es lo que va a mover esta información de aquí a nuestro log para nuestro
encabezado y nuestras líneas. Ahora estamos explicando nuestro
flujo de trabajo y cómo va a funcionar. Empecemos a escribir el
código que va a hacer esto. Vamos a crear un nuevo módulo por
aquí para esta información, vamos a hacer Insertar Módulo. Una cosa que podrías notar
aquí es que en realidad tenemos estos archivos colgando abiertos
en la memoria en este momento. A pesar de que por aquí en
Excel, no están abiertos. Eso es algo que podríamos
abordar en otro video. O tal vez lo ponga
antes en nuestra clase, pero lo dejaremos a un lado por ahora. Eso no es importante. Vamos a crear
este módulo por aquí. Y lo llamaremos base de datos. Por ahora. Tal vez lo cambiemos el nombre, pero sólo va a manejar cosas relacionadas con la
base de datos. Así que vamos a configurar esto
como historial de registro de registro. Ahora lo que podemos hacer es
mirar la información que necesitamos. Empezaremos con
nuestro encabezado, que va a ser realmente fácil aquí
va a ser realmente fácilporque solo tenemos
tres piezas de información. Usando algunos de los conceptos que ya
hemos mostrado, probablemente
puedas imaginar
cómo podemos hacer esto. Sólo tenemos que agarrar
la información de aquí y luego agregar una nueva ruta al
estado de tabla y poner esa información
en esa nueva fila. Sólo hay tres
piezas de información. Entonces esto no debería
ser tan malo en absoluto. Incluso en esta herramienta, lo que ya hemos cubierto, esto se parece mucho
al proceso Agregar elemento. Así que vamos a ir por aquí. Vamos a
configurar esto como de costumbre y dividir nuestro código en
nuestra interfaz de usuario. Y necesitamos número de barco, nombre del
cliente, una cadena, y precio total. Como. De nuevo, sólo vamos a hacer
eso una cadena por ahora porque no estamos
haciendo ninguna matemática con ella. No es gran cosa que estemos
usando números como cadenas. Ahora si íbamos a hacer
algunas matemáticas con ese número, entonces queremos ser más
específicos y probablemente llamarlo un número de cotización doble. Y lo hemos hecho un montón
de tiempo en este punto, es el número de rango. Si queremos que
sea más explícito, podemos asegurarnos de
que estamos trabajando en nuestras hojas llamadas nombre. Utilizamos una declaración de ancho aquí. Entonces si ponemos el
periodo por aquí, sabremos que estamos
diciendo explícitamente que estamos usando el rango desde nuestro valor de hoja principal. Entonces podemos decir que
el cliente necesita. Iguales rango, ese nombre del
cliente, ese valor, y nuestro precio total es igual a nuestro rango llamado costo
total, total. Ahora, si pego a F8 y
pasaremos por esto solo para asegurarnos de que no
cometí errores. Contamos con 11
nombre de cliente y precio total. Entonces sigamos construyendo esto. Voy a poner un comentario
aquí y decir añadir nueva ruta para cotizar
iniciar sesión popular. Por lo que tenemos que abordar esta
tabla por aquí como un objeto. Y luego agregaremos una nueva fila igual que lo hemos hecho en el pasado. Y como digo
eso, me estoy dando cuenta de que olvidé
darle un nombre a estos. Entonces llamemos a esta mesa, mesa en nuestro log. Y mientras estamos en ello,
vamos a nombrar nuestra
mesa de líneas por aquí. Mesa. Ahora que tenemos un buen
nombre para nuestra tabla aquí, vamos a crear un objeto
o enumerar objetos, por lo que lo llamaremos
encabezado de tabla como objeto de lista. Establecer cabecera de tabla es igual. Ahora estamos en una hoja diferente, así que vamos a
decir nuestras sábanas. ¿ Qué registro? Que es lo que llamamos
nuestra hoja aquí abajo. Diremos lista de objetos. Y se presentó cotización en nuestro log como el
nombre de nuestra mesa. Ahora vamos a preparar nuestras
listas fila objeto. Entonces lo declararemos
aquí arriba como fila de lista. Y luego estableceremos este
objeto list como una nueva fila que creamos un encabezado de tabla como nuestro objeto de lista,
esa lista crece. Por lo que crear una nueva
fila aquí y luego declararla como r l
variable fila mientras lo hacemos. Y ahora que tenemos
nuestra variable fila, lo
voy a hacer de esta
manera antes de arreglarla, lo que hemos hecho
antes también en decir, en esa fila, el primer elemento
es nuestro barco número 23. Entonces nuestro segundo elemento, y luego nuestro tercer
elemento por aquí, va a ser respectivamente nuestro nombre de cliente
y nuestro precio total. Entonces vamos a tener
nuestra nueva fila y luego 123. Y eso fue justo
como una manifestación. Si has visto
los otros videos, sabrás que
no quiero hacer esto. En realidad quiero decir encabezado de
tabla, esa lista, columna,
número de cotización, ese índice. Usa esta notación por aquí. Eso es usar nuestro nombre de columna. En lugar de codificar duro
el número de columna de aquí de esa manera. Pero mi accidentalmente
borró esto, así que haré un Control
Z. de esa manera. Si movemos nuestras columnas
o agregamos nuevas columnas, entonces no tendremos que
cambiar nuestros números aquí. Y por aquí,
tenemos nuestro precio total. Así que probemos esto. Pondremos un cuadro de mensaje
al final aquí y diremos información de encabezado agregado signo de
exclamación. Ahora vamos a atar nuestro botón a
nuestra nueva macro de aquí, que es registro de registro a la historia. Vamos a hacer clic en esto. Aquí tenemos algún error. Echemos un vistazo a eso y tiene un problema
con esta línea. Y de inmediato me estoy
dando cuenta de que me olvidé la S por aquí en objetos de lista. Entonces esto tiene que ser plural
porque hay un bache. Podría
haber potencialmente múltiples objetos de lista. Y luego
le estamos diciendo cuál queremos, que está aquí. Pulsaré Play para continuar la información del
encabezado agregada al registro. En. Aquí tenemos nuestra nueva información
agregada a esta tabla. Sólo para que las cosas
se vean un poco más limpias, voy a quitar las líneas de rejilla ya que ya
tenemos esta
mesa por aquí. Ahora podemos intentarlo de nuevo. Y lo que vamos a
notar creo, es que vamos a tratar
con esto más tarde, pero probablemente no queremos que la persona pueda hacer esto y agregar el registro más una vez y luego tener amable
de información duplicada. Por lo que probablemente agregaremos
algún tipo de error de captura de alguna manera
para manejar eso más tarde. Así que voy a romper el video
aquí, y en el siguiente, pasaremos a
agregar nuestros artículos de línea a nuestro registro de historial para líneas.
77. 3.9.3 Cita: información de las líneas de registro: Ahora que tenemos nuestra
función que puede registrar la información del encabezado para la cotización de aquí
a nuestra tabla de encabezado, pesar de dejarnos agregar registros
duplicados aquí. Hagamos nuestras líneas a continuación. Haremos esto en la
misma fórmula porque por
supuesto no
tenemos dos botones aquí que van a decir que registre sus líneas y luego
registre sus encabezados. Todo esto va
a pasar de una vez. Entonces seguiremos construyendo
esto por aquí. Y nueva fila para agregar o
iniciar sesión, solo para aclarar. Y luego vamos a romper un poco
nuestro código. Diremos añadir filas para votar la ley de
Wien y poblar. Eso es lo que
vamos a tener por aquí para configurarlo, al
igual que tenemos un objeto para nuestra
mesa de cabecera por aquí. Ahora vamos a
necesitar hacer lo mismo para nuestra mesa de líneas. Y así estamos hablando de
esta mesa de aquí. Entonces diremos
las líneas de cable como objeto de lista. Ya tenemos fila L. Estoy mirando hacia arriba
aquí como estoy escribiendo. Por lo que podemos reutilizar que
establecerá líneas habilitadas como donde en realidad es igual, es igual a hojas. Bueno, la ley de Wien, creo que eso es lo que
llamamos esta hoja de trabajo, que es que lista
objetos atrás mesa, líneas blog, creo que era
el nombre de nuestra mesa. Ahora para agregar nuestra información
aquí, esas cosas, déjame hacer esto
más grande aquí viene de esta mesa de aquí. Entonces para transferir
la información, vamos a crear un objeto para esta tabla para que podamos
recorrer cada fila de aquí. Esto se parece mucho a
cuando estábamos creando nuestra plantilla de salida de Excel. Vamos a
recorrer toda esta fila. Vamos a
recorrer todas estas filas luego mover esa
información por aquí. Es un poco menos
información en este caso porque estrechamos abajo las columnas que queremos hacer un seguimiento. Eso sólo cinco aquí, realmente para, porque
éste es realmente fácil. Volvamos aquí. Tenemos que configurar
nuestra mesa fuente. Entonces lo que lo llamamos
líneas de fuente de tabla como este objeto también, podemos establecer que como
líneas fuente iguale a hojas. Y esa es nuestra pestaña principal. Y está en nuestra lista de
objetos, líneas de mesa. Podemos venir por aquí
y revisar dos veces que tenemos
líneas de Mesa cada año. Y por supuesto
arrojaría un error si hiciera un error tipográfico o escribiera allí el nombre
equivocado. Ahora que tenemos esto, vamos a recorrer todas las filas de nuestra
información fuente aquí mismo. Entonces para yo equivale 12 tablas Líneas Fuente
que esta subió que cuentan. Vamos a
recorrer con I como nuestro índice para cada fila aquí. Ahora, al igual que lo hicimos para
nuestro archivo de salida de cotización, vamos a establecer nuestro L rho es igual. Y luego de nuestra fuente estable o
líneas fuente que Miss Rose. Y esto va a
recorrer cada fila y luego establecer nuestro objeto L rho como
esta información por aquí. Tenemos que declarar nuestra variable ya que la estamos
usando como un largo. Entonces solo para separar nuestras filas, vamos a entrar aquí
y vamos a añadir una nueva fila aquí por
cada fila de aquí. Entonces en lugar de simplemente reutilizar el
mismo objeto de lista o L rho, y eso puede estar
volviendo confuso. Digamos nuevo l rho como
otro objeto literal. Por lo que ahora podemos decir establecer nuevo
l rho iguala líneas de mesa. ¿ Y sabes qué? Sólo para dejar las cosas un poco más claras, cambiaré el nombre de
esto a líneas de destino. Entonces líneas de destino de tabla, esa lista de filas que
tenemos nuestra fuente por aquí. Este es nuestro destino. Entonces vamos a
establecer nuestra nueva fila en nuestro destino a medida que
creamos allí una nueva fila. Entonces en este caso
vamos a recorrer seis, en realidad cinco filas aquí. Entonces vamos a ejecutar
este bucle cinco veces. Cada vez que
vamos a obtener información de nuestra fuente y crear
una nueva fila por aquí. Vamos a dividir
esto donde en esta sección necesitamos
almacenar nuestra información. Entonces digamos dimensión, número de
línea como cadena, Número de
artículo como cadena. Recordemos qué
columnas teníamos por aquí porque
no eran todas ellas. Por lo que tenemos líneas, artículo, cantidad en
precio unitario y precio unitario. Y vamos a conseguir esta
información de aquí. Voy a hacer lo mismo que
lo hice antes, que es empezar con
solo leer nuestros índices antes de actualizarnos para
usar nuestros nombres de columna. Entonces podemos decir que el número de línea
es igual a nuestro rango de filas fuente, uno, en este caso ese valor. Y entonces nuestro número de artículo equivale
al rango L rho a ese valor. Nuestra cantidad realmente salta uno porque estamos saltando por encima de la
descripción, que es tres. Y vamos a la columna cuatro. Y precio unitario, que creo que también va
a saltar por encima de nuestras unidades. Entonces saltando más de cinco
y yendo al rango seis, ese valor, y luego escribiendo eso solo por
claridad al principio, realidad
podemos subir aquí
y usar el mismo concepto. Vamos a decir Líneas fuente
de la tabla. Entonces la tabla que
estamos mirando y decimos nuestras columnas de lista, vamos a escribir en nuestro nombre, que en este caso
creo que es número de línea. Índice va a sustituir
al que en este caso. Así número de línea. Y entonces puedo copiar esto. Permítanme poner esta
información aquí por ahora. Y luego la segunda
línea es ítem. El siguiente es la cantidad. Como estoy copiando estos
encabezados por aquí. Y entonces nuestra última es entonces ahora que toda esta información se
almacena en estas variables. Vamos a tirar esto de
nuevo a nuestra nueva fila. Ya que esta notación es un poco larga, sólo voy a copiarla. Entonces no estamos
hablando de nuestra ruta L. Ahora estamos hablando de
nuestro nuevo l rho que
empujamos a esta
mesa por aquí. Nuestra gama no proviene de
nuestras líneas de origen. Visita información. Este
es el error que cometimos. Estos hice en unos
videos hace donde
olvidé hacer este cambio
de nuestra referencia de mesa. El número de línea sigue siendo lo mismo para nombre de
nuestra columna y podemos cambiar eso si fuera diferente. Y ahora no estamos recibiendo
información de aquí, sino que en su lugar vamos a establecer esa información con
el número de línea. Una cosa que estoy olvidando es
información que no nos estamos moviendo de la mesa es nuestra primera columna
aquí, número de cotización. Entonces vamos a tomar
esta columna de número de capa. Vamos a establecer eso
como nuestro número de cotización, que ya usamos una vez
para información de cabecera. Por lo que esa variable ya estaba
preparada para que la usáramos. Ahora podemos tomar esto y necesitamos ir de la línea número dos, artículo que cantidad,
luego precio unitario. Por lo que ahora tengo que
actualizar estos aquí para artículo, cantidad y precio. Y luego vamos a
actualizar nuestras variables fueron usadas, estaban usando por aquí, que era número de artículo,
cantidad, y precio. Lo cual es simplemente duplicar las variables que
preparamos aquí desde nuestra fuente. Y eso va a correr
por el bucle para cada fila creando todas
estas nuevas filas por aquí. Entonces si tenemos suerte,
veamos si esto funciona. Vamos a venir por aquí. Diremos marca como completa, tienes un subíndice
fuera de alcance. Y tiene un problema
con el número de línea. Por aquí. Tenemos
nuestro destino, nuestras columnas de lista, número de línea. Esto dice Líneas número plural. Creo que debería ser
singular igualar aquí. Y para tener más sentido realmente. Entonces tenemos este código
medio roto. En realidad todavía estamos
en medio de ella, así que le pegaré a Run y
podemos seguir en nuestro camino. Y aquí está nuestras cinco filas de la portada se
trasladaron a nuestro log de líneas. Y entonces tenemos otro
duplicado por aquí. Vamos a seguir adelante y eliminar estas
filas para Cotización número 11. Y cambiaremos
nuestras casillas de mensajes, digamos información de cotización agregada
al bloqueo de historial. Así que ahora intentemos de nuevo. Marcar como información de cotización completa
agregó el registro de historial, y venimos y vemos nuestra información de cabecera
se agrega aquí. Y también nuestras cinco líneas
de información de línea, o agréguela aquí.
78. 3.A.1 Automatiza los datos a partir de muchos archivos: En el último video, terminamos de agregar una función
que registra información sobre cada cotización en una tabla de datos a
medida que completamos cada cotización. Entonces cuando hacemos clic en el Botón
Marcar Completo, movemos los datos de las líneas, por ejemplo, y
los datos del encabezado en otra pestaña hacia aquí. Por lo que
enviamos diez y como hemos marcado un completo, movemos todas las líneas
a esta tabla. Y luego 11. Y luego cuando hagamos 121314, vamos a crear
esta gigantesca base
de datos de toda la información
de esta tabla, un
seguimiento de la historia de cotizaciones que salieron en la
que las líneas están ahí. Esto nos pone un
poco de tangente aquí. Esto nos configura para
un poco de tangente. Pero también da una oportunidad para mí mostrarte
algo que es realmente una necesidad común en todo
tipo de escenarios diferentes. Y vamos a
encontrarlo aquí mismo. Que es que porque agregamos esta función con cita diez, tenemos un montón de cotizaciones que enviamos antes
y solo estas demos de uno a nueve que no
está en esta tabla de datos. Y entonces lo que realmente queremos
hacer es conseguir toda esta historia todo el camino de vuelta al
principio desde nuestra primera cita. Queremos hacer algo
como venir a citar uno, que en realidad no
tiene un expediente en él. Probablemente acabamos de hacer los archivos de
Excel y salida. Te metes en cotización para
abrirlo y
quieres hacer algo como
agarrar esta información. Sólo voy a ponerlo
aquí por ahora, colocarlo así. Y entonces vamos a
necesitar volver aquí. Ir a citar tres, abrir este archivo, agarrar
esta información, y se puede ver
que básicamente
tendrá que seguir haciendo esto. Por lo que esto fue cotización a un N3. Y luego vamos
a hacer cuatro todo el camino hasta nueve para que
rellenemos nuestra historia de estas cotizaciones que fueron antes
de agregar esta característica. Y esa es una manera de
ponerse al día nuestra base de datos. Entonces no tenemos esta brecha donde no
tenemos nuestras cotizaciones
anteriores. Y podría continuar con
este proceso porque sólo
tenemos nueve hasta el momento. Pero esto nos da una
gran oportunidad de
mostrarte cómo automatizar
algo como esto, porque en muchos casos no
tendremos nueve. Agregaríamos una función como esta, y nos daremos cuenta de que necesitamos datos de todo el historial de cotizaciones, que podrían ser cientos o
miles de cotizaciones diferentes. Y no hay manera de que
quieras abrir cada archivo de la manera que acabo de
mostrarte para que estos 2.5 hagan todo ese
corte y pegado de los datos en nuestra base de datos. Entonces esto nos da la oportunidad de
pasar por este proceso. Pero también podrías usar
este proceso de una tonelada de
otras formas en las
que básicamente necesitas abrir muchos, muchos
archivos de Excel diferentes para obtener datos, en algunos casos cientos
o miles, y ponerlo todo en uno lugar. Y queremos
automatizar ese proceso.
79. 3.A.2 Bucle a través de la lista de ID.: Muy bien.
Comenzando a crear una herramienta, voy a
separar esta herramienta que
vamos a crear para este proceso de abrir todos estos archivos de Excel y
sacar los datos de ellos. Así que sólo voy a hacerlo bien en nuestro creador aquí mismo. Podría iniciar un nuevo archivo de Excel, pero en realidad
no hay necesidad de hacer eso. Vamos a crear una nueva pestaña, y simplemente lo llamaré herramientas solo para que podamos agregar funciones
misceláneas. No es oficialmente parte de nuestro creador de cotizaciones en el
que hemos estado trabajando en las lecciones
anteriores, pero es una
característica independiente que podrías usar. Y así, por ejemplo, podría tener algún botón que diga algo así
como obtener datos. Y lo que queremos hacer en
nuestro caso específico es
que tenemos estas carpetas por aquí y queremos obtener los datos de las
líneas de, cotización, de uno a
nueve porque
sólo tenemos los datos para diez
y 11 y vamos hacia adelante. Y de nuevo, son sólo
nueve en este momento, pero podrían ser cientos
en otro escenario, por
lo que
queremos asegurarnos sepamos automatizar
algo como esto. Así que empecemos haciendo
una lista de cotizaciones. Entonces, ¿cuáles
queremos abrir? No necesitamos diez y 11. Así que vamos con nuestros nombres de
carpetas ahora mismo. Necesitamos cotización uno. Vamos a seguir con esta
notación por aquí. Y necesitamos hasta nueve. En este momento, lo vamos
a hacer de esta manera. Y ya ves, es
así de fácil hacer. Nueve Y si tuviéramos mucho más, podrías arrastrar esta lista hacia abajo, sobre todo porque están
secuencialmente nombrados así. Hay otro método que tal vez nos metamos
en una lección futura, que es cómo recorrer un montón de archivos y
carpetas si
no hay un nombre consistente y solo
hay miles
de archivos en una carpeta, cómo recorrer cada archivo o carpeta
individual en una subcarpeta específica sin tener que
conocer los nombres. Entonces esa es otra
opción que tienes, pero no nos
meteremos en eso ahora mismo. Ahora que tenemos
nuestra lista de cotizaciones, lo que vas a
imaginar que vamos a hacer es recorrer esto. Así que empecemos una
macro por aquí. Voy a venir aquí, en nuestro co-creador. Sólo mantengamos
ambos abiertos como de costumbre. Por aquí, voy a
crear un nuevo módulo. Llamaremos a esta herramientas solo para que coincida con nuestro nombre de
tap por aquí. Podemos llamarlo sub. Consigue estas tres líneas. Entonces lo que tenemos que hacer
es pasar por cada uno de estos y vamos
a necesitar ir a cada subcarpeta. Por lo que vamos a
necesitar conocer la ruta de cada archivo de Excel por aquí. De hecho, sólo para
mantener esto simple, olvidemos citar uno,
solo para mantenerlo más simple. Por lo que voy a
hacer clic derecho y eliminar esto porque no hay ningún archivo de
Excel ahí. Hagamos sólo de dos a nueve y mantengamos las cosas simples
posible
para empezar al menos. Entonces sabemos que nuestro archivo de Excel
está en este camino por aquí. Entonces aquí está la carpeta en la
que el Excel archiva. Si hago clic derecho por aquí, realidad
puedo hacer esta copia
como ruta en por ejemplo, se va a hacer un
comentario aquí mismo. Este es un ejemplo de ruta completa de ese archivo Excel y sabemos lo que cambia
es esta cadena. Entonces tenemos una carpeta
que cambia y nuestro nombre de
archivo que cambia entre cotizaciones y solo
va a ir dos, tres, cuatro o cinco,
seis y así sucesivamente. Así que vamos a tener esto
en cuenta por aquí. Voy a mover esto y empecemos a escribir algo. Sabemos que vamos a necesitar un bucle para pasar por
cada uno de estos. Entonces en este caso, vamos a tener que ejecutarlo nueve veces. Uno, dos, tres, cuatro, cinco. Entonces como hemos hecho antes, podemos hacer de esta una tabla de la
tabla cuatro, números de cotización. Digamos que vamos a crear nuestra tabla tanto números
como este objeto. Vamos a establecer
esta lista de tabla objeto nuestras
variables de objeto aquí como hojas herramientas que listan
objeto como plural, va a tirar número, ¿verdad? Así que ahora solo tenemos
esta cosa realmente básica y a veces me
gusta simplemente romper aquí y parar y ejecutar incluso los muy pequeños
fragmentos de código que he escrito para que
pueda asegurarme de que funcione. Y así ahora tenemos reconocimiento
de esta mesa aquí. Hemos creado este objeto list
que es esta tabla aquí, y luego podemos crear
un objeto list row. Entonces lo hemos hecho en
nuestras lecciones pasadas como fila de
lista y vamos a
recorrer cada una de
estas para que podamos decir algo como para cada lista, tirar en número de tabla,
números, lista de acciones, filas, fila, y luego
si digo toda la fila, ese rango, eso es
seleccionar por ejemplo, vamos a ver, puedo borrar
esto y si nos detenemos aquí y luego pego
run y teníamos ocho, ves estamos seleccionando cada
fila ya que bajamos aquí. Por lo que ya tenemos un bucle
que viene por aquí ahora. Ahora tenemos este
bucle que va a ejecutar un bucle
por cada fila aquí y
vamos a construir una ruta que necesitamos para
abrir el archivo Excel, porque lo que
queremos hacer es tomar esta ruta y abrir
un archivo Excel. ¿ Verdad? Podemos incluso hacerlo fuera del bucle al principio
solo para mostrarte. Así que voy a
decir dim ruta de archivo, un conjunto de cadenas de ruta de archivo igual a vamos a hacer este archivo
exacto aquí arriba. Accidentalmente hago clic en
el botón de ayuda. Creo que voy a hacer clic bien. Accidentalmente presioné
f uno es lo que pasó, que me envía a la
página de ayuda en el navegador. Entonces aquí está nuestra ruta de archivo para
la cita dos archivo Excel y vamos a
hacer algo así como dim cuaderno como libro de trabajo
porque este es un archivo de Excel. Podemos utilizar este
objeto de libro de trabajo y podemos decir, Establecer el libro
es igual al libro de trabajo, iniciar abierto y ruta de archivo. Por lo que esto va a abrir el cuaderno de Excel
por la ruta del archivo, que en este caso
va a ser por cotización dos para acceder
a ella f ocho
y ver si esto funciona. que veas para obtener los datos, necesitamos abrir el archivo. Entonces aquí abrimos el expediente y
luego lo cerré por aquí. En realidad podemos tomar esto. Vamos a abrir
la ruta del archivo, pero luego necesitamos construir
nuestra ruta de archivo aquí. Entonces si tomo este corte
que en realidad y lo
coloco aquí para que puedas ver aquí ya
no necesitamos esto, pero vamos a
recorrer cada fila y es nuestra ruta L aquí. Pero lo que necesitamos
al recorrer cada fila es en lugar
de decir, citar, a. En estas dos localizaciones. Necesitamos que sea el
valor de las celdas. Por lo que va de 2 a 3
a 4 a 5 y así sucesivamente. Por lo que ahora podemos agregar una variable que va
a ser lo que cambia. Entonces voy a decir,
cita, número como cadena. Y por ejemplo, si
dijimos el número de cotización, que es difícil agregar
algo aquí por ahora, vamos a decir cita, uno, dos, tres, cuatro, cinco. Y creo que es un número de cotización de seis
dígitos. Ahora, puedo usar esta variable para poder reemplazar esta cotización
número dos aquí. Y vamos a
combinar esta cuerda juntos y luego lo
mismo por aquí. En lugar de esto, vamos a combinar la cuerda
juntos aquí. Ahora, si decimos debug
print file path. Por lo que sólo vamos
a revisar la
ruta del archivo antes de abrirlo. Le pegaré a jugar. Por lo que tenemos algún tipo de
tema aquí y error de seguridad. Debería haber eliminado
esto porque lo
moví hacia abajo y no
hay ruta de archivo aquí
mismo desde que moví la
declaración de ruta de archivo aquí abajo. Por lo que ahora la ruta del archivo está en blanco y está tratando de abrir un libro en blanco. Ahora estamos saltando por delante f ocho y se ve como
golpeamos ruta de archivo, tenemos exactamente lo mismo. Esta es nuestra
ruta de archivo para la cita dos, pero está usando una
variable ahora en su lugar. Entonces si cambio los tres,
cito el número por aquí ahora número de
cotización es tres y luego esta ruta de archivo se construye
usando esta variable. Y ahora cuando vuelva a golpear
la impresión, déjame aclarar esto en realidad, voy a mover esto de nuevo hacia arriba
y mostrar la impresión de la debug. Y ves que la ruta del archivo
es de cuatro cotizaciones, tres ahora. Entonces estás empezando a
ver cómo podemos construir esto y cambiar esto
con cada bucle. Entonces lo que realmente
queremos que esto sea por aquí no es un número
codificado, pero queremos que sea nuestra fila, que es lo que se cicló a través cada bucle, iteración, nuestro rango. Y como
sólo hay una columna, sólo
vamos
a escribir una aquí. Entonces eso es decir
la primera columna de esta fila y
sólo hay una columna. Entonces es agradable y fácil y
es el valor de eso. Así que ahora voy a parar. Volveré a golpear play y simplemente saltaremos a este bucle para
que podamos atravesarlo. Verás un número de cotización. Vamos a estar en
la primera fila aquí, pesar de que
no la seleccione. Eso es porque la macro aquí, el Vico no se molesta en
seleccionar la celda. Puede trabajar con él sin
seleccionar la celda. Va a decir, cita,
número dos por aquí, construye una ruta de archivo. De hecho, voy a
comentar
abriendo este cuaderno de trabajo por ahora. Ahora, se ve en el siguiente bucle, cita tres en el siguiente bucle, es la cita cuatro y así sucesivamente. Y comenté
abriendo el cuaderno de trabajo, pero ahora que lo voy
a volver a encender, va a hacer
cita dos y luego abrir el libro de trabajo
y luego tres, abrir el cuaderno de trabajo de nuevo. Y así esto va a
recorrer todas estas filas. Y cada vez que va a
ejecutar esta línea de código que toma el camino construido
y abre el libro de trabajo. Así que sigamos adelante
y probemos eso. Nos volveremos locos
e incluso nos quitaremos este descanso y solo golpearemos el juego y vamos por ello. Ahí hay uno. Y ves que todos
estos cuadernos se están abriendo y ahora tenemos un montón de cuadernos que están abiertos de cotización a
parece que está fuera de servicio. Cotizan dos, tres, cuatro o cinco todo el camino
a través en nueve. Y así es como
vamos a usar este bucle y
recorrer todos estos cuadernos y
ver lo rápido que fue abrir nueve cuadernos. Aquí es donde la automatización realmente
podría comenzar
a llevarse a cabo. Y si tienes
cientos de archivos o incluso miles,
aunque con miles, tal vez
quieras alejarte de tu computadora y tomar una taza de café o algo así. Tomará al menos
unos minutos o más, dependiendo de
cuántos archivos tengas. Pero estamos creando un bucle que va a abrir
todos estos archivos. Por lo que este es un buen
punto de parada en la siguiente lección, vamos a seguir adelante
con lo que podemos hacer al abrir todos estos archivos y tener este
proceso de automatización donde
solo necesitamos escribir el
código dentro de este bucle, y luego este bucle va
a recorrer ese código. Por mucho tiempo esta lista es, en nuestro caso, son números
iguales aquí.
80. 3.A.3 Archivos abiertos para obtener datos: Ahora que en el último video, creamos este bucle donde
vamos a recorrer todos estos números de cotización y
abrir cada archivo de Excel. No queremos quedarnos
con todos estos archivos de Excel abiertos que ya he cerrado
manualmente, pero no queremos tener que
lidiar con el cierre manualmente hecho. Por lo que ahora al abrir el cuaderno de trabajo, podemos cerrar el cuaderno de trabajo
después de que terminemos con él. Y puesto que tenemos este
libro de trabajo objeto WB, solo
puedo decir WB DOC fluye
y eso cerrará la obra. Y luego por supuesto que no queremos simplemente abrirla y cerrarla. Simplemente no hemos llegado
al código real aquí, que es obtener información
y colocarla en una Así que esto es sólo un
comentario aquí mismo, pero básicamente vamos
a poner código aquí que sí, que es obtener el información
fuera de cada expediente. Y luego cuando terminemos de sacar la información del archivo, cerraremos el archivo
antes de llegar a eso, solo se
puede ver cómo funciona esto. Que esto va a abrir los cuadernos de trabajo y
encerrarlo de inmediato. Recorre esta lista de
ocho cuadernos de trabajo por aquí. Así que vamos a golpear Play. puede ver que se abre,
cierra una y otra vez. Y simplemente no
tenemos ningún código para hacer algo mientras está abierto. Y eso es lo que
vamos a escribir a continuación. Y ahora ya no tenemos
todos estos archivos de Excel colgando abiertos. Empecemos con cotización
para abrirla aquí. Y abramos ambos
aquí arriba. Y queremos sacar información
de nuestro log de líneas de cotización. Entonces lo que queremos hacer es conseguir nuestra historia de la cita del
dos al nueve. Queremos conseguir estos datos que obtuvimos de Canadá 11 y todas
las cotizaciones en adelante. Pero vamos a
poblar nuestra historia. Y solo queremos estas columnas para esta tabla de datos porque
eso es todo lo que necesitábamos. Parece que tenemos más
columnas en nuestras cotizaciones reales, pero hemos decidido en
esos videos anteriores, no
necesitamos todos esos datos. Necesitamos estos cinco por aquí. Entonces lo que voy a
hacer es copiar esto. Voy a pegar
esto por aquí. Vamos a convertir esto en
una mesa real. Así que voy a resaltar
esta e incluso una fila en blanco y golpear Control T
para formatearlo como una tabla dirá que mi
mesa tiene encabezados porque es simplemente
conveniente seguir trabajando con esto
como objeto de lista. Voy a decir mesa y hacer esta una tabla de nombres llamada mesa. Sostenga líneas theta, ¿verdad? Entonces estos no son grandes nombres. Sólo estoy viniendo
con algo. Nuevamente, este es solo
un solo caso de uso para nosotros toda la historia. Y entonces este no es el
tipo de cosas con
las que la gente va a estar
interactuando todos los días. Tengo la tabla sacó datos
de líneas aquí. Y ahí es donde básicamente
vamos a tomar todo esto. Y estamos en este
caso para la cotización dos, vamos a escribir a
parece que tenemos cuatro líneas aquí y líneas ítems. Básicamente
vamos a hacer esto, pero dentro de nuestro bucle para que se circule automáticamente
a través cada archivo y haga los ocho
de ellos automáticamente. Voy a limpiar estas filas porque en realidad no las
queremos aquí. Vamos a hacer esto
automáticamente, pero solo lo estaba haciendo como una demo de cómo hacerlo manualmente. Y necesitamos sacar
esta información. Entonces lo que creo que
vamos a hacer, la forma más fácil de hacerlo, ya que tenemos nuestras tablas de nombres, es recorrer
cada fila aquí. Y a medida que paso por cada
fila en este archivo de Excel, voy a agregar una
nueva fila por aquí, mover estos datos a ella, y luego bajar
a mi segunda fila y luego agregar una segunda fila. Entonces lo vamos a hacer fila por fila es mirar este archivo y mover cada fila
de derecha a izquierda. Hay otras formas de hacerlo, especialmente si no
tienes tablas de nombres, la forma en que estamos usando tablas con
nombre aquí. Por lo que muchas veces
los datos podrían no tener estas tablas con nombre
y usar objetos de lista. Así que tal vez volvamos a eso al final de esta lección. Pero la forma en que configuré esto usando tablas con nombre y lista de objetos va a hacernos
mucho más fácil. Y así es como lo
vamos a hacer aquí, porque es lo
más sencillo usando lo que ya hemos configurado. Ahora volvamos a
nuestro código VBA por aquí. Y es aquí donde queremos
que nuestro CO2 mueva esos datos. Entonces lo que tenemos por aquí es una tabla por
aquí a la derecha, y queremos conseguir
estos datos y
moverlos aquí al
archivo de la izquierda. Por lo que obtienen
esos datos. Echemos un vistazo a los datos que necesitamos
mover para cada fila. Y sólo vamos a crear algún
lugar con variables, como lo hemos hecho en el pasado. No siempre se necesitan estos, pero lo deja más claro, sobre todo porque aquí
estamos aprendiendo. Por lo que puedes decir nuestro
número de cotización, que ya tenemos. Si bien decimos Número de cotización, solo, porque esto en realidad no
debería decir nuestro número
completo de cotización sólo va a decir 2345 porque esa es
nuestra notación por aquí. Por lo que en realidad necesitamos quitarnos
el número de aquí. Así que descúbrelo. Y lo llamaremos mucho
porque va a ser un número real y no tener la palabra cita ni ninguno de los
caracteres de cadena ahí, entonces vamos a
necesitar un número de línea. Podemos seguir adelante y llamar a eso
como un elemento de cadena como String. Quiero ayer. Así que al igual que hicimos
en las lecciones pasadas, se podría convertir estos en dobles o tipos de
variables más específicos. Pero para nuestro caso, creo que es bastante fácil
hacerle una cuerda por ahora hasta que encontremos una
buena razón para no. Y eso sólo
lo hace agradable y sencillo. Por lo que ahora que tenemos
nuestro archivo Excel abierto por aquí
del otro lado, necesitamos
recorrer esta tabla. Y así la
forma más fácil de recorrer esta tabla es
crear un objeto de lista, variable de
objeto por aquí y nuestro código VBA para asociarse
con esta tabla de aquí. De esa manera podemos
recorrer las filas. Hagamos otra mesa. Vamos a llamarlo mesa. Voy a
llamarlo fuente porque esta es la fuente de nuestra
información por aquí. Entonces ese es el objeto list. Necesitamos que sea
esta mesa aquí. Por lo que necesita ser
la tabla que está dentro de nuestro archivo de Excel abierto. Podemos declararlo
aquí arriba porque
ni siquiera tenemos un archivo de
Excel abierto todavía. Al menos no es un archivo excel de
código abierto, que es de donde estamos
obteniendo nuestros datos. Abrimos ese archivo fuente aquí
abajo con nuestro objeto
de libro de trabajo. Entonces si queremos conseguir
esta mesa por aquí, necesitamos este cuaderno de trabajo
que abrimos aquí abajo. Y el nombre de nuestra
mesa son líneas de mesa. Entonces si dices fuente
es igual al libro de trabajo, lo que significa específicamente este archivo excel
derecho que
abrimos para decir esta cotización de
hojas por aquí. Por lo que podemos decir hojas cotización por nombre porque todos
van a tener la misma etiqueta. También se podría decir hojas, una sin las comillas, y eso significa la primera
hoja del archivo Excel. Cualquiera de ellos funcionaría. En este caso, tendrías que
adaptarlo a tu situación. Y luego ahora tenemos un montón
de objetos de lista de nuevo, que es nuestra tabla de nombres, que es líneas de tabla. Y eso viene de esta tabla de nombres por
aquí para nuestras líneas. Ahora que tenemos nuestra mesa, queremos recorrer estos. También. Nos movemos
a través de estas filas. Tenemos que decir por cada fila
en las tablas fuente esa lista. Entonces esto va a
recorrer cada fila de nuestra tabla fuente por aquí. Pero una cosa con la
que tenemos un problema es L rho ya se
usa en este bucle. Entonces usamos L rho para
recorrer cada fila aquí. Y luego mientras estamos haciendo eso, necesitamos recordar
otro objeto de fila y no podemos usar
la misma fila dos veces. Entonces, ¿por qué no agregamos otra
variable una vez más, llamaremos fila L. Fuente tiene un aquí porque ya estamos usando
el objeto L rho aquí. Diremos por
cada o fuente real, vamos a llamar a esto cada
fila de nuestra tabla fuente. Vamos a mover esto de vuelta aquí. Lo dividirá así. Ahora lo que necesitamos es que nuestro número de línea sea igual y estoy solo un par de
espacios en blanco aquí por ahora. Necesitamos un artículo equivale a cantidad
igual al precio unitario. Y tenemos que extraer
esto de cada fila de información en
esta tabla de aquí. Entonces nuestro número de línea
va a ser nuestro L rho, y específicamente nuestra fuente porque ese es el bucle
a través de esta tabla de aquí. No debe confundirse
con nuestra otra Elvira que usamos para
nuestros números de cotización, ese rango, y luego
nuestro número de línea es uno. Y voy a hacer esto de la manera perezosa
en realidad, en las lecciones pasadas,
verás cada vez que hago esto, vuelvo y agrego
nuestro código aquí para averiguar la columna
indexada por el nombre de la columna. Entonces queremos descifrar artículo, pero en cambio solo
digo la segunda columna. Y nuestra cantidad es
la columna cuatro en este caso, ya que este no es el tipo de cosa que se
utilizará todo el tiempo. Sólo voy a ser perezoso y
dejar estos números aquí. Ya ves en los videos pasados
cómo podemos cambiar esto para que vaya por
nombre de columna en lugar de números, lo cual sería
más consistente si agregas y mueves
columnas alrededor. Pero sólo vamos
a ser perezosos y hacer esta columna para la columna
cinco de aquí. En realidad, queremos que
venga así. Y entonces ahora que tengo
esta fila de información, básicamente tengo esta fila. Necesito trasladarlo de nuevo
a este expediente de aquí. Por lo que ahora tenemos que conseguir nuestra mesa por aquí para que
podamos agregarle una fila. Y tampoco tenemos un
objeto de lista para esto. Volvamos aquí arriba. Hagamos un destino de tabla porque tienes tu fuente de
donde vienen los datos, y luego tu destino
donde los datos van a decir que enumeran. Pero también necesita
estar fuera del bucle porque esto va a
recorrer cada archivo de Excel. Incluso podemos decir que Excel archivo por aquí y luego este otro bucle o
algo más. Esto es para cada fila de datos de
líneas en archivo Excel. Y así solo hay
una mesa de destino. Entonces no necesitamos declararlo una y
otra vez
en estos bucles. Sólo tenemos
que hacer de una vez, por eso estoy todo
el camino aquí arriba en nuestro, fuera de nuestros bucles. Y entonces vamos a tener el mismo problema donde queremos una ruta de lista específica
si podemos ayudarla. Entonces hagamos una fila l
sólo para esta mesa, porque seguimos trabajando
con estas filas. Esencialmente tenemos
tres mesas con las que estamos trabajando ahora,
cada una con filas. Entonces vamos a
llamarlo
destino de ruta L a esta fila. Esta es sólo una variable objeto que vamos a utilizar para administrar las filas en esta tabla
subrayado destino. Ahora vamos a establecer esta
tabla es igual a hojas, herramientas, objetos de lista, y lo que llamemos esta tabla de
nombres por aquí. Incluso voy a venir por aquí
y sólo voy a copiar y pegar tabla tirado líneas theta. Por lo que ahora tenemos
este objeto de
mesa, destino de mesa, que
representa este de aquí. Hemos obtenido nuestra información
de nuestra fuente. Mesa son mesa verde sobre la derecha, una relevante cayó. Ahora estamos listos para
agregarlo a nuestro destino. Por lo que podemos decir establecer L rho, destino es igual y luego destino de la tabla
no lista filas, dot add. Entonces básicamente vamos a agregar una nueva fila a esta
tabla por aquí. Y luego
vamos a llamar a esa nueva fila que acaba de sumar. L escribió destino. Ahora podemos decir L
rho destino, ese rango, la columna
uno es igual a algo. Simplemente dejaremos eso
como un placeholder. Tenemos cinco
columnas, 1234512345. Entonces 23, 45, y nuestro número de línea
va en nuestra segunda columna. El artículo va en nuestra tercera cantidad y cuarto precio unitario en quinto. Y entonces aún no hemos
descubierto nuestro número de
cotización en realidad. Entonces volveremos a eso. Así que ahora vamos
a recorrer cada fila de nuestra fuente, y luego vamos a
crear una nueva fila por aquí a la izquierda y
nuestro destino, luego mover los datos
a la nueva fila. Y luego seguiremos haciendo
ese proceso hasta que nos
quedemos sin filas por
aquí en esta mesa. Lo siento, tenemos, vamos de
ida y vuelta aquí. Y luego cuando terminemos de
bucle por cada fila, luego cerramos nuestro libro de trabajo, y luego lo hacemos todo de nuevo. Veamos si puedo hacer
esto más pequeño y tal vez
podamos ver más de un
archivo pop up a la vez. Y sigamos adelante y
tratemos de ejecutar esta cosa. Y veamos cómo
funciona. De hecho, voy a golpear a F8 para que podamos
continuar todo esto arriba. Me dio un error. Eso es porque
digo siguiente L rho aquí, pero nuestro bucle está
usando fuente de fila L. Por lo que en realidad tenemos que decir
siguiente fuente de la fila L por aquí. Voy a cerrar este expediente. Entonces estamos empezando
desde el principio. Y ahora le pegaré a F8. Y vamos a ver si
tenemos las cosas bien. Normalmente no soy tan afortunado
de no habernos hecho pequeño error o al menos el error tipográfico alguna parte. Bueno,
veamos cómo va. Y cuando llegamos aquí, esta es una peculiaridad de VBA al pasar por el código, veces cuando se
trabaja a través de un bucle, se golpea una línea de código. Creo que podría
ser éste donde abras el libro de trabajo donde dejó de atravesar
las líneas uno por uno con F8, golpea una línea de
código y algunas líneas de código simplemente
conseguirían todo moviéndose de nuevo y corriendo todo el camino a través sin
pausar línea por línea. Y así es lo que
acaba de pasar aquí. Algo inesperadamente, en realidad
ves todos
estos datos arrastrados. Estos datos, parece
una locura porque sacó el formato del encabezado porque
no había datos aquí. Entonces si acabo de venir
aquí y resaltar todos estos datos y hacer las celdas normales, va a utilizar el formato
predeterminado de la tabla de nuevo antes de que fuera heredando el formateo de la fila anterior, que
era el encabezado. Y en realidad
tenemos todos estos datos, y en realidad no
sé si es correcto, pero se ve bien.
Tiene todos estos datos. No sé si esto es en realidad de las nueve citas o no. Pero voy a usar esto
como punto de parada. Y para nuestra próxima lección, nos sumergiremos en pulir todo
esto y necesitamos limpiar
nuestros números de cotización de aquí en solo el valor numérico para que podamos poblar
este número de cotización. Y luego podemos volver a verificar
si estos datos son
correctos o no y ver qué líneas
corresponden a qué cotización. Una vez que obtenemos esta
columna poblada.
81. 3.A.4 Convertir el formato de la etiqueta y prueba: Así que dejando donde
estábamos en nuestro último video, habíamos hecho nuestra primera prueba
de ejecución de nuestra función por aquí. Y sacó todos estos datos, pero no tenemos
números de cotización, por lo que no tenemos forma de
saber si tenemos o no todos los datos de estos ocho
archivos correctamente o no. Tenemos que tomar
nuestro número de cotización, que estamos obteniendo
de aquí y analizar solo el número en sí porque así es como queremos
que nuestros datos
lleguen en esta fila. El partido como teníamos nuestra tabla de datos por
aquí para nuestra historia. Hagamos eso. Ya había configurado este número de cotización variable
solo para ser nuestro número de cotización con solo el valor
del número en lugar de este nombre completo, la
palabra cita en él. Así que vamos a seguir adelante
y configurar esto. Vamos a tener que hacerlo
en nuestro bucle porque
vamos a estar haciendo bucle
por cada fila aquí. Entonces aquí es donde
tenemos nuestro número de cotización con la palabra cita minuto. Una cosa que puedo hacer es
decir Cotización número solamente. Esto es largo Así que
es sólo el número. En realidad cambiemos eso. Cambiemos eso a una cadena. Hay algunas formas en
que podemos hacer esto, pero voy a hacer esto para que
podamos ver todos los pasos. Y como es una cadena, vamos a manipular
nuestro número de cotización aquí,
el de aquí, el de aquí, y poco a poco a través de
un par de pasos, reducirlo a
solo el número. Y como es una cadena,
podremos hacer eso y no obtener todos estos errores
al no ser un número. Entonces al hacer eso, podemos
tomar
aquí nuestro número de cotización y podemos hacer un BBA. Reemplazar. La
función Reemplazar, toma esta cadena, vamos a reemplazar
la palabra cita, y vamos a reemplazar
eso por nada. Entonces lo que esto hace es básicamente toma una cadena como esta, la
mostraré aquí arriba. Se va a buscar en cualquier parte. Tenemos la palabra cita y va a sustituir
eso por algo. Pero en este caso, ya
que tenemos aquí una
comilla vacía, entonces va a
reemplazarla por nada. Entonces aquí abajo,
vamos a terminar con solo la cadena numérica
en el lado derecho. Y va a tener
todos los ceros a la cabeza. Así que probemos esto. Voy a golpear a F5 para correr. Ya saltamos aquí. Golpeé a F8. Y si pongo el cursor por aquí, se
puede ver que se despoja la palabra cita y nos quedamos con número sólo tiene
todos sus ceros a la cabeza. Entonces aún no es exactamente
lo que queremos. Pero ahora solo vamos a usar la misma cadena exacta por aquí. Y voy a tomar
lo que es actualmente, que es el número dos con
todos estos ceros líderes. A ver si puedo hacer que se presente. Puedo hacer que se muestre ahora mismo. No está flotando por
alguna situación aquí. Pero básicamente me voy a tomar a sí mismo que tiene
los ceros a la cabeza, y voy a
convertirlo a un largo. Entonces se puede ver esta expresión
por aquí en realidad, donde si escribo C LNG, C es cuatro convertir, creo que tal vez no
significa convertir, pero es una
notación común en VBA. Y va a
convertir lo que esté paréntesis a largo. Esto lo va a
llevar ceros y convertirlo al número real. Entonces si vengo por aquí,
vuelvo a correr esto. Ves que estos son los dos
con los ceros a la cabeza. Pero una vez que hago
esto, son sólo los dos
en sí porque se convirtió a un número que
elimina todos los ceros. Hay algo
convergente común. Si convierte
algo en una cadena, es CFTR para cadena C o
C I y T para C entero. O ver EBL cuatro
convertir a doble. Entonces esta notación, es común para las conversiones
de tipo variable. Ahora tenemos el número sólo cuando estamos
aquí abajo por cada fila. Aquí es donde estamos haciendo un
looping a través cada fila de información a
medida que se agrega. Pero no tenemos que cambiar
el número de cotización porque cuando estamos descotizando a todas estas
líneas van a ser dos. Se va a decir de
dos a 22 aquí. Ves que esto es de la cita tres probablemente porque
nuestros números de línea empiezan de nuevo por
aquí donde lo dejamos en blanco. Podemos decir número solamente. Y eso va a
encontrar el número de cotización que estamos obteniendo
de aquí arriba. Así que vamos a parar esto.
Apagemos esto. Y luego voy a
eliminar todas estas líneas porque equilibrar desde
nuestra primera prueba. Entonces vamos a correr esto de nuevo
y ver cómo va. Se abre a cotizar,
para citar tres. Ves que hay una especie de
parches por aquí a la izquierda. Eso es porque se está
ejecutando tan rápido que la pantalla no se
actualiza lo suficientemente rápido. Entonces lo ves todo mágicamente
aparece al final. Eso es solo la pantalla
ponerse al día con lo rápido que todo se está
ejecutando en segundo plano. Ves dos aquí, tres aquí, muchas de estas cosas igual porque si
reproduces esos videos, yo estaba dejando ahí la misma
información. Entonces probemos esto
para ver si una encuesta para escribir datos, teníamos un formulario de cotización. Comprobemos la cotización dos por aquí. Y nuestras líneas por aquí son
la cuchara nella vainilla, 51015105101500 piezas. Contamos con nuestro
precio unitario de 1010101. Y ves que funciona. Y luego vamos a tirar de uno
al azar para ver, vamos a revisar la cita ocho. Por lo que no vamos
a chequear estos y grabar ese video. Pero si revisamos otro
al azar en medio, entonces ese será un
buen cuento aquí. Muchas veces lo que voy a hacer
cuando tenga muchos datos para comprobar si estamos tirando de
cientos de archivos, por
ejemplo, no vamos a volver a revisarlos todos los que
pierden todo el punto. Pero haré algo
como revisar el primero, el último archivo, y luego cualquier archivo
aleatorio en el medio. Y esa es una buena
manera de comprobar con tres puntos de datos para asegurarse que las cosas funcionaban
al principio, medio y final. Ahora estamos sin cotización ocho. Por lo que estamos tomando esta
información por aquí. Y tenemos cuchara y
fresa tiene 34. Aquí tenemos cuchara y
fresa, 5101055 galones, diez galones, 100 piezas y cinco. Por lo que nos sentimos bastante
bien que conseguimos la información correcta
aquí y aquí hemos sacado
con éxito nuestro historial de nuestros archivos pasados
automáticamente. Y ahora si queremos hacer algo como
en realidad
volveré aquí que se
inserte en nuestra historia. Voy a desplazarse
hasta aquí abajo que estaba usando Control de Mayús y la flecha hacia abajo para traerme de aquí
todo el camino hacia abajo. Puedo ver aquí abajo que
tenemos 32 celdas aquí. Y lo que en realidad podría
hacer es que sólo voy a insertar un montón de filas
aquí más de lo que necesito. Agarra esta información aquí. Voy a hacer una copia de Control
C, control V pegar. Aquí está toda mi información y luego
tengo estas líneas en blanco que
acabo de agregar mucho más de
lo que necesitaba y eliminarlas. Y ahora tengo mi historia rodada en
nuestra tabla completa de datos. Y luego desde que
agregamos esta función, ya que trabajamos en nuevas cotizaciones, digamos 1213, la información
va a seguir agregando aquí. Sacamos esta información. Se puede ver que
realmente sacamos en nuestras unidades por aquí
en la cantidad que es un formato inconsistente. Para que podamos cambiar esto. A lo mejor voy a dar
una lección sobre eso, pero creo que eso es
bastante sencillo. Esta es sólo la cantidad de
detalle que necesitamos tratar. Pero la idea principal
aquí es que veamos cómo podríamos escribir automáticamente algún código que
va a abrir muchos archivos de Excel y sacar datos
para traerlo por completo. Esto funcionará para, en nuestro caso, ocho archivos
diferentes con un clic de un botón. Y funcionaría
para un 100 archivos en un 1000 archivos en más. En ciertos casos, esto puede ahorrarte una enorme
cantidad de tiempo.
82. 3.10 herramienta de cita clara forma botón: Ahora volviendo a nuestro formulario de cotización
principal por aquí, vamos a agregar
una
función realmente simple en esta lección. Entonces esto es sólo una formalidad para hacer esto más fácil de usar. Lo que vamos a hacer es
crear un botón rápido para borrar todos
nuestros campos aquí, porque hicimos la cotización 11 y tal vez
queramos empezar una nueva. Y podríamos venir aquí y despejar todos estos
campos manualmente. Pero vamos a crear un botón para que haga las cosas fáciles. Entonces los campos que
queremos despejar o todos estos campos blancos aquí
que estoy haciendo clic a través. Y nuestra mesa, nuestros campos grises aquí están
basados en estas fórmulas. Y así no
queremos borrar nuestras fórmulas porque
nuestras fórmulas se ajustarán automáticamente a medida
que cambiamos nuestras selecciones. Así que empecemos
creando un botón claro. Estamos recibiendo muchos
botones aquí, así que sólo voy a
ponerlo aquí por ahora. Descubriremos a
dónde va más tarde. Golpeé cancel para no asignar una macro porque aún
no tenemos una. Y llamaremos a este
botón borrar todo. Ahora voy a
hacer clic derecho aquí e ir a nuestro código
detrás de esta hoja. Y vamos a crear
uno llamado claro. Aquí hay una subrutina
llamada Clear all. Simplemente seguiré adelante y
adjuntaré este botón a esta macro de aquí. Entonces si venimos por aquí,
podemos escribir un cuadro de mensaje que diga todo despejado o
algo así. Podemos tener un mejor mensaje, pero trataremos con eso más tarde. Y si hago clic en
esto, dice todo despejado, lo cual no es cierto porque aún no
hemos hecho nada. Voy a empujar
estas cosas hacia abajo, este cuadro de mensaje hacia abajo. Y aquí arriba
vamos a poner el código para borrar todos los campos. Crearemos nuestra pestaña principal. Entonces esto va a ser
bastante sencillo. No vamos a repasar
muchos conceptos nuevos aquí. Entonces sólo para conseguir esta función, queremos tomar nuestro rango, que está en nuestra hoja aquí. Queremos decir
rango Número de cotización, en este caso, ese
valor es igual a blanco. Entonces hay un par de
cosas que podemos hacer aquí. Si miras un rango y
obtenemos un número entero, por ejemplo, no voy a
repasar todos estos,
pero hay claro. Y luego está claro, sólo
la palabra clara Comentarios, su contenido, formatos claros. Entonces todos estos hacen cosas
diferentes. Podríamos
probarlos o podrías probarlos y
ver qué hacen. Pero
lo más fácil que suelo hacer es simplemente hacer un
valor igual a blanco. Porque si haces algo
así como, por ejemplo, solo la palabra clara
y acabamos de correr esta subrutina por
aquí contra el rango. Podría hacer algo no
recuerdo de
la parte superior de mi cabeza, pero podría despejar las fronteras, por
ejemplo, y realmente cambió la celda
más de lo que queremos. Lo que realmente queremos es el tipo de
escritorio despejado por aquí así y mantener todo
el formato igual. De hecho, incluso puedo mostrarte,
Vamos a seguir adelante y probarlo. A pesar de que
dije que no quería. Aquí abajo, eso es alrededor de esto en nuestra ventana inmediata y vamos a escribir claro y ver qué pasa. Entonces exactamente como lo
que me preocupaba, ahora
perdimos nuestras fronteras. Y es por eso que
hago algo así como valor es igual a blanco en su lugar, todavía recuerda que
este rango es el número de cotización. Entonces lo que tengo que hacer es
simplemente agregar nuestra frontera de nuevo, quedamos claro nuestro valor, y luego tenemos que hacerlo por estos otros campos aquí mismo. Sólo voy a copiar
esto y parece que tenemos otros tres
campos por aquí. Podemos sangrar esto. Por aquí está el nombre del cliente. Permítanme
dividir esto aquí para que podamos ver tanto a la vez nombre del cliente, tenemos nuestro número de artículo, y tenemos nuestra
cantidad por aquí. Y cada uno de estos sólo
va a establecer el
valor para que quede en blanco. Vamos a seguir adelante y probar
esto. Haga clic en Borrar. Y se ve un claro
estos por aquí. Y estos no se encuentran
porque tenemos nuestras fórmulas. Están haciendo búsquedas
basadas en lo que rellenamos aquí, que por
supuesto está en blanco. Pero si empiezo a
llenar esto de nuevo con
información aleatoria, entonces nuestra fórmula empieza a funcionar y sacan los datos que diseñamos para antes
en las lecciones. Y entonces lo último que
tenemos que hacer aquí es despejar nuestra mesa. Una cosa que olvidé mencionar es que aquí no he explícito, no
he
llamado explícitamente nuestras sábanas. Por lo que podría decir hojas principales aquí, ese rango para
hacernos saber específicamente que este rango está en
esta pestaña principal aquí. Pero no tenemos que hacerlo
porque estoy poniendo mi código detrás de esta hoja. Entonces no está en uno de
los módulos de aquí abajo. En cambio está detrás de una sábana. Y así esta cosa sabe
intrínsecamente que cuando llamo a arreglarlo sin
decirle en qué está, sabe revisar esta hoja que el código está detrás primero. Entonces por eso soy
capaz de dejar fuera la llamada explícita y no preocuparme de que
algo salga mal. Porque sé que
esta cosa va a por defecto saber y
buena hoja de la que estamos hablando
cuando uso este rango, una tabla aquí abajo
es un objeto de lista. Entonces si vuelvo a
Table Design
recordaré que
se llama líneas TBL. Entonces por ejemplo, aquí
puedo llamar nuestra hoja, diremos hojas principales, y luego diremos
que lista objetos. Recordarás de nuestras
lecciones pasadas en sus líneas de mesa. Y de nuestras lecciones anteriores, tal vez
recuerden eso porque lo
llamamos de esta manera. No estoy recibiendo estas opciones de
auto-relleno, lo que se llama opciones
intellisense, que me está diciendo qué
características tengo aquí. Por casualidad sé que este es el rango de cuerpo de
datos sobre la élite. Y como salté de una línea, se
puede ver automáticamente formateado lo que he escrito aquí. Puede que capitalizaciones y los puntos correctos capitalicen
la palabra delete. Y eso me dice que
escribo algo correcto, que cuando le doy
estas instrucciones, sabe cuáles son. Pero no me dio
una opción de autorelleno. Y eso es por la
forma en que nos estoy llamando. No estoy usando una variable
objeto. En tanto, podemos
hacer lo mismo. Podría aclarar esto. Puedo decir lanzamiento de
tabla como un objeto de lista, puedo decir establecer la línea de tabla es igual. Y esta es nuestra referencia
a esta tabla de aquí abajo. Y entonces ahora que tengo líneas de
tabla como objeto de lista, como una variable objeto aquí. Ahora, nuestro código va a saber qué propiedades y subrutinas
tenemos para este objeto, para este objeto list, y luego tenemos Theta
body range sobre delete. Y solo lo sabía porque lo había memorizado aquí abajo. Entonces este código y este código
significan exactamente lo mismo, aunque es posible que te
arroje cuando usas esta notación, no
es auto-llenado o dando
sugerencias de autofill para ti. Voy a seguir adelante
y despejaré esto. que ya escribí esto, esta es la
notación más clara que pienso. Así que vamos a tomar
nuestro rango de cuerpo de datos, que es todo el contenido aquí
abajo, borrarlo. Entonces vamos a seguir adelante y correr esto. Todo claro. Ahora podemos subir
para nuestra cotización 12, vamos a hacer algunas selecciones aquí. Agregaremos el ítem, pero
tenemos subíndice fuera de
rango por alguna razón. Así que vamos a golpear el bicho. haber roto algo antes. Entonces veamos de qué se trata esto. De acuerdo, Entonces esto no está relacionado con nuestra función que acabamos de
crear para borrar la forma. Pero veo lo que está pasando aquí. En realidad voy
a detener este video y luego recogeremos esto como problemas
genéricos
cuando
entremos en el siguiente video, y
hablaré a través de esto.
83. 3.10.2 tabla de herramientas de cita cero depuración de filas: Al final de nuestro último video, traté de agregar una línea de ítem y estamos golpeando
este error aquí. Y dice subíndice
fuera de alcance. Y aquí está la línea en la que
estamos golpeando un error. Creo que sé
lo que está pasando aquí y déjame caminar
por lo que pasó. Tenemos esta subrutina
aquí que está agregando una línea de ítem y tenemos
un problema con esta línea, que es el último número de línea. Si vuelves a los
últimos videos donde
creamos esta función y
agregamos estas líneas de código. Todo esto está relacionado con
encontrar nuestro siguiente número de línea. Por lo que queremos encontrar lo último para que podamos
agregarle uno para nuestro próximo número. Eso significa básicamente que encontramos nuestro último número en
este caso, que es uno. Y luego queremos averiguar
mientras estamos agregando una línea, cuál es nuestro próximo número. Entonces si agregamos una
línea, queremos
saber que nuestra última fue una, nuestro siguiente número es dos. Y luego agrega nuestra nueva
línea de artículo por aquí. Entonces si lo volvimos a hacer,
tendremos tres. Entonces si ejecuto esto
y presiono Agregar elemento, hay tres porque encontramos nuestro último número de línea que
fue dos, y luego incrementa. Lo que nunca habíamos probado desde entonces es ahora que
creamos este botón claro. Y todo está despejado,
vamos a añadir una línea de ítem. Y mientras está
tratando de averiguar cuál es el último número de línea,
está fallando porque
no hay porque
no hay líneas en absoluto. Esto es algo que
mencioné antes. Olvido si
en realidad lo mostré, pero si tomo
líneas de Mesa por aquí, así que por ejemplo,
déjame bajar aquí. Tienes un
desajuste de tipo también aquí. Oh, eso es debido a que
todas estas cosas están en blanco. Así que déjame
llenar esto muy rápido. Tenemos algunas cosas que
necesitamos arreglar aquí que hacen que esto sea
más fácil de usar. Queremos atrapar
todos estos errores. Entonces vamos a empezar
a limpiar esto. Si paso a través de este código, estoy atravesando
aquí solo para que pueda obtener este objeto de líneas de tabla aquí. Así que ahora que estamos a
mitad de camino corriendo a través nuestro código y hemos declarado
nuestras líneas de tabla objeto. Podemos escribir código instantáneo aquí en esta ventana abajo. Entonces, por ejemplo, por
tipo líneas de tabla, range dot select, estoy
seleccionando mi tabla. Una cosa que puede ser
realmente engañosa aquí es esta tabla
parece que tiene una fila en blanco. Eso es sólo para
las apariencias aunque. Porque si vengo
aquí abajo y escribo líneas de cable, una lista de filas que cuentan. Y en realidad no puedo simplemente ejecutar esto porque esto
va a devolver un número. Necesito
imprimir esto en una impresión de debug. Entonces si ejecuto esto para tratar averiguar cuántas
filas hay en mi tabla, ves la respuesta es 0, aunque
parezca que hay una fila aquí,
aunque esté en blanco. Esto puede ser realmente
engañoso porque si vengo aquí
y golpeo Spacebar, así que tengo algo aquí,
puedo ejecutar esto de nuevo. Y ya ves que ahora tenemos una fila. Eso es porque se ve en blanco hasta que agreguemos
algún contenido aquí. Y a pesar de
que hay espacios en blanco aquí, esta es oficialmente una
fila de información. Entonces un personaje espacial aquí es lo
mismo que si en realidad
escribo algo aquí. Y ahora se da cuenta
que hay una fila. Si hago clic con el botón derecho
y hago borrar fila, ves que el contenido se ha ido, pero
sigue manteniendo los bordes. Y eso es sólo porque
creo que se vería gracioso. Si no hubiera
fronteras por aquí. Ya no se vería como una mesa con solo los encabezados. Entonces eso es definitivamente
algo a tener en cuenta acerca de los objetos de lista y
tablas con nombre en nuestra hoja de Excel es que en
realidad hay 0 filas aquí, que pueden parecer idénticas a
una fila de información en blanco. Ahora, ¿por qué repasé eso? Eso es porque encontramos
nuestro último número de
línea al descubrir el contenido
en nuestra fila más abajo, estamos golpeando un error porque como este comando de aquí, está buscando tu fila
más abajo de la mesa. No hay fila, por lo que esa cosa simplemente
no existe. Eso suele ser lo que significa subíndice
fuera de rango. Significa que lo que estás
buscando no existe. Es como si
tuvieras cinco cosas en mano y luego
alguien te preguntara, ¿cuál es el nombre de la
séptima cosa que estás sosteniendo. Dice, Hey, estamos
fuera de alcance. No tenemos una séptima cosa, sólo
tenemos cinco cosas. Entonces eso es lo que está
pasando aquí ya que estamos buscando cuál es
la última fila, nos está diciendo que no
hay última fila. No hay filas en general. Cómo podemos manejar eso es poner aquí una declaración if y decir si Table lineas
que oyentes, igual que tenemos en nuestra ventana inmediata
durante nuestra demo aquí, decimos dot count, fue 0. Entonces vamos a hacer algo. De lo contrario, vamos a hacer
lo que estábamos haciendo antes. Y así básicamente vamos
a decir si hay 0 filas, entonces nuestro último
número de línea es igual a 0. De lo contrario, si había una línea aquí que diga como
una por ejemplo, entonces correrá
nuestra cosa típica. Nuestra última línea es una, nuestra siguiente línea es dos. Pero si vine aquí
y eliminé esta fila, sólo
estamos arrastrando esto de nuevo
aquí. Ahora, si no hay filas porque acabo de borrar el único
lugar que estaba aquí, entonces el último
número de línea es en realidad 0. Y luego cuando le agregamos uno, nuestro nuevo número de línea es uno. Y luego añadimos en nueva
fila información aquí. Porque eso era algo que
pasábamos por alto porque nunca antes
habíamos despejado
toda la mesa. Nuestra lógica que buscaba el siguiente número de línea
funcionaba bien. Pero cuando usamos nuestra función
nuclear all y estamos empezando
desde cero, ahora
nos encontramos con este problema, que ahora hemos arreglado.
84. 3.10.3 herramienta de cita de la validación de la línea: Ahora antes de que me olvide, vamos a ir a nuestro próximo problema que
nos encontramos antes, que es que teníamos esto quedando en blanco y creo que
hice clic en Agregar ítem. Y ahora tenemos un desajuste
de tipo aquí. Aquí estamos ejecutando nuestra
subrutina para agregar una línea. Y está diciendo que
tenemos un desajuste de tipo aquí por nuestro precio unitario. Y eso es porque
cuando vamos a nuestro precio unitario del artículo por aquí, tenemos un valor de no encontrado. Aquí está nuestro precio unitario
por aquí a la izquierda, que dice no encontrado porque no tenemos
ninguna información ingresada. En tanto, nuestro precio unitario es una variable por
aquí, eso es un doble. Esto está señalando indirectamente un problema que no es
la causa raíz. El problema que VBA está señalando aquí es que el precio unitario se
supone que es un doble, pero estamos tratando de poner en
el valor que no se encuentra en él. Entonces ese es un problema, pero esa no es la verdadera
raíz de nuestro problema. La verdadera raíz de nuestro
problema, por supuesto, es que no tenemos ninguna
información sobre la línea. Y entonces lo que estamos tratando de sumar esta línea a
la mesa de aquí abajo, no tiene ningún sentido. Probablemente no queremos usar o incluso
poder hacer esto. Entonces, lo que debemos hacer primero, añadir algo de validación aquí antes de empezar a
ejecutar este código en absoluto que está tratando de conseguir estos valores y empujarlo
hacia abajo a nuestra cuadrícula por aquí. Entonces lo que normalmente hago es ejecutar algo como crear algún
código para la validación aquí arriba, diremos mensaje de
error mencionado, cadena. Y te he mostrado
este concepto antes, el mismo patrón que utilizo
para marcar mensajes de error. Entonces lo volveremos a hacer aquí. Y diremos si nuestro campo de
artículo por aquí, que es nuestro número de artículo de rango, podemos decir Keats principal ir
punto rango número de artículo, valor de
punto es igual a blanco. Entonces vamos a
decir nuestro mensaje de error. Vamos a anexar algo
a nuestro mensaje de error. El mensaje de error equivale al elemento. Por aquí. Entonces debajo, por ejemplo,
para terminar con nuestra
validación, podemos decir, y luego podemos agregar un
pequeño descanso por aquí, solo un comentario para
romper nuestro código que
dice que la validación se
aclaró, tenía ítem. Y luego aquí arriba
necesitamos cerrar nuestra lógica de validación,
que básicamente dice, si hay algo
en nuestro mensaje de error, lo que
significa que no está
en blanco en nuestro mensaje de error. Entonces queremos terminar el proceso y vamos a
teclear los problemas detectados. Vamos a crear
una nueva línea aquí. Y luego vamos a mostrar
el usuario o mensaje de error. Entonces incluso voy a
crear dos nuevos saltos de línea. Verás cómo
se ve esto en un segundo. Y añadir, no se puede agregar
línea como un nuevo comentario. Así que detengamos esto y ejecutemos esto de nuevo. Voy a golpear a F8. Para que puedas seguir
la lógica aquí, porque el número de artículo está en blanco. Por aquí a la izquierda, agrega elemento está en blanco a
nuestra cadena de mensaje de error. Y luego por aquí para
nuestro cheque final, dice, si el mensaje de error no está en blanco, eso significa que encontramos
un error aquí arriba. Dice que los problemas detectados elemento
está en blanco, no puede agregar línea. Ahora podemos tomar el mismo código
exacto por aquí. Y en lugar de número de artículo, esta es la
cantidad del artículo puede cambiar. Esta cantidad cambiará esto
a la cantidad del artículo está en blanco. Te voy a mostrar
algo que me falta aquí. Lo que vas a ver,
añadimos nuestro artículo está en blanco. Añadimos nuestra
cantidad de artículo está en blanco. Por lo que tenemos dos temas
con balas diferentes aquí. Y vemos esto. Y lo que olvidé hacer es poner un salto de línea entre estos. Y así ves el mensaje
no se ve tan genial. Entonces voy a poner un nuevo feed de línea
VB por aquí. Y voy a hacer lo
mismo después de cada bala. Va a
tener automáticamente una nueva línea. Y si vuelvo a hacer esto,
añadimos primera bala,
la segunda bala. Y tenemos el artículo está en blanco, cantidad
del artículo está en blanco,
no puede agregar línea. Después llegamos a este extremo, que detiene toda la macro. Y no nos encontramos con son
problemas donde está tratando de
trabajar con estos datos que no
es válido para empezar. Para que podamos seguir adelante y probar esto. Y ahora sumamos la
línea y no
cumplimos con ninguno de estos si afirmaciones
que hemos agregado aquí. Por lo que no tenemos ningún mensaje de
error que mostrar y podemos continuar
con nuestro proceso. Entonces ahí está nuestro básico fijo para
dos temas diferentes aquí. Estoy seguro que vamos a
encontrar más a medida que
avanzamos y los
arreglaremos mientras nos encontramos con ellos.
85. 4.1.1 Herramienta de búsqueda de UserForm - Intro: Hola. Entonces a partir de uno de los
comentarios que me preguntaron, si podría hacer una demo de mostrar un formulario de usuario emergente
que se puede utilizar para buscar a través de datos
en la hoja de cálculo. Eso es lo que voy a
redactar aquí mismo. Como de costumbre, al igual que mis otros videos, voy a empezar
de cero y simplemente guiarte a
través de todo. Va a comenzar
un boceto muy rudo, f primero, y luego lo
puliremos a través de
los diferentes videos. Este es un concepto que
uso todo el tiempo y que tengo muchas variaciones
e implementaciones diferentes. Así que comencemos. Hablaremos de algo de
eso a medida que avanzan los videos. Entonces comencemos con
datos de ejemplo que podemos tener aquí. Entonces tal vez solo voy a decir
algo así como usuarios, voy a hacer Control
T aquí para hacer una mesa. Mi mesa tiene cabeceras. Simplemente por defecto es
tener un nombre de tabla aquí. Simplemente llamaremos a esta
tabla usuarios, digamos. Y esto podría ser cualquier conjunto de datos. Solo estamos haciendo una tabla de nombres porque en nuestros otros
videos ves cómo utilizo estas tablas
con nombre a menudo para los beneficios que
he mostrado antes. Entonces sólo voy
a decir persona uno. Y simplemente arrastraremos esto hacia abajo. Vamos a tener un
montón de gente. Entonces hay una lista grande. Lo que sería común es que
tienes toneladas de datos aquí que incluso podrías
hacer esto aún más. Se puede imaginar
que esto son cientos de nombres por los que sería
difícil desplazarse y buscar. Entonces tal vez por eso
queremos construir un formulario emergente para facilitar búsqueda
a través de
grandes cantidades de datos. Ahora a partir de aquí, no
tenemos nada, sólo
tenemos la hoja. Lo que queremos hacer es
hacer un formulario emergente, que se llama formulario de usuario. Entonces si vengo aquí
al Desarrollador y voy
a Ver código aquí. Ahora no tenemos nada. Lo que podemos hacer es que si haces
clic derecho en cualquier parte este explorador de proyectos por aquí, puedes ir a Insertar formulario de usuario. Y tenemos el formulario de usuario uno aquí. Entonces esta es solo la
forma en el fondo. No recuerdo si he usado esto en alguno de
mis otros videos todavía. Entonces esto podría ser una
introducción al mismo. Empecemos con esto. Si haces clic aquí y
bajas a las Propiedades, entonces puedes ver que su
nombre es el formulario de usuario uno. Podríamos cambiar ese nombre, pero
lo voy a dejar así por ahora. Tienes tu
pie de foto aquí mismo, formulario de
usuario arriba. Llamaremos a esta búsqueda. Sólo lo llamaremos búsqueda. Y ves esta palabra
aquí arriba, cambia la búsqueda. Se llama usuario formulario uno. Hagamos esto pop up. Ahora que solo tenemos aquí
este formulario de usuario, sé que aún no
tiene nada. Entonces, si volvemos aquí, hagamos que
aparezca con un botón. Entonces insertaremos un botón. No hay macro, así que
solo vamos a presionar cancelar aquí. Volveré a nuestro formulario
macro y
queremos crear un módulo
para contener nuestro código VBA. Entonces, insertemos un módulo. Nosotros diremos, diremos lanzados. Ya que tenemos ese formulario de búsqueda, puedes ver si solo escribo, uso y presiono Control Space para ver qué recomienda el IDE aquí, puedes ver que dice el formulario de usuario
uno que existe aquí mismo. Entonces si le doy a punto, se
puede decir Show. Y ahora vamos a adjuntar este botón a esa macro,
lanzar formulario de búsqueda. Cuando hago clic en él,
mostramos nuestro formulario de búsqueda. Entonces esa es esta
idea básica de un formulario de usuario, que es este formulario emergente que podemos usar para
diferentes funciones. Creamos este botón muy básico para simplemente hacer que
aparezca ahí mismo. Así que volvamos a
nuestro formulario de búsqueda. Cuando hacemos un formulario de búsqueda, lo que normalmente
empezaría y a lo que
podrías estar
acostumbrado es en la parte superior, tenemos un cuadro de texto. Entonces hay esta caja de herramientas
donde puedes poner estos elementos en
el formulario de usuario. Este es un cuadro de texto en el que
podrías escribir. Voy a hacer un
poco más alto aquí. Arreglaremos esto más tarde. Sólo voy a poner algunas cosas aquí
para mostrar el concepto. Y entonces lo siguiente
que voy a usar es este list box de aquí. Y lo que esto mostrará es una lista de líneas entre las que
puedes seleccionar. Entonces esto es como un cuadro de texto que quizás estés familiarizado. Esto no va a quedar tan bien,
pero simplemente lo dejaremos aquí. Y así tenemos un
cuadro de texto y un cuadro de lista. Ven aquí y haz clic en
el botón y verás que
tenemos un pop-up por aquí. Podemos escribir aquí abajo. Tenemos un list box, pero eso
no hace nada todavía. Entonces, lo primero
que te imaginas es que quizás queramos hacer clic en
este botón y queremos tener una lista
aquí de todos nuestros usuarios. Y podemos llevar a los usuarios
de esta tabla de datos por aquí donde tenemos aproximadamente
100 nombres,
por muchos que sean, cualquiera que sea
tu conjunto de datos. ¿Cómo podemos rellenar
esa información en este cuadro de lista que no está
haciendo nada en este momento? Entonces, cuando tienes un formulario de usuario, tiene código detrás de un formulario de usuario. Entonces, si haces clic derecho y
dices uso, déjame volver. Entonces, si haces clic derecho
y vas a Ver Código, este es el código
detrás del formulario, es lo que suele llamarse. También puede hacer clic derecho
en el formulario aquí y va a ir a Ver código por aquí. Y esto dice clip de formulario de usuario. Hay algunas cosas que
en realidad esto es como una subrutina predeterminada que
tiene van a tener nombres que VB
I solo reconoce como básicamente los eventos que pueden suceder cuando haces
cosas con el formulario. Y así es,
este es uno que
ya está aquí, formulario de usuario clic. Entonces, si digo Message
Box alto, por ejemplo, entonces esto debería ejecutarse
cuando dice formulario de usuario, haga clic, eso significa el formulario de usuario. Y luego cuando se
hace clic, entonces ahí es algo que se explica por sí mismo. Vamos a probarlo. Si hago clic botón para, aparece y luego haces clic en el
formulario y dice alto. Volvemos aquí. Regresaremos
a donde está nuestro código, haga clic con el botón derecho y veremos el
código para el formulario. Entonces tenemos esto,
en realidad no necesitamos esta subrutina aquí mismo. Verás que los foros de usuarios, es una especie de tecnología más antigua y tiene algunas peculiares. Esto simplemente aparece aquí. A lo mejor no quiero usarlo. A lo mejor no quiero
cubrir por ahí justo cuando haces clic en
cualquier parte del formulario, cual normalmente no lo hago. Así que sólo voy a
dejar esto aquí por ahora. Podría borrarlo más tarde
para limpiar las cosas. El que quiero usar es que veas este objeto de formulario de usuario
igual que tenemos formulario de usuario. Haga clic. Si dejas
esto como el formulario de usuario. Y luego aquí están las acciones. Al igual que si seleccionas
clic o haces doble clic, ves que crea
esta subrutina como si hicieras doble clic en
el formulario de usuario. Y tiene este tipo de cosas
por defecto con él. Yo no quiero eso. Lo que quiero
es formulario de usuario aquí a la izquierda e inicializar
por aquí a la derecha. Lo que esto va
a hacer es que se va
a ejecutar cada vez que se inicialice el formulario de
usuario. Entonces, si hago clic aquí y hago
clic en este botón, ya
ves antes de que se
inicialice, aparece eso. Entonces ahí está nuestra caja y esas pequeñas subrutinas
que teníamos antes. Déjame volver a
nuestro editor de código. Cada vez que vuelves
al editor de código, éste vuelve al formulario. Entonces esto es un pequeño
desgarro de corcho que siempre hay que volver
al código, formulario de usuario inicializar. Ejecuta este código aquí. Aquí es donde podemos poner las cosas. Eso sucede justo cuando aparece
el formulario de usuario. Y aquí es donde
vamos a empezar tirando la información de
esa tabla de usuarios. Si volvemos a un formulario de usuario , por ejemplo, o puede hacer clic aquí. Y ya ves esto se
llama cuadro de texto uno. Podemos cambiarles el nombre, pero
no me voy a molestar ahora mismo. Esto se llama List box uno. Entonces podemos usar eso. Volvamos
al código aquí. Y si empiezo a escribir list
box y presiono Control Space, dice list box uno. Esto tiene propiedades como agregar elemento es lo que
vamos a usar. Entonces si solo digo agregar ítem y
digo ítem aquí, por ejemplo,
en citas. Ahora volvamos. Ese código se va a ejecutar cuando
inicialicemos este formulario en nuestro primer ítem
aquí es el ítem aquí. Entonces volveremos
a este código otra vez. Sigue reiniciándose aquí y
puedes hacer más de una vez. Entonces este es el concepto aquí donde vamos a agregar elementos. Y ahora tenemos dos artículos. Observe que no va
a agregar el artículo nuevamente. Cada vez que cierro la
caja, empieza de nuevo. Así que la cierro y
se han ido todos. Y luego ejecuta esas dos líneas de código y va a decir ítem aquí y ítem dos. Y no es decir
aquí y luego 21.2 cada vez porque
cada vez que cierro
este formulario y luego hago clic en este, está comenzando un formulario completamente nuevo cada vez que aparece. Ahora tenemos esta
mesa por aquí. Le renombré la tabla Usuarios. Y vamos a
usar un concepto que
hemos hecho en nuestros otros videos. Así que vamos a dimensionar esta
tabla como un objeto de lista. Crear un objeto de lista. Y básicamente
vamos a tomar esa tabla de usuarios y
recorrer todas las filas. Entonces toda esa persona 123
que he metido ahí. Ahora vamos a poner la mesa como esa mesa de allá. Así que establece la tabla es igual, digamos que ella es
una lista de objetos. Vamos a tomar ese nombre de
mesa que tenemos por aquí. Das clic por aquí, son los usuarios de la tabla simplemente
copiándola y pegándola
te permite ver de dónde estoy
sacando esto. Entonces vamos a recorrer
cada celda de esa tabla. En este caso,
vamos a ser, en este caso vamos
a recorrer cada fila de esa tabla. Así que vamos a decir
para cada fila de lista, que es nuestro objeto L rho
en los oyentes de punto de cable. Siguiente L rho. Y tal vez vamos a crear
una variable aquí. Diremos usuario tenue. Y diremos usuario
es igual a L rango de puntos rho. Si hiciéramos una, esa
sería la primera celda. Entonces tenemos una fila y la
primera celda de esa fila, que es realmente la única
celda, es el valor. Entonces va a
pasar por cada fila y tomar la primera celda de cada fila. Si le dije rango hasta aquí, van a tratar de tomar la
segunda celda y probablemente se equivoque o tal vez hacer algo que no
queremos que haga. Así que hemos repasado esto
en los otros videos. Eso es lo que voy a hacer aquí, solo como atajo por ahora. Así que tenemos cada usuario
va a pasar por
cada fila, establecer el usuario, y vamos a añadir
ese usuario a nuestro cuadro de lista. Así que en realidad podemos
tomar esto aquí arriba. Y cambiaremos
este texto que
escribí manualmente al usuario convirtiéndose en
esta variable. Ahora puedo aclarar esto. Y cuando lanzamos esta cosa, va a
recorrer cada fila de esa tabla y agregar un
elemento al list box. Haremos clic en este botón. Ahí vamos. Tenemos nuestro pop-up con
cada fila aquí. Y puedes ver,
puedes pinchar por aquí. Tenemos todos esos datos de nuestra tabla ahora en este cuadro de lista. Así que en realidad
voy a parar aquí. Y luego en el siguiente paso, vamos a construir una función de búsqueda
básica donde puedas acotar
estos datos escribiendo texto.
86. 4.1.2 Herramienta de búsqueda de UserForm - filtro básico: Recogiendo donde lo dejamos, tenemos
aquí este botón que aparece el formulario de búsqueda que
ahora tiene esta lista de ítems que muestra todos los datos en nuestra tabla
de nombres por aquí en nuestra hoja de cálculo. Entonces hasta una persona 127 aquí. Para que veas que está
cargando a todos en todo el camino hasta
el fondo de esta mesa. La función más importante de esta cosa es que
queremos poder escribir texto aquí arriba y luego filtrar esta información. Y lo que probablemente haremos es
hacerlo para que quieras seleccionar uno de estos elementos aquí con la ayuda de
esta función de filtrado y poner estos datos en
otro lugar de tu hoja de cálculo. Entonces eso es probablemente lo que
vamos a terminar haciendo. Ahora comencemos a enmarcar cómo
va a funcionar esa función de búsqueda. De nuevo, realmente estoy haciendo una forma sin pulir aquí por ahora porque quiero hacer una demostración de
las funciones se relacionan. Entonces lo que vamos a hacer es
volver a nuestro código aquí. Y esta es la información que muestra todas las cosas en la tabla porque estamos
recorriendo cada fila. Hagamos otra función que vaya a
refrescar esos datos. Cuando tenemos algo
en nuestro cuadro de búsqueda. Y ahora tenemos que alejarnos de esta subrutina que se ejecuta
justo cuando se carga el formulario, porque solo se carga una vez, entonces necesitamos
interactuar con el formulario. La forma
en que podemos hacerlo al menos por ahora, es que voy a volver
a este formulario y
voy a agregar un botón por
aquí, un botón de comando. Vamos a agregar este botón
tiene algo de texto aquí. Sólo llamémoslo búsqueda. Ahora si tomamos este botón, se llama botón de comando uno. Es como que ejecuta
este botón largo, así que vamos a cambiarle el nombre. Btn search es como suele
nombrar un botón como este. Y luego ahora si hago
doble clic en este botón, automáticamente enmarca
esta subrutina para nosotros para que estés viendo que
hay diferentes formas crear las subrutinas
en videos pasados, estoy seguro que
me has visto teclearlos. Aquí. El formulario de usuario
está tratando de crear los títulos de las subrutinas que se correlacionen con las acciones. Por lo general, llamamos a los eventos
un controlador de eventos. Entonces, al hacer doble clic en
ese botón, se dio cuenta de que probablemente
quiero estar codificando una subrutina. Es entonces cuando se hace clic en esta búsqueda de botón de
objeto, ya que acabamos de
renombrarlo. Por lo tanto, haga clic en subrayado y nos
creó esta subrutina. Justo como antes. Voy a crear este
cuadro de mensaje solo para mostrarnos aquí. Olvidé este paréntesis. Si volvemos a
nuestro formulario podemos hacer clic en el botón y hacer clic en
Buscar se va a ejecutar esa subrutina.
Entonces haz clic en esto. Volvamos a
nuestro código por aquí. De vuelta al formulario porque
puede suceder todo el tiempo. Cada vez que haces algo, vuelves y no estás en el código. Estoy de vuelta
al código aquí. Entonces buscando. En cambio lo que quiero hacer
es tomar la misma idea. Usamos este código cuando
inicializamos el foro para traer toda esa información
que es de la tabla. Entonces volvamos a hacerlo. Sabemos que solo va a hacer lo
mismo cuando
se inicialice. Pero en realidad te voy a mostrar
algo muy rápido. Si vienes por aquí. Tenemos a toda nuestra
gente de uno al 127. Voy a hacer clic en
buscar y va a ejecutar lo mismo. Parece que no pasó nada. Pero estamos a la 27
y vuelve a empezar. Y eso es porque ese
código solo se suma a la lista. Y luego lo vuelves a ejecutar y se agregará a la lista. Otra vez. No estamos limpiando
ninguna de esa información. Entonces, si vuelvo a hacer clic en esto, aún
tenemos otro 127 ya que
recorre nuestra mesa aquí por tercera vez.
Volvamos aquí. Incluso puedo hacer doble clic en
esto y me llevará a la misma
función por aquí. Porque en vez de crear
esta nueva subrutina, que sería un
duplicado ese punto y los que
te traerán de vuelta por aquí. Entonces antes de hacer esto, voy a decir list box, igual que usamos
este ítem por aquí. Punto de lista que borra. Entonces, cada vez que ejecutemos esto, va a borrar todo
antes de agregar todos
estos elementos de nuevo de los datos
de nuestra tabla. Y la
parte importante aquí es que no queremos volver a agregar toda nuestra
información. Queremos filtrarlo por ese cuadro de texto que lo
agregamos a la parte superior. Así que vamos a crear una
nueva variable aquí. Lo llamaremos búsqueda. Llámalo una cadena. Y por qué queremos buscar. Buscar es igual a nuestro cuadro de texto en el espacio de control superior nuevamente. Entonces el cuadro de texto uno era el
nombre de ese cuadro de texto. Solo para recordarte,
si haces clic aquí, es esta palabra justo aquí es donde viene el nombre de este
objeto de cuadro de texto. Si cambiamos esto a búsqueda TXT, entonces eso es lo que
vamos a querer que sea. Entonces, si volvemos al código, el cuadro de texto uno realmente
quería tener más sentido. Si yo controlo el espacio, ves que en realidad ya
ni siquiera recomendará el cuadro de texto uno
porque no existe. En cambio puedo decir búsqueda de texto. Desde que renombré ese objeto de cuadro de
texto. Entonces puedo decir Valle. Entonces la búsqueda se convierte en lo ingresamos en ese cuadro de
texto en la parte superior. Aquí es donde estamos agregando
todos esos usuarios. Entonces, en lugar de pasar por
este bucle, así que de nuevo, esto va a
recorrer cada fila de nuestra tabla de hoja de cálculo. No queremos sumar cada fila por la que pasa. En cambio, a medida que
avanzamos por cada fila, queremos ver si esos datos
coinciden con lo que nuestras búsquedas. Entonces, si el usuario contiene lo que
tenemos en nuestro cuadro de búsqueda, la propia cadena, verás a lo que me
refiero mientras escribo esto. Entonces lo que voy
a decir es que a medida que
pasamos por cada
usuario uno por uno, vamos a decir en cadena, que creo que probablemente he usado esto en mis otros videos, lo que básicamente está
diciendo dentro del usuario. Entonces en la información en esta tabla por aquí para la
persona uno a través de lo que sea, digamos Persona 12. ¿Contiene una
subcadena de búsqueda, que es lo que escribamos dentro de nuestro cuadro de texto en la parte superior? Así que voy a ralentizar eso
otra vez para que podamos verlo. Y si es mayor que cero, lo que significa que si hay
algún resultado, entonces esa es nuestra declaración if. Te saltaste adelante aquí voy a
reducir la velocidad y simplemente recordarnos cómo funciona esta función
de
cadena. Y entonces sólo si se cumple esta
condición, entonces vamos a
agregar este usuario a la lista. Nuevamente, hemos despejado todo
el cuadro de lista, y así va a quedar en blanco. Y luego cuando
volvamos a agregar usuarios, va a
haber
este nuevo criterio. El usuario tiene que conocer lo que
tenemos en el cuadro de búsqueda. Entonces veamos si esto funciona.
Volvamos aquí. Botón de un solo clic. Si hacemos clic en Buscar con un espacio en blanco,
No pasa nada. De veras, algo está pasando. Es borrar
todo el cuadro de búsqueda y agregar todo de nuevo. Pero parece que
no pasa nada. Pero ahora si digo escriba
dos y haga clic en Buscar, se
puede ver que todo se
ha reducido aquí y estoy usando letras
porque usé el mismo nombre. puede imaginar si esto fuera
cientos de nombres diferentes, esta sería una búsqueda mucho
más detallada, pero lo único diferente
entre todos estos números, razón por la
cual estoy
usando números aquí. Y entonces si hice
tres, ahí tienes. Y estamos filtrando
todo. Si escribo uno NO3,
hay persona 103. Voy a
frenar esto muy rápido. Si vuelvo aquí, solo
voy a poner un punto de interrupción
aquí mismo para que entonces
podamos detenernos y solo mirar
como funciona esa función. Sólo para aclarar aquí. Entonces, al hacer clic en esto, voy a escribir dos
y luego hacer clic en buscar. Verás el valor
de nuestras búsquedas. Lo que hay en ese
cuadro de texto en la parte superior, que son dos mientras
me cierro por aquí. Entonces la búsqueda es dos. Esto es sólo por primera vez pasando por la primera
fila de la tabla. Así que en realidad estamos en la persona uno. Lo que esta cadena está haciendo es
decir dentro de esta cadena, persona uno, ¿dónde está la
ubicación de la subcadena? ¿A? Dentro de la persona uno,
esta cadena está
buscando la corriente a y
no la va a encontrar. Y así la respuesta a esto
va a ser cero. Ahora, usa aquí este signo de
interrogación. Puede que haya mostrado una
impresión de depuración en el pasado. Si haces un signo de interrogación,
eso es lo mismo que solo mostrarme cuál es el
resultado de esto, lo que viene después
del signo de interrogación. Y entonces la respuesta de
que esto es cero. Y así este dicho si
la respuesta a esto es mayor que cero,
entonces agrega el usuario. Entonces cuando golpeo, esto se salta. Ahora va a
recorrer de nuevo. El usuario ahora es
persona a él diciendo, ¿a dónde va la cadena de búsqueda? ¿Puedes encontrar esto
dentro de esta subcadena? La respuesta va a
ser mayor que cero. La respuesta es ocho. Debido a que la cadena, la cadena de búsqueda dos es el octavo carácter
en el usuario. Ya que pasamos este criterio, vamos a agregar
el usuario aquí. Incluso podrías ver
que sucede en vivo. Sí, para que veas
que pasa por aquí. A ver. Parece que no se muestra tan bien, ya
que divido esto, lo que deberías ver aquí, se está saltando a todos y luego probablemente vea al usuario de Ron seis. Cuando lleguemos al usuario 12, deberíamos verlo
aparecer 11 o 12. Y ahora estamos de nuevo aquí
y estamos agregando el usuario. Entonces eso es lo que está
sucediendo a escala aquí puedes ver que
sucede a la
velocidad del rayo y básicamente instantáneo para este resultado de búsqueda aquí. Y así es como estamos
consiguiendo una búsqueda de filtro hacia abajo. Escriba 11, haga clic en Buscar. Y puedes ver con estos datos, sabes que hay un montón de implementaciones
diferentes, pero puedes tener una
cantidad de datos ingentes y no debería
suceder bastante rápido. Entonces aquí es donde
estás empezando a obtener cientos de miles
de líneas de información donde una
persona no quiere
desplazarse para buscar un nombre, por ejemplo o cualquiera que sean los datos. Y si solo escribes 32 y buscas, aquí tienes
todos los resultados. Si escribo 321 ahí mismo,
ahí está nuestra opción.
87. 4.1.3 Herramienta de búsqueda de UserForm - seleccione elemento: Bien, entonces construyendo sobre
nuestro video anterior, donde tenemos una búsqueda
básica aquí, y esto filtra todos estos resultados de nuestra
hoja de cálculo por aquí. El último
paso importante para esto, y nuevamente, esto está
muy sin pulir. Pero el último paso de esto, solo desde un punto de vista general, es que queremos
poder seleccionar uno de los ítems
de este list box. Entonces si filtramos todo hacia abajo y ahora
podemos encontrar más fácilmente nuestra elección. Queremos poder
seleccionar este registro y probablemente rellenarlo
en algún lugar de nuestra hoja de cálculo. Entonces eso es lo que haremos a continuación. Así que sólo vamos
a elegir un lugar. Vamos a elegir cualquier celular
aquí era para vender H5. Simplemente elige
uno al azar por aquí en
el espacio en blanco e incluso
podemos cambiarle el nombre a esto. Llamaremos a este usuario seleccionado. Oh, en realidad, lo siento. Lo que quería hacer es escribir
el usuario seleccionado aquí. Y solo usaremos esta
celda de aquí a un lado. Y le daremos una frontera a esto
para que parezca un campo. Y voy a cambiar el nombre aquí. Usuario seleccionado aquí
sin espacios. No tenía el formato
correcto ya que estaba escribiendo este tipo
de cosas en el nombre. Entonces ahora esta celda se
llama usuario seleccionado. Y cuando lleguemos a la búsqueda, incluso
cambiaré este
nombre aquí mismo. Obtendremos nuestra ventana emergente
y luego queremos seleccionar una de nuestras
selecciones aquí que podamos filtrar
y hacer que se complete en esa
celda de allí. Ahora, cuando
vayamos a nuestro código, veamos, déjame
llegar a nuestro editor aquí. Iré a Desarrollador Ver código. Hay una docena de
formas diferentes de llegar a este editor. Lo hago de manera diferente cada vez que volvemos
a nuestro foro de usuarios. Y necesitamos seleccionar uno de nuestros artículos
y luego enviarlo. Entonces solo por algo
fácil ahora mismo, pongamos otro
botón aquí. Y llamaremos a este botón. Seleccione. Podría estar bien o
cualquier cosa que se te ocurra. Así que sólo lo estoy inventando aquí. Tendremos este botón
que dice Seleccionar. Ahora por aquí tenemos botón de
comando one-click. Entonces eso es lo que sucede
cuando hacemos clic en ese botón. En realidad, ya que nombramos a
este botón de búsqueda. Mientras volvamos a esta forma, y voy a renombrar este cuerpo. Entonces no es comando por
el que es bastante largo, dirá botón. Ahora bien, si hacemos doble clic en esto, creamos esta nueva. El método de aquí,
los botones seleccionan. Este todavía está por aquí, que en realidad
nunca se activará ya que este botón no
existe en este momento. Sólo podemos eliminar eso.
Otra vez. Lo probaremos. Seleccionado. Siempre solo me gusta hacer esto como solo una demo de que los
eventos funcionan bien? Si vienes por aquí,
haces clic en Buscar, seleccionar rápido, y
dice seleccionado, que por supuesto en realidad no está
haciendo nada en este momento. Entonces ahora volvemos a la forma. Volvamos a nuestro código. Y necesitamos recorrer nuestro cuadro de lista y
averiguar qué es lo que se selecciona. Entonces esto es un solo sentido o podría
haber mejores formas, pero esta es una forma sencilla
que he hecho antes. Y en realidad hay algo de
sintaxis y voy a olvidar. Así que igual que antes,
creo que podría simplemente saltar a un
navegador y Google el resultado y
hacerlo en esta grabación
aquí para que podamos verlo. Pero creo que vamos
a recorrer todos
los elementos de nuestro cuadro de lista y averiguar
cuál es el seleccionado. Esa es probablemente la
mejor manera de hacerlo es recorrer cada
elemento uno por uno y básicamente solo verificar cuándo llegas al
que está seleccionado. Así que déjame seguir adelante y
probar esto por aquí. Entonces vendremos
a Google y
diremos VBA de esta casilla seleccionada. Entonces claro que me gusta antes, me gusta grabar estos
en los videos, cómo podría hacer una búsqueda si
me olvido de algo aquí, solo
me estoy olvidando la sintaxis. Verás, sólo estoy
hojeando por aquí. Y justo como sospechaba, están haciendo un bucle. Así que están
recorriendo el cuadro de lista. En este caso, al pasar por
cada elemento del list box, recuento de
list box es cuántos
elementos hay en el list box. Y luego cuando llegan a
un ítem que es seleccionado. Entonces x va a ir de
01234567 y así sucesivamente. Si digamos, se selecciona el ítem número
seis, entonces esta afirmación
va a ser cierta. cuadro de lista uno seleccionado
seis será verdadero. Y entonces sabremos que
ese es seleccionado. Entonces eso es lo que están
mostrando aquí en este ejemplo. Entonces hagámoslo. Vamos a crear un contador. En nuestro ejemplo, estaban
usando x en el pasado. Acabo de usar I como
nuestro índice normal. Hagamos por I es igual a
cero a esta casilla uno. Olvidé si era recuento de artículos,
recuento de listas. Yo creo. Volvamos. Vamos a contar por
aquí y menos uno. Creo en mis otros videos
he repasado como arreglos, depende del objeto. Sé intuitivamente, si no has hecho
mucha programación, usualmente cuentan desde
1123 y así sucesivamente. Pero para las matrices, en muchos objetos de programación,
empiezan en cero. Entonces lo primero es
cero y luego uno, razón por la
cual
vamos de cero a contar lista menos uno. Entonces, por ejemplo, si el list
box tiene tres elementos, esto en realidad
va a decir tres, como pensaríamos intuitivamente. Pero entonces un contador en el objeto va
a ir ítem cero, item one, and item two
to get your three items. Entonces por eso está aquí esta
notación. Y van a ir, si esta casilla que está seleccionada, yo igual a verdad, entonces esto es
lo que sea este número. Si digo uno, entonces
va a ser, ítem uno
se selecciona
verdadero o cero? Ya que empezamos en cero, y si se selecciona el primer ítem, entonces esto devolverá true. De lo contrario devolverá falso. Entonces ese es el ejemplo que nos
están mostrando a partir de eso. Ese era en realidad el sitio web de
Microsoft. Así que devuélveme esto a I. Y entonces lo que
les acaban de mostrar aquí es que solo están haciendo un mensaje diciendo número de ítem. Sólo estoy haciendo un mensaje
aquí para demo seleccionada. Y otra vez, recuerden
que voy a ser uno al revés porque
cero es el primer ítem. Veremos en nuestro
ejemplo por aquí. Probemos esto. Hagamos clic en nuestro primer elemento
y haremos clic en Seleccionar. selecciona el número de artículo cero. selecciona el artículo número uno. Entonces ya ves cómo está
funcionando eso ahí mismo. Está detectando qué cosa se selecciona a medida que recorremos. Una cosa que me gusta hacer aquí es después de que encontremos lo que se selecciona. Muy rápido, ya ves,
estoy tratando de escribir aquí y no me deja, estoy pegando a Enter y todo eso. Eso es porque mientras aparece este formulario de
usuario, no
puedo hacer nada en
Excel, incluido el editor. Entonces tengo que cerrar esto y luego ahora puedo volver y
hacer cosas con Excel. Ya no está congelado. Volveremos aquí. Me gusta salir del bucle. Salga por aquí una vez
que encontremos lo que estamos buscando, ya que vamos
a recorrer todas las mil filas básicamente, una vez que encontremos la
que está seleccionada. En este caso, ya que esperamos que solo se seleccione una cosa, entonces simplemente podemos dejar de hacer bucles. Entonces, si encontramos que el ítem
tres está seleccionado, no
tenemos que
recorrer 1,000 filas más. Eso es innecesario. Entonces ahora tenemos i. lo que podemos hacer es en lugar de mostrar el número de
ítem i está seleccionado, creo que podemos crear
una variable aquí solo para que sea más obvia
cuando digo cadena de usuario. Y cuando encontremos el
ítem que está seleccionado, podemos obtener el valor
del ítem que está seleccionado diciendo esta casilla. Uno. En realidad, déjame volver aquí
y solo comprobaremos esto. Ya ves que dice list box list x. Así que creo que esa es la
notación que va a que estábamos usando I en lugar de x. Eso
nos va a conseguir nuestro nombre de usuario. Entonces en este mismo mensaje, más rápido, pondremos al usuario, digamos ítem. Se selecciona el usuario, en lugar de solo mostrar
el número de la fila. Entonces volvamos aquí
y veamos si esto funciona. Persona a, hacemos clic en Seleccionar y se selecciona la persona de usuario dos. Sé que este buzón de mensajes
no tiene mucho sentido. Vamos a bajar todo el camino. Si cambiamos este filtro y
hacemos la búsqueda aquí, da clic en Seleccionar. Y tenemos esto.
Estamos detectando el valor del elemento en el cuadro de
lista seleccionado. Ahora, como pueden ver, estamos obteniendo toda la
información que necesitamos. Volvamos
aquí a nuestro código. Ahora realmente no
necesitamos este cuadro de mensaje. Acabo de comentar esto aquí mismo con
este apóstrofe. Tengo un hockey para hacerlo. En realidad configuré una cosa personalizada. Pero realmente puedes
subir aquí y comentar
rápido o poco común. Ahora que tenemos nuestro valor que estamos
buscando para el usuario final, todo lo que tenemos que hacer después de
las hojas, una gama. Y sólo vamos a decir donde queremos
poner esto el valor. Y lo hemos hecho toneladas de veces en nuestras otras lecciones aquí, vamos a tomar
el valor del usuario en su lugar de nuevo en la hoja. Aquí nombramos a este
usuario seleccionado. Si dijera yo cinco o
lo que sea esto, sea cual sea la dirección de la celda,
ahí es donde irían estos datos. Yo sólo voy a decir,
oye, esta celda de aquí, usuario coloca ese valor ahí. Y luego vamos a salir
del bucle, y eso será todo. Voy a
venir aquí, seleccionar
algo, hacer clic en Seleccionar. Y ves que la persona cinco
termina en esa celda. Puedo cerrar esto.
Probablemente ya estés pensando que
no cerramos ese formulario de usuario. Entonces eso es lo último
que podemos hacer. Después del bucle. Podemos. Hay un par de formas
diferentes de hacer esto. alguna manera intuitiva que
podrías pensar es un usuario formar un punto ocultar. Y eso cerrará el formulario. Pero eso en realidad solo ocultar
superficialmente la
forma para hacerla desaparecer, pero aún podría estar
activa en segundo plano. Si vuelves a este
sitio web, dirás, verás que escriben, me
descargan, lo cual es una notación
interesante. Podrías pensar
que eso es un poco gracioso. Por suerte eso
me manda justo aquí. Esto es en realidad lo mismo
que decir descargar usuario formulario uno, que es lo que hemos estado
haciendo referencia a nuestro formulario de usuario. Sólo esta notación de decirme, porque este es el código
detrás del formulario de usuario. El término yo en realidad se usa
aquí para referirse a sí mismo. Y así así
podrías usar esta notación sin importar el nombre
de nuestro formulario de usuario. Entonces esto en realidad cerrará
el formulario de usuario y lo borrará de la memoria por el
momento y todo, a menos que relanzes uno nuevo. Así que ahora podemos hacer click aquí. Podemos teclearlo 100 buscar, encontrar lo que estamos buscando. Pulsa Seleccionar. Y ahora este campo
dice 100% 100. Y por supuesto esto
funcionaría si tuvieras datos
más realistas o
cualquier fuente de datos que tuvieras. En este caso, podría
ser un rango específico. Además no tiene que
ser esta tabla de nombres, aunque me gustaría
usar estas tablas con nombre. Y hay todo tipo de otras funciones en las
que puedes construir. Pero creo que al final de esto, este es su concepto
mínimo para demostrar cómo
funcionaría esto y continuará agregando pocas características de limpieza
antes de atar esta cosa.