Automatización con Macros de Excel / VBA de Excel - principiante a avanzado | Steve Tran | Skillshare

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Automatización con Macros de Excel / VBA de Excel - principiante a avanzado

teacher avatar Steve Tran, Freelance Software Developer

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Introducción - Actualizado

      4:57

    • 2.

      1.1 Mostrando pestaña de desarrollador

      0:34

    • 3.

      1.2 Macros de grabación

      2:41

    • 4.

      1.3 Ahorro de tipo de archivo XLSM

      1:10

    • 5.

      1.4 Visualización de tu código

      1:27

    • 6.

      Caja de mensajes de 1.5 VBA Editor

      2:47

    • 7.

      Referencias de celdas 1.6

      1:50

    • 8.

      1.7 Nombrar una célula

      2:25

    • 9.

      1.8 Crea una carpeta

      2:48

    • 10.

      1.9 Debugging de errores

      3:31

    • 11.

      1.10 Escribir datos en celular

      1:02

    • 12.

      1.11 Variables

      1:13

    • 13.

      1.12.1 Integers de matemáticas básicas

      1:36

    • 14.

      1.12.2 Integer vs largo

      2:35

    • 15.

      1.13 si declaraciones

      3:14

    • 16.

      1.14 para bucle

      4:18

    • 17.

      1.15 para la automatización continua de Loops!

      2:51

    • 18.

      Descripción y tutorial de 1.A Class Project 01

      14:37

    • 19.

      1.16 Esc Key para detener la Macro

      4:28

    • 20.

      1.17.1 Hacer mientras que Loop Intro

      8:20

    • 21.

      1.17.2 Hacer mientras usa el caso de uso de bucle

      9:07

    • 22.

      1.17.3 para cada introducción de bucle

      7:46

    • 23.

      Tipo de variable de 1.17.4

      9:23

    • 24.

      1.17.5 para cada bucle con Variante

      4:25

    • 25.

      1.18.1 Variables de objetos - conjunto - entrada

      4:11

    • 26.

      1.18.2 Vares de objetos - declarar + leer todos los archivos en la carpeta

      7:12

    • 27.

      Objeto de libro de trabajo 1.19.1

      11:11

    • 28.

      1.19.2 Objeto de hoja de trabajo

      5:40

    • 29.

      1.20 Librerías de referencia Word Object Intro

      7:50

    • 30.

      1.21.1 Llamar a Sub de otro sub.

      4:56

    • 31.

      1.21.2 Llame a Sub con un parámetro

      7:52

    • 32.

      1.21.3 Llame a Sub con múltiples parámetros

      7:04

    • 33.

      1.21.4 Sub con parámetro opcional

      6:55

    • 34.

      1.22 Funciones Intro

      5:19

    • 35.

      1.23 con declaración

      5:52

    • 36.

      1.24.1 Captura de error: introducción - en error

      9:26

    • 37.

      1.24.2 GoTo - código marcador

      5:27

    • 38.

      1.24.3 en el marcador de error Goto

      8:05

    • 39.

      1.24.4 en error: persistencia y restablecimiento

      9:35

    • 40.

      1.C.1 automatiza la creación de archivos Txt

      6:40

    • 41.

      1.C.2 Automate Rename archivos arreglar

      9:18

    • 42.

      Datos en movimiento: crea un Macro de registro de formulario

      4:24

    • 43.

      2.2 Datos móviles: nombra las gamas

      7:11

    • 44.

      2.3 Datos móviles: simplifique el código grabado

      5:12

    • 45.

      2.4 Datos móviles: solo pegue los valores de los valores

      4:19

    • 46.

      2.5 Datos móviles: sin copia y pegar

      3:35

    • 47.

      2.6 Datos móviles: escritura a la siguiente fila

      6:00

    • 48.

      2.7 Datos en movimiento: agrega marca de tiempo

      1:35

    • 49.

      2.8 Datos en movimiento: escritura en diferentes hojas

      3:59

    • 50.

      2.9 Datos en movimiento: ajuste a punto para arriba

      6:28

    • 51.

      2.10 Datos móviles: validación antes de proceso

      15:36

    • 52.

      2.11 Object de tabla con nombre (objeto de lista)

      5:04

    • 53.

      2.11.1 ListObjects (tabla) - VBA Intro

      10:39

    • 54.

      2.11.2 ListObjects - ListRows y Looping

      6:22

    • 55.

      2.11.3 ListObjects - ListColumns y valores de hilado

      7:32

    • 56.

      Excercise 2.11.4: elimina ciertas filas

      18:54

    • 57.

      Excercise 2.11.5: elimina ciertas filas Lvl2

      8:05

    • 58.

      2.12 Datos móviles Agregar fila w ListObject

      15:46

    • 59.

      Proyecto de herramientas de cotización 3.1 - introducción

      3:41

    • 60.

      Herramienta de cotización 3.2.1: crea una carpeta

      13:01

    • 61.

      Herramienta de cotización 3.2.2: cheque y abra la carpeta

      7:20

    • 62.

      Herramienta de cotización 3.3.1: agrega la configuración de la interfaz de usuario de línea

      3:24

    • 63.

      Herramienta de cotización 3.3.2: añada línea nueva lista parte 1

      13:14

    • 64.

      Herramienta de cotización 3.3.3 - búsqueda de datos de ítem

      10:43

    • 65.

      Herramienta de cotización 3.3.4: finaliza la línea de añadir básica

      7:43

    • 66.

      Herramienta de cotización 3.3.5 - Delete Line - Refresh Count

      17:45

    • 67.

      Herramienta de cotización 3.4.1 - plantilla de salida de Excel

      4:58

    • 68.

      Herramienta de cotización 3.4.2: transferencia de encabezado de salida de Excel

      9:55

    • 69.

      Herramienta de cotización 3.4.3: transferencia de líneas de salida de Excel

      13:36

    • 70.

      Herramienta de cotización 3.4.4: Excel Output Save File

      12:58

    • 71.

      Herramienta de cotización 3.5 - Correo electrónico de Outlook automático

      11:20

    • 72.

      Herramienta de cotización 3.6 - tabla de búsqueda de clientes

      5:20

    • 73.

      Herramienta de cotización 3.7: comprueba que el archivo adjunto existe

      5:54

    • 74.

      3.8 Herramienta de cotización: añade precio total

      8:48

    • 75.

      Herramienta de cotización 3.9.1 - registro de historia - Comienza

      10:38

    • 76.

      3.9.2 Herramienta de cotización - información de encabezado de registro

      9:31

    • 77.

      3.9.3 Herramienta de cotización - información de líneas de registro

      9:03

    • 78.

      3.A.1 Automatice a la venta de datos de muchos archivos Intro

      2:43

    • 79.

      3.A.2 bucle a través de la lista de identificadores

      10:22

    • 80.

      3.A.3 Loop abre archivos y obtén datos

      14:28

    • 81.

      3.A.4 Convertir formato de etiquetas y prueba

      7:22

    • 82.

      3.10.1 Cuita el botón de formulario claro de herramienta

      7:00

    • 83.

      3.10.2 Cotización de la tabla de herramientas cero Debug

      5:09

    • 84.

      3.10.3 Herramienta de cotización Añadir Validación de línea

      4:24

    • 85.

      4.1.1 Herramienta de búsqueda de UserForm - Intro

      12:30

    • 86.

      4.1.2 Herramienta de búsqueda de UserForm - filtro básico

      11:14

    • 87.

      4.1.3 Herramienta de búsqueda de UserForm - seleccione elemento

      13:20

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

1178

Estudiantes

8

Proyectos

Acerca de esta clase

ACTUALIZACIÓN: recientemente he grabado una nueva introducción y horas adicionales de videos nuevos. Todavía estoy planeando agregar mucho más contenido para cumplir con mi misión de crear una biblioteca completa de lecciones para traer a alguien de un principiante a un programador de VBA avanzado. Actualmente estoy trabajando en el proyecto de seguimiento de "Herramienta de cotización" que es la Sección 3.

Aprecio tu paciencia mientras sigo construyendo esta biblioteca de curso!

Descripción de la clase:

Esta clase te introducirá en los conceptos de programación y automatización con Microsoft Excel con la funcionalidad de codificación de macro y VBA. El comienzo es adecuado para principiantes que nunca han hecho ninguna programación antes. Se trata de una excelente introducción a Excel Macros y también a programación en general con conocimientos transferibles para otros lenguajes de programación.

Te guiará a través de conceptos esenciales y poco a poco demostrará alguna automatización poderosa que esta habilidad puede traer a tus tareas de computador clericales.

A medida que continúe la clase, introduciré conceptos cada vez más avanzados. Te traeré a lo largo de la creación de proyectos de ejemplo que combinan y utilizan los conceptos discutidos en lecciones anteriores.

La estructura aproximada del curso es que las lecciones al principio te enseñarán conceptos individuales que se muestran por sí mismos. Estos son los bloques de construcción. Las lecciones posteriores mostrarán proyectos de ejemplo en los que demuestro y explico cada paso de la construcción de herramientas de ejemplo que podrían automatizar procesos en tu negocio o trabajo.

Por favor no dude en ponerse en contacto conmigo con cualquier pregunta y dejar una revisión. ¡Gracias por cualquier momento que pases en mira! Si dejas una pregunta en la discusión, me encantaría contestarla e incluso grabar una lección de video para la respuesta.

Conoce a tu profesor(a)

Teacher Profile Image

Steve Tran

Freelance Software Developer

Profesor(a)

Hello, I'm Steve.  I'm a freelance software developer who builds custom tools to support business process efficiency, automation, and analytics.

Ver perfil completo

Level: All Levels

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

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.