Introducción a la programación en Excel. Gestión de objetos y colecciones. Objetos, propiedades y métodos de VBA

Creación de una función personalizada en VBA Excel, su sintaxis y componentes. Descripción de la función definida por el usuario y sus argumentos. Método Application.MacroOptions.

Función personalizada es un procedimiento de VBA que realiza cálculos específicos y devuelve el resultado. Se utiliza para insertar celdas de una hoja de cálculo de Excel o llamar desde otros procedimientos.

Declarar una función personalizada

Sintaxis de función

Nombre de función ([ArgumentList]) [Operadores] [Nombre = expresión] [Operadores] [Nombre = expresión] Fin de función

Componentes de funciones

  • Estático es una palabra clave opcional que indica que los valores de las variables declaradas en una función se conservan entre llamadas a la función.
  • Nombre- componente requerido, nombre de la función de usuario.
  • Lista de argumentos- un componente opcional, una o más variables que representan los argumentos que se pasan a la función. Los argumentos están entre paréntesis y separados por comas.
  • Operadores- un componente opcional, un bloque de operadores (instrucciones).
  • Nombre = expresión- componente opcional*, que asigna un nombre de función al valor de una expresión o variable. Normalmente, se asigna un valor a una función justo antes de salir.
  • Función de salida- componente opcional, salida forzada de la función si ya se le ha asignado un valor final.

*Uno de los componentes Nombre = expresión debe considerarse obligatorio, ya que si no se asigna un valor a una función, se pierde el significado de su uso.

Visibilidad de funciones

La visibilidad de una función definida por el usuario está determinada por las palabras clave públicas y privadas opcionales, que se pueden especificar antes de la declaración Función (o Estática, si se usa).

Palabra clave Público indica que la función estará disponible para llamar desde otros procedimientos en todos los módulos abiertos del libro de Excel. Una función declarada como Público, aparece en el cuadro de diálogo Asistente de funciones.

Palabra clave Privado indica que la función estará disponible para llamar desde otros procedimientos solo dentro del módulo de programa en el que se encuentra. Una función declarada como Privado, no aparece en el cuadro de diálogo Asistente de funciones, pero se puede ingresar en la celda manualmente.

Si no se especifica la palabra clave Pública o Privada, la función se considera declarada como Pública de forma predeterminada.

Para asegurarse de que una función personalizada esté siempre disponible en todos los libros de Excel abiertos, guárdela en Visibilidad no declarada o como Pública. Pero si planea transferir un libro con una función definida por el usuario a otra computadora, el código de función debe estar en el módulo de programa del libro transferido.

Ejemplo de función personalizada

Como ejemplo, consideraremos una función de usuario simple, de la cual agregaremos una descripción en el siguiente párrafo. La función se llama “División” y se declara con el tipo de datos Variante, ya que su valor de retorno puede ser un número o texto. Los argumentos Dividendo y Divisor de la función también se declaran como Variantes, ya que las celdas de Excel pueden contener valores numéricos de diferentes tipos, y la función IsNumeric también busca diferentes tipos de datos y requiere que sus argumentos se declaren como Variantes.

Función División (Dividendo como variante, Divisor como variante) Como variante Si IsNumeric(Dividendo) = False O IsNumeric(Divisor) = False Entonces División = "Error: ¡El dividendo y el divisor deben ser números!" Salir de la función ElseIf Divisor = 0 Then Division = "Error: ¡división por cero!" Salir de la función De lo contrario División = Dividendo / Divisor Finalizar si finalizar la función

Esta función divide los valores de dos celdas en una hoja de cálculo de Excel. Antes de la división se verifican dos bloques de condiciones:

  • Si el dividendo o el divisor no es un número, la función devuelve el valor: "Error: ¡Dividendo y divisor deben ser números!", y la función se fuerza a salir con la instrucción Salir de la función.
  • Si el divisor es cero, la función devuelve el valor: “¡Error: división por cero!”, y la función se ve obligada a salir utilizando la instrucción Salir de la función.

Si no se cumplen las condiciones que se están verificando (el valor se devuelve False), los números se dividen y la función devuelve el cociente (el resultado de la división).

Puede copiar esta función a su módulo estándar y estará disponible en la sección "Definido por el usuario" del Asistente de funciones. Intente insertar la función División en una celda de la hoja de trabajo usando el Asistente y experimente con ella.

La función "División" no tiene ningún significado práctico, pero demuestra bien cómo se declaran, crean y funcionan las funciones personalizadas en VBA Excel. También ayudará a demostrar cómo agregar descripciones a funciones y argumentos. Puede familiarizarse con la función de usuario completa.

Agregar una descripción de función

En la lista de funciones que muestra el Asistente, es imposible agregar o editar su descripción. La lista de macros le permite agregar descripciones a los procedimientos, pero no contiene funciones. El problema se resuelve de la siguiente manera:

  • Inicie el Asistente de funciones, vea cómo se muestra el nombre de la función deseada y ciérrelo.
  • Ábralo e ingrese el nombre de la función personalizada en el campo "Nombre de macro".
  • Haga clic en el botón "Opciones" y agregue o edite una descripción en la ventana que se abre.
  • Haga clic en el botón "Aceptar", luego en la ventana de la lista de macros - "Cancelar". ¡La descripción está lista!

Agregar una descripción usando el ejemplo de la función "División":

Descripción de la función División en el cuadro de diálogo Argumentos de función del Asistente de funciones:


Usando la ventana Lista de macros, puede agregar una descripción de la función en sí, pero no sus argumentos. Pero esto se puede hacer usando el método Application.MacroOptions.

Método Aplicación.MacroOptions

El método Application.MacroOptions le permite agregar una descripción a la función personalizada, asignar un método abreviado de teclado, especificar una categoría, agregar descripciones de argumentos y agregar o cambiar otras opciones. Veamos las características más utilizadas de este método.

Código de ejemplo con el método Application.MacroOptions:

Sub SubroutineName() Aplicación.MacroOptions _ Macro:="NombreFunción", _ Descripción:="Descripción de Función", _ Categoría:="Nombre de Categoría", _ ArgumentDescriptions:=Array("Descripción 1", "Descripción 2", " Descripción 3", ...) Fin Sub

  • nombre de subrutina- cualquier nombre único adecuado para los procedimientos de denominación.
  • NombreFunción- nombre de la función cuyos parámetros se agregan o modifican.
  • Descripción de la función- descripción de la función que se agrega o cambia.
  • Nombre de categoría- el nombre de la categoría en la que se ubicará la función. Si falta el parámetro Categoría, la función personalizada se escribirá en la sección predeterminada, Definida por el usuario. Si el nombre de categoría especificado coincide con uno de los nombres de la lista estándar, la función se escribirá en él. Si dicho nombre de categoría no está en la lista, se creará una nueva sección con este nombre y la función se colocará en ella.
  • "Descripción 1", "Descripción 2", "Descripción 3", ...- descripciones de los argumentos en el orden en que aparecen en la declaración de función del usuario.

Esta rutina se ejecuta una vez y luego se puede eliminar o usar como plantilla para ajustar los parámetros de otras funciones personalizadas.

Ahora, usando el método Application.MacroOptions, intentemos cambiar la descripción de la función personalizada "División" y agreguemos descripciones de los argumentos.

Sub ChangeDescription() Application.MacroOptions _ Macro:="División", _ Descripción:="Descripción de la función División modificada por el método Application.MacroOptions", _ ArgumentDescriptions:=Array("- cualquier valor numérico", "- numérico valor distinto de cero ") End Sub

Después de ejecutar esta subrutina una vez, obtenemos el siguiente resultado:


El método Application.MacroOptions no funciona en , pero aquí también puedes encontrar una solución. Agregue descripciones a funciones personalizadas y sus argumentos en un libro de trabajo de Excel normal, luego exporte el módulo con las funciones a cualquier directorio de su disco duro e impórtelo desde allí al Libro de macros personal. Se guardarán todas las descripciones.

Conceptos básicos de programación VBA

Comentarios (0)

El proceso de desarrollo de un programa en VBA - proyecto, puede constar de varias etapas, dependiendo del resultado final. Si necesita obtener un programa que realice ciertos cálculos o acciones que amplíen las capacidades matemáticas de la aplicación estándar de Microsoft Office, entonces basta con crear programa módulo. Para usar este programa, puede colocar un botón en el espacio de trabajo de la aplicación, presionarlo hará que el programa se ejecute. Para hacer esto, debe habilitar la barra de herramientas en la aplicación usando el comando VistaBarras de herramientasControles y luego cree un botón con el código de programa apropiado. O ejecute el programa usando el comando ServicioMacromacros.

Desarrollar un programa “completo” (que requiere una ventana separada para ejecutarse, con diferentes controles) implicará dos etapas. La primera etapa es la etapa de programación visual, en la que se crea una ventana ( forma) programas donde se encuentran los controles necesarios. La segunda es la etapa de programación, en la que se crean partes del programa ( procedimientos), ejecutado en respuesta a ciertos eventos. Un evento es, por ejemplo, un clic izquierdo del mouse en un botón de comando (evento Click), una pulsación de tecla en el teclado (evento KeyPress), etc. Puede utilizar dicha aplicación haciendo clic en el botón "Iniciar proyecto".

2.1. Objetos, propiedades y métodos de VBA

Uno de los conceptos básicos en VBA es el objeto. Objeto es algo que se controla mediante un programa VBA, como un formulario, botón, hoja de cálculo o rango de celdas de MS Excel. Cada objeto tiene algunos propiedades. Por ejemplo, una forma puede estar visible o no actualmente en la pantalla. Otro ejemplo de propiedad de objeto es la fuente para mostrar información en una celda (objeto) de una hoja de trabajo.

El objeto también contiene una lista de métodos que se le aplican. Métodos es lo que puedes hacer con un objeto. Por ejemplo, puede mostrar un formulario en la pantalla u ocultarlo utilizando los métodos Mostrar y Ocultar.

De este modo, objeto- este es un elemento del programa que tiene su propia visualización en la pantalla, contiene algunas variables que lo determinan propiedades, y algunos metodos para controlar el objeto. Por ejemplo, MS Excel tiene muchos objetos integrados:

Rango(“ DIRECCIÓN”)

Rango de celdas (solo puede incluir una celda).

Celdas (i, j)

La celda ubicada en la intersección de la i-ésima fila y la j-ésima columna de la hoja de cálculo de MS Excel (i y j son números enteros).

Filas(Línea no.)

Línea con el número dado.

columnas(Columna no.)

Columna con un número dado

Hojas(“ Nombre”)

La hoja con el nombre especificado.

Hojas(Hoja No.)

Hoja con el número indicado.

Hoja de trabajo

Hoja de trabajo.

Establecer valores de propiedad es una forma de manipular objetos. La sintaxis para establecer el valor de la propiedad de un objeto es la siguiente:

Objeto. Propiedad = Expresión

La propiedad principal de los objetos. Células Y Rango, es Valor(valor), que, sin embargo, no podrá especificarse. Por ejemplo:

Rango(“A5:A10”). Valor = 0 o Rango(“ A5: A10”) = 0 - el valor 0 se ingresa en el rango de celdas A5:A10.

Células(2, 4). Valor = norte o Células(2, 4) = norte- el valor de la variable n se ingresa en la celda ubicada en la intersección de la segunda fila y la cuarta columna (celda con dirección “D2”).

La sintaxis para leer las propiedades del objeto es la siguiente:

Variable = Objeto. Propiedad

Por ejemplo:

xn = Células(1, 2). Valor o xn = Rango(“ B1”). Valor- A la variable Xn se le asigna el valor de la celda B1 de la hoja de trabajo actual.

La sintaxis para aplicar métodos a un objeto es:

Objeto. Método

Por ejemplo:

Hojas(2). Activar - haga la hoja con el No. 2 activo.

Hojas("Diagrama").Borrar - elimine la hoja denominada "Gráfico".

Rango("A5:A10").Borrar - Borrar rango de celdas A5:A10.

Rango("A2:B10").Seleccione - Seleccione el rango de celdas A2:B10.

MS Excel tiene objetos que contienen otros objetos. Por ejemplo, un libro contiene hojas de trabajo, una hoja de trabajo contiene un rango de celdas, etc. El objeto de mayor nivel es Solicitud(solicitud). Si cambia sus propiedades o llama a sus métodos, el resultado se aplica al trabajo actual de MS Excel. Por ejemplo:

Solicitud. Abandonar- finalizar el trabajo con Excel.

Tenga en cuenta que se puede utilizar un punto después del nombre de un objeto para pasar de un objeto a otro. Por ejemplo, la siguiente expresión borra la segunda fila de la hoja de trabajo. Puede en el libro de trabajo Informe:

Aplicación.Libros de trabajo("Informe").Hojas de trabajo("Puede").Filas(2).Eliminar

Cabe señalar lo siguiente:

  • No es necesario escribir el nombre del objeto. Solicitud, ya que este es el valor predeterminado.
  • Cuando se trabaja con un subobjeto de un objeto ya activado, no es necesario especificar el objeto que lo contiene.
  • VBA utiliza algunas propiedades y métodos que devuelven el objeto al que hacen referencia (esto le permite especificar rápidamente el objeto deseado). Ejemplos de tales propiedades: ActiveCell (celda activa), ActiveSheet (hoja activa), ActiveWorkBook (libro de trabajo activo). Entonces, puedes establecer el valor de la celda activa de la siguiente manera:

ActiveCell.Value = "!}".

2.2. Descripción de datos

Todos los objetos sobre los que opera el lenguaje de programación VBA pertenecen a un tipo específico.

El tipo de datos define:

El rango de posibles valores de la variable;

Estructura de organización de datos;

Operaciones definidas sobre datos de este tipo.

Los tipos de datos se dividen en simples (escalares) y complejos (estructurados). Para tipos de datos simples, los valores de datos posibles son únicos e indivisibles. Los tipos complejos tienen una estructura que incluye varios tipos de datos simples. Los tipos de datos escalares se presentan en la Tabla 2.1.

Tabla 2.1. Tipos escalares de VBA

Nombre del tipo

ruso
escriba el nombre

Valores posibles

Lógico

Byte

Entero largo

2147483648…+2147483647

número de punto flotante

3.4E38…-1.4E-45 para valores negativos. 1.4E-45...3.4E38 para valores positivos.

Número de punto flotante de doble precisión

1.7E308…-4.9E-324 para valores negativos. 4.9E-324…1.7E308 para valores positivos.

Monetario

Números decimales con posición decimal fija. Hay 15 dígitos posibles antes del punto decimal y 4 después de él.

Cadena

Hay dos tipos de cadenas: cadenas de longitud fija (hasta 2 de 16 caracteres) y cadenas de longitud variable (hasta 2 de 31 caracteres). Los datos están escritos entre comillas.

Las fechas varían desde el 01/01/100. hasta el 31 de diciembre de 9999

Un tipo genérico cuyo valor puede ser cualquiera de los tipos de datos enumerados anteriormente, objetos, valores NULL y valores de error ERROR.

Las variables de un programa se pueden describir o no. En este último caso, se le asignará el tipo Variante. Puede describir explícitamente una variable tanto al comienzo de un bloque como en cualquier lugar donde sea necesario utilizar una nueva variable. Es mejor describir todas las variables explícitamente y, por regla general, al principio del bloque. Para prohibir el uso de variables que no hayan sido declaradas explícitamente, debe insertar la declaración al comienzo del programa. Opción explícita.

2.2.1. Descripción de variables simples

La descripción de variables simples tiene la siguiente sintaxis:

OscuroVARIABLE_NOMBREComoTIPO_NOMBRE

Un operador Oscuro se puede describir un número arbitrario de variables, pero el diseño Como deben especificarse para cada uno de ellos, en caso contrario variables sin Como se asignará el tipo Variante.

Por ejemplo.

Atenuar X como byte, Z como entero,CON, CpescaComo cadena

Aquí la variable incógnita es una variable de tipo byte, una variable z- tipo entero, variable CON- opción de tipo (predeterminada), variable Palabra- tipo de cadena.

2.2.2. Descripción de constantes

Los datos que no cambian dentro del programa pueden considerarse constantes. Se pueden describir de la siguiente manera:

constanteCONSTANT_NAMEComoTIPO_NOMBRE = EXPRESIÓN_CONSTANTE

Por ejemplo.

Const Pi como doble = 3,141593

2.2.3. Descripción de matrices

Para almacenar vectores, matrices, etc. puedes usar matrices.

matriz - Este es un tipo de datos estructurados, que es una secuencia de celdas de memoria que tienen un nombre común y almacenan datos del mismo tipo. Cada elemento de la matriz se identifica mediante un índice (número). El número de elementos de una matriz se llama dimensión de la matriz. La matriz se describe mediante la siguiente construcción:

OscuroARRAY_NAME(LISTA_DIMENSIONES) ComoTIPO_NOMBRE

En la lista de dimensiones de la matriz, cada dimensión está separada por una coma y se determina estableciendo los límites superior e inferior para cambiar los índices.

Por ejemplo.

Dim X(1 A 5) Como Entero, Y(1 A 10, 1 A 20) Como Doble

Aquí incógnita- una matriz unidimensional que consta de 5 elementos de tipo entero, Y- una matriz bidimensional que tiene 10 filas y 20 columnas con elementos numéricos de doble precisión.

2.3. Expresiones

Las expresiones especifican el orden en que se realizan las acciones en los elementos de datos. Las expresiones constan de operandos y símbolos de operador. Los operandos son constantes, variables, punteros de función y expresiones entre paréntesis.

2.3.1. Tipos de operaciones

Las operaciones pueden ser aritméticas, relacionales y lógicas:

- operaciones aritméticas:
^ exponenciación,
* multiplicación,
/ división,
\ división completa,
mod resto de la división,
+ más,
- menos;

- operaciones de relación:
< меньше,
>más
<= меньше или равно,
>= mayor o igual a
= igual,
<>no igual;

- operaciones lógicas:
Negación no lógica,
Y lógico "Y",
O lógico "O".

El resultado de una operación lógica puede ser uno de dos valores:
Verdadero o Falso.

2.3.2. Prioridad de operación

Si una expresión contiene varias operaciones, entonces la prioridad de su ejecución es la siguiente:

1. Primero, las operaciones aritméticas se realizan en el orden en que se presentan en la Tabla 2.2.

Tabla 2.2. Prioridad de las operaciones aritméticas.

3. Las operaciones lógicas se realizan al final en el orden en que se presentan en la Tabla 2.3.

Tabla 2.3. Prioridad de las operaciones lógicas.

Descripción de la operación

Designación en VBA

Negación lógica

"Y" lógico

"O" lógico

Si una expresión contiene varias operaciones de la misma prioridad, entonces el orden de ejecución es de izquierda a derecha. Para cambiar el orden de las acciones en una expresión, se utilizan paréntesis.

Las expresiones pueden ser aritméticas, relacionales o lógicas.

Expresiones aritméticas se escriben utilizando operandos de tipos numéricos y operaciones aritméticas, y el resultado es un valor numérico. En una expresión aritmética, se pueden utilizar funciones matemáticas estándar, que se dan en la Tabla 2.4.

Tabla 2.4. Funciones matemáticas estándar de VBA

Notación matemática

Nombre de la función en VBA

Descripción

Devuelve un valor cuyo tipo coincide con el tipo del argumento pasado, igual al valor absoluto del número especificado.

Devuelve un Double que contiene el arcotangente de un número.

Devuelve un Double que contiene el coseno del ángulo.

Devuelve un valor de tipo que coincide con el tipo del argumento, que contiene la parte entera del número.

Devuelve un Double que contiene el logaritmo natural de un número.

Devuelve un Double que contiene el resultado de multiplicar un número mi (base de logaritmos naturales) a la potencia indicada.

Devuelve un valor Variante (Entero) correspondiente al signo del número especificado.

Devuelve un Double que contiene el seno del ángulo.

Devuelve un Double que contiene la raíz cuadrada del número especificado.

Devuelve un Double que contiene la tangente de un ángulo.

Expresiones de actitud Determinar si un resultado es verdadero o falso al comparar dos operandos. Puede comparar datos de cualquier tipo similar. El resultado de una operación relacional es sólo lógico: Verdadero - "verdadero" o Falso - "falso".

Expresiones lógicas. El resultado de una expresión booleana es el valor booleano Verdadero o Falso. Los tipos más simples de expresiones lógicas son: constante lógica, variable lógica, función lógica, expresión de relación. Las operaciones lógicas se realizan sólo con operandos de tipo booleano.

Ejemplo. Escribe 1 £ X £ 5 y determina el valor de la expresión en X = 3,1

La expresión en VBA se verá así:

incógnita>=1 Y incógnita<=5

El resultado de la expresión será Verdadero.

Para obtener una lista de todas las funciones matemáticas, simplemente escriba el nombre de cualquier función matemática conocida (por ejemplo, PECADO), y luego presione la tecla F1 Funciones matemáticas . En la lista resultante puede obtener información sobre el propósito de cualquiera de las funciones matemáticas integradas y su argumento.

Para obtener una lista de todas las derivadas de funciones matemáticas y las reglas para su formación, simplemente escriba el nombre de cualquier función matemática conocida (por ejemplo, PECADO), y luego presione la tecla F1 y debajo de la descripción de la función seleccionada, seleccione un enlace para Funciones matemáticas derivadas .

A continuación, en la Tabla 2.5, se muestra una lista de funciones que se pueden obtener utilizando funciones matemáticas integradas.

Tabla 2.5. Funciones matemáticas derivadas

Notación matemática

Nombre de la función

Combinación de funciones integradas

Cosecante

Cotangente

arcoseno

Atn(X/Cuadrado(-X*X+1))

arco coseno

Atn(-X/Cuadrado(-X*X+1))+2*Atn(1)

Arcosecante

Atn(X/Sqr(X*X-1))+Sgn((X)-1)*2*Atn(1)

arcocosecante

Atn(X/Sqr(X*X-1))+(Sgn(X)-1)*2*Atn(1)

Arcotangente

Seno hiperbólico

(Exp(X)-Exp(-X))/2

coseno hiperbólico

(Exp(X)+Exp(-X))/2

Tangente hiperbólica

(Exp(X)-Exp(-X))/(Exp(X)+Exp(-X))

Secante hiperbólica

2/(Exp(X)+Exp(-X))

Cosecante hiperbólica

2/(Exp(X)-Exp(-X))

Cotangente hiperbólica

(Exp(X)+Exp(-X))/(Exp(X)-Exp(-X))

Arcoseno hiperbólico

Registro(X+Sqr(X*X+1))

Arco coseno hiperbólico

Registro(X+Sqr(X*X-1))

Arcotangente hiperbólico

Iniciar sesión((1+X)/(1-X))/2

Arcosecante hiperbólico

Registro((Cuadrado(-X*X+1)+1)/X)

Arcocosecante hiperbólico

Registro((Sgn(X)*Sqr(X*X+1)+1)/X)

Cotangente de arco hiperbólico

Registro((X+1)/(X-1))/2

Logaritmo en base N



Otras noticias

Antes de comenzar a crear sus propias funciones de VBA, es útil saber que Excel VBA tiene una gran colección de funciones integradas prediseñadas que puede usar al escribir código.

Se puede ver una lista de estas funciones en el editor de VBA:

  • Abra un libro de Excel e inicie el editor VBA (haga clic aquí Alt+F11) y luego haga clic F2.
  • Seleccione una biblioteca de la lista desplegable en la parte superior izquierda de la pantalla Vba.
  • Aparece una lista de clases y funciones de VBA integradas. Haga clic en el nombre de la función para mostrar una breve descripción en la parte inferior de la ventana. Prensado F1 abrirá la página de ayuda en línea para esa función.

Además, puede encontrar una lista completa de funciones VBA integradas con ejemplos en el sitio web del Centro de desarrolladores de Visual Basic.

Función personalizada y subprocedimientos en VBA

En Excel Visual Basic, un conjunto de comandos que realizan una tarea específica se coloca en un procedimiento Función(Función) o Sub(Subrutina). La principal diferencia entre los procedimientos. Función Y Sub es ese el procedimiento Función devuelve resultado, procedimiento Sub- No.

Por lo tanto, si necesita realizar acciones y obtener algún resultado (por ejemplo, sumar varios números), entonces se suele utilizar el procedimiento. Función, y para simplemente realizar algunas acciones (por ejemplo, cambiar el formato de un grupo de celdas), debe seleccionar el procedimiento Sub.

Argumentos

Se pueden pasar varios datos a los procedimientos de VBA utilizando argumentos. La lista de argumentos se especifica cuando se declara el procedimiento. Por ejemplo, el procedimiento Sub en VBA, agrega el número entero especificado (Entero) a cada celda en el rango seleccionado. Puede pasar este número al procedimiento usando un argumento como este:

Sub AddToCells(i como entero) ... Fin Sub

Tenga en cuenta que tener argumentos para los procedimientos Función Y Sub en VBA es opcional. Algunos procedimientos no requieren argumentos.

Argumentos opcionales

Los procedimientos de VBA pueden tener argumentos opcionales. Estos son argumentos que el usuario puede especificar si lo desea, y si se omiten, el procedimiento utiliza los valores predeterminados para ellos.

Volviendo al ejemplo anterior, para hacer que un argumento entero de una función sea opcional, lo declararías así:

Sub AddToCells (Opcional i como entero = 0)

En este caso, el argumento entero i el valor predeterminado será 0.

Puede haber varios argumentos opcionales en un procedimiento; todos ellos aparecen al final de la lista de argumentos.

Pasar argumentos por valor y por referencia.

Los argumentos en VBA se pueden pasar a un procedimiento de dos maneras:

  • porval– pasar un argumento por valor. Esto significa que sólo el valor (es decir, una copia del argumento) se pasa al procedimiento y, por lo tanto, cualquier cambio realizado en el argumento dentro del procedimiento se perderá cuando salga.
  • Por referencia– pasar un argumento por referencia. Es decir, al procedimiento se le pasa la dirección real del argumento en la memoria. Cualquier cambio realizado en un argumento dentro de un procedimiento se guardará cuando el procedimiento finalice.

Usando palabras clave porval o Por referencia En una declaración de procedimiento, puede especificar exactamente cómo se pasa el argumento al procedimiento. Esto se ilustra a continuación con ejemplos:

Recuerde que los argumentos en VBA se pasan por referencia de forma predeterminada. En otras palabras, si no se utilizan palabras clave porval o Por referencia, entonces el argumento se pasará por referencia.

Antes de continuar aprendiendo los procedimientos Función Y Sub Con más detalle, será útil volver a analizar las características y diferencias entre estos dos tipos de procedimientos. La siguiente es una breve discusión de los procedimientos de VBA. Función Y Sub y se muestran ejemplos sencillos.

Procedimiento VBA "Función"

El editor VBA reconoce el procedimiento. Función

Función...Finalizar función

Como se mencionó anteriormente, el procedimiento Función en VBA (a diferencia de Sub), devuelve un valor. Las siguientes reglas se aplican a los valores devueltos:

  • El tipo de datos del valor de retorno debe declararse en el encabezado del procedimiento. Función.
  • La variable que contiene el valor de retorno debe tener el mismo nombre que el procedimiento. Función. Esta variable no necesita declararse por separado ya que siempre existe como parte integral del procedimiento. Función.

Esto se ilustra perfectamente en el siguiente ejemplo.

Ejemplo de un procedimiento VBA “Función”: Realizar una operación matemática con 3 números

A continuación se muestra un código de procedimiento VBA de ejemplo. Función, que toma tres argumentos de tipo Doble(números de coma flotante de doble precisión). Como resultado, el procedimiento devuelve otro número del tipo Doble, igual a la suma de los dos primeros argumentos menos el tercer argumento:

Función SumMinus(dNum1 Como Doble, dNum2 Como Doble, dNum3 Como Doble) Como Doble SumMinus = dNum1 + dNum2 - dNum3 Función Final

Este es un procedimiento VBA muy simple. Función ilustra cómo se pasan datos a un procedimiento a través de argumentos. Puede ver que el tipo de datos devuelto por el procedimiento se define como Doble(las palabras dicen esto Como doble después de la lista de argumentos). Este ejemplo también muestra cómo el resultado del procedimiento Función se almacena en una variable con el mismo nombre que el nombre del procedimiento.

Llamar al procedimiento VBA "Función"

Si el procedimiento simple discutido anteriormente Función insertado en un módulo en el editor de Visual Basic, se puede llamar desde otros procedimientos de VBA o usarse en una hoja de trabajo en un libro de Excel.

Llamar al procedimiento VBA "Función" desde otro procedimiento

Procedimiento Función se puede llamar desde otro procedimiento VBA simplemente asignando este procedimiento a una variable. El siguiente ejemplo muestra una llamada al procedimiento. suma menos, que se definió anteriormente.

Sub main() Dim total como Total doble = SumMinus(5, 4, 3) End Sub

Llamar a un procedimiento VBA "Función" desde una hoja de trabajo

procedimiento VBA Función se puede llamar desde una hoja de cálculo de Excel de la misma manera que cualquier otra función integrada de Excel. Por lo tanto, el procedimiento creado en el ejemplo anterior Funciónsuma menos se puede llamar ingresando la siguiente expresión en una celda de la hoja de trabajo:

SumaMenos(10, 5, 2)

Procedimiento VBA "Sub"

El editor de VBA comprende que hay un procedimiento ante él. Sub, cuando encuentra un grupo de comandos encerrados entre las siguientes declaraciones de apertura y cierre:

Sub...Fin Sub

Procedimiento de VBA "Sub": Ejemplo 1. Alineación central y cambio de tamaño de fuente en un rango seleccionado de celdas

Veamos un ejemplo de un procedimiento VBA simple. Sub, cuya tarea es cambiar el formato del rango de celdas seleccionado. Las celdas se configuran en alineación central (tanto vertical como horizontalmente) y el tamaño de fuente se cambia al especificado por el usuario:

Sub Format_Centered_And_Sized (iFontSize opcional como entero = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

este procedimiento Sub realiza acciones pero no devuelve resultados.

Este ejemplo también utiliza un argumento opcional. iTamaño de fuente. Si el argumento iTamaño de fuente no pasó al procedimiento Sub, entonces su valor predeterminado se toma como 10. Sin embargo, si el argumento iTamaño de fuente pasó al procedimiento Sub, entonces el tamaño de fuente especificado por el usuario se establecerá en el rango de celdas seleccionado.

Procedimiento de VBA “Sub”: Ejemplo 2. Alineación central y aplicación de negrita a la fuente en un rango seleccionado de celdas

El siguiente procedimiento es similar al que acabamos de comentar, pero esta vez, en lugar de cambiar el tamaño, aplica un estilo de fuente en negrita al rango de celdas seleccionado. Este es un procedimiento de ejemplo. Sub, al que no se le pasan argumentos:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Llamar al procedimiento "Sub" en Excel VBA

Llamar al procedimiento VBA "Sub" desde otro procedimiento

Para llamar a un procedimiento VBA Sub de otro procedimiento de VBA, debe escribir la palabra clave Llamar, nombre del procedimiento Sub y luego entre paréntesis los argumentos del procedimiento. Esto se muestra en el siguiente ejemplo:

Sub main() Llamada Format_Centered_And_Sized(20) Fin Sub

Si el procedimiento Formato_centrado_y_tamaño tiene más de un argumento, deben estar separados por comas. Como esto:

Sub main() Llamada Format_Centered_And_Sized(arg1, arg2, ...) Fin Sub

Llamar al procedimiento VBA "Sub" desde una hoja de trabajo

Procedimiento Sub no se puede ingresar directamente en una celda de una hoja de cálculo de Excel, como se puede hacer con un procedimiento Función, porque el procedimiento Sub no devuelve un valor. Sin embargo, los procedimientos Sub, que no tienen argumentos y se declaran como Público(como se mostrará más adelante) estará disponible para los usuarios de la hoja de trabajo. Por lo tanto, si los procedimientos simples discutidos anteriormente Sub insertado en un módulo en el editor de Visual Basic, entonces el procedimiento Formato_centrado_y_negrita estará disponible para su uso en la hoja de cálculo de Excel y el procedimiento Formato_centrado_y_tamaño– no estará disponible porque tiene argumentos.

Aquí hay una forma sencilla de ejecutar (o ejecutar) el procedimiento. Sub, disponible en la hoja de trabajo:

  • Hacer clic Alt+F8(presione la tecla Alt. y, manteniéndolo presionado, presione la tecla F8).
  • En la lista de macros que aparece, seleccione la que desea ejecutar.
  • Hacer clic Ejecutar(Correr)

Para realizar el procedimiento Sub Rápida y fácilmente, puedes asignarle una combinación de teclas. Para hacer esto:

  • Hacer clic Alt+F8.
  • En la lista de macros que aparece, seleccione aquella a la que desea asignar un método abreviado de teclado.
  • Hacer clic Opciones(Opciones) e ingrese el método abreviado de teclado en el cuadro de diálogo que aparece.
  • Hacer clic DE ACUERDO y cerrar el cuadro de diálogo Macro(Macro).

Atención: Al asignar un método abreviado de teclado a una macro, asegúrese de que no se utilice como el estándar en Excel (por ejemplo, Ctrl+C). Si selecciona un método abreviado de teclado existente, se reasignará a la macro y, como resultado, el usuario puede activar la macro accidentalmente.

Alcance del procedimiento VBA

La parte 2 de este tutorial analizó el tema del alcance de las variables y constantes y el papel de las palabras clave. Público Y Privado. Estas palabras clave también se pueden utilizar en relación con los procedimientos de VBA:

Recuerde que si antes de declarar un procedimiento VBA Función o Sub no se inserta la palabra clave, entonces se establece la propiedad predeterminada para el procedimiento Público(es decir, estará disponible en todas partes en un proyecto VBA determinado). Esto es diferente de declarar variables, que por defecto son Privado.

Salida anticipada de los procedimientos VBA “Función” y “Sub”

Si necesita finalizar la ejecución de un procedimiento VBA Función o Sub, sin esperar a su final natural, entonces existen operadores para esto Función de salida Y Salir Sub. El uso de estos operadores se muestra a continuación utilizando un ejemplo de procedimiento simple. Función, que espera recibir un argumento positivo para realizar más operaciones. Si se pasa un valor no positivo al procedimiento, entonces no se podrán realizar más operaciones, por lo que se debe mostrar al usuario un mensaje de error y el procedimiento debe finalizar inmediatamente:

Función Monto_IVA(sVAT_Rate As Single) Como Monto_IVA único = 0 Si sVAT_Rate<= 0 Then MsgBox "Expected a Positive value of sVAT_Rate but Received " & sVAT_Rate Exit Function End If ... End Function

Tenga en cuenta que antes de completar el procedimiento FunciónImporte_IVA, se inserta una función VBA incorporada en el código cuadro de mensajes, que muestra al usuario una ventana emergente de advertencia.

Una función escrita en VBA es un código que realiza un cálculo y devuelve un valor (o una matriz de valores). Una vez que crea una función, puede usarla de tres maneras:

  1. Como fórmula en una hoja de trabajo, donde puede tomar argumentos y devolver valores.
  2. Como parte de tu rutina VBA. En un procedimiento Sub o dentro de otras funciones.
  3. En las reglas de formato condicional.

Aunque Excel ya contiene más de 450 funciones integradas, a veces también faltan. A veces, las funciones integradas no pueden hacer lo que usted desea. A veces, para lograr un resultado, es necesario crear una fórmula enorme y compleja que no sea comprensible para los demás. En este caso, puede crear una función personalizada que sea fácil de leer y usar.

Tenga en cuenta que las funciones definidas por el usuario creadas con VBA son generalmente significativamente más lentas que las funciones integradas. Por lo tanto, son más adecuados para situaciones en las que no se puede obtener el resultado utilizando funciones integradas o no hay muchos cálculos y la penalización en el rendimiento no es crítica.

No sólo usted, sino también sus colegas pueden utilizar las funciones integradas. Las funciones que escriba aparecerán junto con otras en el cuadro de diálogo Asistente de funciones. Puede que te sientas intimidado por el proceso de creación de funciones, pero me apresuro a asegurarte que es bastante sencillo.

¿Cuál es la diferencia entre un procedimiento (Sub) y una función (Función)?

La principal diferencia es que un procedimiento (sub) se utiliza para ejecutar un conjunto de comandos y no pretende, a diferencia de una función (función), devolver un valor (o una matriz de valores).

Para demostrarlo, demos un ejemplo. Por ejemplo, hay una serie de números del 1 al 100 y debes separar los pares de los impares.

Usando el (sub)procedimiento, puede, por ejemplo, recorrer las celdas y resaltar las impares usando un relleno. Y la función se puede usar en la columna adyacente y devolverá VERDADERO o FALSO dependiendo de si el valor es par o no. Aquellos. no podrá cambiar el color de relleno usando una función en la hoja de trabajo.

Crear una función simple definida por el usuario en VBA

Creemos una función personalizada simple en VBA y veamos cómo funciona.

A continuación se muestra el código de una función que deja solo números del texto, descartando los valores de letras.

Números de función (texto como cadena) Tan largo y tenue i Tan largo y tenue resultado como cadena Para i = 1 a Len(Texto) Si es numérico (Mid(Texto, i, 1)) Entonces resultado = resultado y Medio(Texto, i, 1) ) Números siguientes = CLng(resultado) Función final

Para que todo funcione para usted, debe pegar este código en el módulo del libro. Si no sabe cómo hacer esto, comience con el artículo.

Ahora veamos cómo funciona la función, intentemos usarla en una hoja:

Antes de analizar la función en sí, observemos 2 momentos agradables que surgieron después de su creación:

  • Estuvo disponible, como cualquier otra función integrada (le diremos cómo crear una función oculta más adelante).
  • Cuando ingresa el signo "=" y comienza a escribir el nombre de la función, Excel muestra todas las coincidencias y muestra no solo las funciones integradas, sino también las personalizadas.

Analicemos la función paso a paso.

Ahora profundicemos y veamos cómo se creó esta función. La función comienza con la línea.

Números de función (texto como cadena) siempre y cuando

Palabra Función habla del inicio de la función, seguido de su nombre, en nuestro caso Números.

  • El nombre de la función no puede contener espacios. Además, no puede llamar a una función si choca con el nombre de una referencia de celda. Por ejemplo, no puede nombrar la función ABC123 porque ese nombre también hace referencia a una celda de la hoja de cálculo de Excel.
  • No debes darle a tu función el mismo nombre que una función existente. Si hace esto, Excel dará preferencia a la función incorporada.
  • Puede utilizar el carácter de subrayado si desea separar palabras. Por ejemplo, Cantidad_en palabras es un nombre válido.

Después del nombre, los argumentos de la función se describen entre paréntesis. Similar a las funciones integradas de Excel. En nuestro caso, el único argumento utilizado es Texto. Después del nombre del argumento indicamos Como cadena, esto significa que nuestro argumento es un valor de texto o una referencia a una celda que contiene un valor de texto. Si no especifica un tipo de datos, VBA lo tratará como Variante(lo que significa que puede utilizar cualquier tipo de datos, VBA lo resolverá por usted).

Última parte de la primera línea. Mientras tanto especifica el tipo de datos que devuelve la función. En nuestro caso, la función devolverá valores enteros. Esto tampoco es necesario.

La segunda y tercera líneas de la función declaran variables internas adicionales que usaremos.

Dim i Tan largo Resultado tenue como cadena

Variable i Lo usaremos para enumerar caracteres. una variable resultado para almacenar el resultado intermedio de una función.

La tarea de la función es revisar todos los caracteres de la variable Texto y guardar solo aquellos que son números. Por tanto, iniciaremos el bucle desde el 1 hasta el último carácter.

Para i = 1 a Len (Texto)

Len es una función que determina el número de caracteres.

La línea principal de la función comprueba si el siguiente carácter del texto es un número y, de ser así, lo almacena en la variable de resultado.

Si esNumeric(Mid(Texto, i, 1)) Entonces resultado = resultado y Medio(Texto, i, 1)

Para esto necesitamos una función es numérico- ella regresa Verdadero si el texto es un número y FALSO de lo contrario.

Función Medio toma del argumento Texto iº carácter (es decir 1 , indica que la función Medio toma solo 1 carácter)/

Función Próximo- cierra el ciclo Para todo está claro aquí.

Números = CLng(resultado)

Con esta línea convertimos la variable de texto resultado, que contiene todos los dígitos del argumento. Texto, a un valor numérico. Y decimos qué resultado debería generar nuestra función. Números.

La última línea de código es Función final. Esta es una línea de código requerida que le dice a VBA que el código de la función termina aquí.

El código anterior describe las distintas partes de una función típica definida por el usuario creada en VBA. En artículos futuros, veremos estos elementos con más detalle, así como también veremos diferentes formas de realizar una función de VBA en Excel.

6.1. Objetos, métodos, propiedades.

Visual Basic le permite crear productos de software que pueden automatizar suficientemente la solución de tareas específicas del usuario.

VBA es un entorno orientado a objetos que contiene un gran conjunto de objetos, cada uno de los cuales tiene muchas propiedades y métodos. Los objetos y herramientas pertenecen a una clase específica (por ejemplo, la clase TextBox).

Las propiedades y los métodos también son miembros de una clase. Las propiedades describen el aspecto de un objeto, incluida información sobre técnicas de formato de texto, color y tamaño de fuente. Los métodos son procedimientos que se pueden ejecutar en un objeto (procedimientos para crear y eliminar un objeto, procedimientos de eventos que determinan cómo el objeto interactúa con el usuario, etc.).

Objetos (análogos a un sustantivo)

Se considera objeto cualquier elemento de la aplicación: celda, hoja, libro de trabajo, gráfico. De hecho, el objeto es la propia aplicación de Excel. Los objetos pueden incluir áreas de celda, marcos de celda, ventanas, secuencias de comandos, estilos, etc. Cada clase de objetos tiene su propio conjunto de propiedades, funciones y eventos.

Métodos (análogos a un verbo)

Un método es una acción que se puede realizar sobre un objeto. Los métodos se implementan ejecutando un procedimiento que es miembro de una clase de objeto.

Sintaxis de llamada: Objeto.Método: indique el nombre del objeto que llama al método y el nombre del método en sí, separados por un punto.

Ejemplo: Patada.de.bola o Golpe.de.bola; Agua.Bebida

La combinación de dos puntos y el código de signo igual siempre indica un parámetro del método, es decir, cómo se realiza la acción.

Los métodos pueden tener muchos parámetros, algunos necesarios y otros no.

Ejemplo 1: proteger la hoja Hoja1 de cambios (método Proteger)

Hojas(“Hoja1”).Proteger

Ejemplo 2: agregar una nueva hoja de trabajo

Hoja de trabajo.Agregar antes:=Hojas de trabajo(1)

Propiedad (análoga a un adjetivo)

Una propiedad es un atributo de un objeto que describe cómo se ve el objeto (su color, tamaño y ubicación) y cómo actúa (si es visible o se refiere a otro objeto). Cuando se crea un objeto, se realiza un procedimiento para crear una instancia de ese objeto.

Para asignar un nuevo valor a una propiedad, es necesario crear un operador de asignación en el que el nombre y la propiedad del objeto (separados por un punto) se indicarán a la izquierda del signo igual y el nuevo valor a la derecha.

Sintaxis de llamada: Objeto.Propiedad

La propiedad siempre está presente en el lado izquierdo o derecho de las expresiones que implican asignación de valor. No hay dos puntos antes del signo igual.

Ejemplo 1: cambiar el nombre de Hoja1 a Cuentas:

Hojas(“Hoja1”).Nombre =”Cuentas”

Un evento es una interacción del usuario con un objeto específico en una hoja de trabajo. Cada clase de objetos tiene su propio grupo de eventos a los que reaccionan los objetos de esta clase.

Argumentos

Los argumentos se utilizan para proporcionar a los métodos los valores que necesitan para realizar las tareas para las que están programados. La tarea se completa correctamente solo si cada elemento tiene el tipo especificado para el método dado. Se pueden pasar como argumentos números, texto y valores booleanos (verdadero y falso).

Hay dos formas de pasar argumentos a un método:

─ interno, en el que los argumentos deben especificarse en un orden determinado;

Ejemplo: ActiveCell.BorderAround LineStyle. Peso. Índice de colores. Color

La acción del método BorderAround del objeto Range establece nuevos atributos de borde alrededor del área especificada. Al usarlo, debe especificar argumentos para determinar el estilo, el grosor y el color de la línea. Además, la propiedad ColorIndex le permite definir un color usando un número y la propiedad Color usando una constante de VisualBasic.

─ externo, en el que la secuencia de argumentos es arbitraria.

Ejemplo: Rango(“A1:C7”). Índice de color del borde alrededor:=3, Peso:=xlGrueso

Tipo de argumento:

– argumentos requeridos (para editar parámetros ET)

– argumentos opcionales (Para editar objetos (cambiar color, tamaño, marco))

6.2. Estructura utilizada en VBA

En el nivel superior de la jerarquía está la aplicación, seguida de los proyectos asociados con los documentos reales de esa aplicación. El tercer nivel contiene módulos (módulos de aplicación, módulos de usuario, módulos de clase, módulos de formulario y módulos de enlace), y el último nivel contiene sus procedimientos y funciones.

La jerarquía utilizada en VBA se muestra en la Fig. 6.1.

Arroz. 6.1. Jerarquía utilizada en VBA

Módulo- esto es parte del programa, diseñado de tal forma que permita su transmisión independiente. El módulo consta de dos secciones: una sección de Declaración y una sección de Procedimientos y Funciones. La primera sección describe variables globales, tipos definidos por el usuario y tipos enumerados, mientras que la segunda describe procedimientos y funciones.

Procedimiento Se denomina fragmento de código (estructura de programa mínima semánticamente completa) concluido entre los operadores Sub y End Sub.

Sintaxis de definición de procedimiento:

Subprocedimiento_nombre(argumento_1, argumento_2,_, argumento_n)

Declaración VBA

Declaración VBA

Declaración VBA

Privado: establece el alcance del procedimiento, el módulo en el que se describe. Sólo puede ser llamado por procedimientos del mismo módulo.

Público: el procedimiento pasa a estar disponible para todos los módulos (configurado de forma predeterminada)

Amigo: el procedimiento es visible sólo en el proyecto donde se describe la clase a la que pertenece.

VBA también utiliza procedimientos sin parámetros que pueden actuar como macros de comandos y procedimientos de eventos.

En la figura. 6.2 presenta la interfaz VBA.

Arroz. 6.2. Interfaz VBA

6.3. Tipos de datos utilizados en VBA

6.3.1. variables

Variable es un área de memoria con nombre que se utiliza para almacenar datos mientras se ejecuta un procedimiento.

Para utilizar una variable, se debe describir (declarar).

La sintaxis del operador de declaración de variable es:

variable tenue

Dim – una palabra clave que indica que se está declarando una variable (dimensión – tamaño);

Variable – el nombre de la variable declarada;

Como – palabra clave utilizada al especificar el tipo de datos (como – cómo);

Tipo: tipo de datos para la variable declarada

Una declaración Dim puede describir varias variables, enumerándolas separadas por comas.

Dim i como byte, j como entero, k como entero

En la tabla 6.1. presenta los principales tipos de datos utilizados para establecer variables.

Tabla 6.1. Tipos de datos

tipo de datos

Valores variables

Booleano

Variables booleanas que toman uno de dos valores: Verdadero o Falso

Byte (entero corto sin signo)

un número entero del rango 0 a 255

Entero

números enteros del rango -32768 a 32767

Largo (largo entero)

números enteros del rango -2.147.483.648 a 2.147.483.647

Divisa

variables para cálculos monetarios con un número fijo de decimales; le permiten evitar la acumulación de errores al redondear

Fecha

variables para almacenar fecha y hora

Sencillo (punto flotante de precisión simple)

números con parte fraccionaria de -3.40282310 38 a -1.40129810 -45

para números negativos y de 1.40129810 -45 a 3.40282310 38 para números positivos

Doble (coma flotante de doble precisión)

números con parte fraccionaria de -1.7976931348623110 308 a -4.9406564584124710 -324

para números negativos y de 4.9406564584124710 -324 a 1.7976931348623110 308 para números positivos

Cadena (cadena de longitud variable)

variables para almacenar cadenas de caracteres de 0 a 64 KB de longitud

Variante (universal)

Ajuste automático a los datos.

Objeto

variables para almacenar referencias a objetos

Si la descripción de las variables no indica su tipo, se les asigna automáticamente Variante. Esto significa que en la celda correspondiente a esta variable se puede almacenar cualquier tipo de información (análogo al formato “General” en ET).

Ejemplo: Dim i, j como entero

Esto equivale a la siguiente notación: Dim i como variante, j como entero

Para grabar el mismo formato necesitas:

Dim i como entero, j como entero

Para utilizar determinadas variables en diferentes partes del programa, se utiliza el llamado alcance.

El alcance de la variable es un área de programas donde el nombre de la variable se considera válido (visible) y, por lo tanto, es posible acceder a su valor (Fig. 6.3).

Arroz. 6.3. Alcance variable de VBA

Hay tres niveles de visibilidad variable y cinco formas. sus anuncios.

Nivel 1 – Procedimiento (el alcance es el procedimiento en el que se declara la variable).

*** La declaración Dim declara una variable en cualquier parte de un procedimiento, pero siempre precede a las declaraciones que la usan. Una variable de este tipo sólo puede existir durante la ejecución del procedimiento, tras lo cual se pierde el valor de esta variable y se libera la memoria.

*** Estático (similar a Dim) – ¡pero! declara una variable estática. Una vez finalizado el procedimiento, la memoria no se libera y el valor no se pierde.

Nivel 2 – Módulo

*** el operador Privado declara una variable en la sección Declaración (fuera de los procedimientos del módulo)

*** el operador Dim (en este caso) es completamente similar al operador Privado

Nivel 3 - Solicitud

*** el operador Público declara una variable en la sección Declaración

6.3.2. Constantes

Se dividen en personalizados y empotrados.

Constantes de usuario requieren anuncio. Para hacer esto, use un operador de la forma:

Constante constante = valor

Const es una palabra clave que indica que se está declarando una constante;

Como: la palabra clave con la que comienza la especificación del tipo de datos;

Constante – el nombre de la constante declarada;

Tipo: tipo de datos para la constante;

Valor: el valor asignado a la constante.

Const pi como doble = 3,141592654

Const e como doble = 2,718281828

Mensaje constante = "Apagar"

Puedes declarar múltiples constantes separadas por comas:

Constante mínima = 0, máxima = 1000

Constantes incorporadas no requiere anuncio. Los nombres de constantes integradas comienzan con el prefijo vb, por ejemplo, vbFriday.

6.4. Usando ventanas estándar del sistema operativo Windows

VB tiene una gran cantidad de procedimientos integrados, que se diferencian de los procedimientos de usuario en que sus descripciones fueron programadas por desarrolladores de VBA.

Las funciones MsgBox y InputBox se utilizan para proporcionar entradas y salidas del usuario al código del programa, así como para crear cuadros de diálogo personalizados.

6.4.1. Función cuadro de mensajes

MsgBox (“mensaje”, [botones, título]): esta función muestra un cuadro de diálogo que contiene un mensaje de hasta 1024 caracteres de largo, en el que se puede incluir el valor de las variables mediante la operación de concatenación, así como botones (opcionales) para reaccionar a las visualizaciones de ventanas (de forma predeterminada, solo existe el botón Aceptar).

Al definir un cuadro de diálogo complejo utilizando la función MsgBox, se utilizan las siguientes constantes:

1) Para configurar la apariencia de la ventana de mensajes (Fig. 6.4):

vbCritical, vbQuestion, vbExclamation, vbInformation.

Arroz. 6.4. Aspecto de las ventanas

2) Para configurar botones en la ventana de mensajes:

vbOkCancel, vbAbortRetryIgnore, vbYesNOCancel, vbYesNO, vbRetryCancel.

3) Para configurar más acciones después de hacer clic en el botón correspondiente:

vbOk, vbCancel, vbAbort, vbRetry, vbIgnore, vbYes, vbNO.

Procedimiento de ejemplo 1:

Subejemplo privado_1()

y = MsgBox("Cerrar ventana", vbQuestion + vbYesNoCancel, "mensaje de Windows")

El código para el procedimiento 1 en VBA y el resultado de ejecutar el programa se muestran en la Fig. 6.5.

Arroz. 6.5. Procedimiento de ejemplo 1

Procedimiento de ejemplo 2:

Sub Hola()

y = MsgBox("Cerrar ventana", vbQuestion + vbYesNoCancel, "Mensaje de Windows")

Si y = vbYes Entonces MsgBox ("VVVVVVVVVVVVVVVVVVVVV") De lo contrario

Si y = vbNo Entonces ActiveCell = "Hola"

El código para el procedimiento 2 en VBA y el resultado de ejecutar el programa se muestran en la Fig. 6.6.

Arroz. 6.6. Procedimiento de ejemplo 2

6.4.2. Función de cuadro de entrada

InputBox (“mensaje”[, título] [, valor predeterminado] [, coordenada x] [, coordenada y]) es una función que se utiliza para ingresar valores variables en el programa. Esta función muestra un cuadro de diálogo que contiene un cuadro de entrada, botones Aceptar y Cancelar, un mensaje (solicitud de entrada) y (opcionalmente) un título de ventana, un valor de entrada predeterminado y las coordenadas horizontales y verticales de la ventana.

Entonces puedes ingresar un número con el comando:

a = InputBox("primer número")

Arroz. 6.7. Tipo de función InputBox

6.4.3. Uso conjunto de las funciones MsgBox y InputBox

En la práctica, las funciones MsgBox y InputBox se utilizan juntas para crear procedimientos. Además, además de ellos, se puede utilizar la declaración condicional If, que permite verificar las condiciones ingresadas por el usuario y generar un resultado en base a sus conclusiones.

El operador condicional If es un operador que permite especificar la ejecución de determinadas acciones en función de las condiciones especificadas. Los componentes principales para esto son:

1) si (si)

2) entonces (entonces)

3) más (de lo contrario)

Entonces la expresión - si a>1 entonces b= a+1 de lo contrario b=a-1 se verá así

Si a>1 entonces b= a+1 si no b=a-1.

Procedimiento de ejemplo 3:

La computadora debe multiplicar dos números y mostrar el resultado en una de las celdas de la tabla. Si su producto es mayor que 2000, entonces la computadora debería emitir un mensaje adicional "El valor recibido es mayor que 2000".

Sub ejemplo_2()

Atenuar a, b, y mientras

a = InputBox("primer número")

b = InputBox("segundo número")

si< 2000 Then Range("A4") = y Else MsgBox ("Полученное значение больше 2000")

El código del procedimiento 3 en VBA y el resultado de ejecutar el programa con diferentes condiciones se presentan en la Fig. 6.8.



Arroz. 6.8. Procedimiento de ejemplo 3

Considere un programa que incluye una función MsgBox compleja y una declaración If.

Procedimiento de ejemplo 4:

Introduzca dos números arbitrarios. Luego se hace la pregunta: “¿Estás seguro de que quieres multiplicarlos?” y opciones de respuesta: “sí”, “no”. Si la respuesta es “sí”, entonces se multiplican los números y se muestra un mensaje con el resultado, en caso contrario no se realiza la acción.

Subejemplo()

Atenuar a, b, d como doble

a = InputBox("primer número")

b = InputBox("segundo número")

y = MsgBox("¿Estás seguro de que quieres multiplicarlos?", vbCritical + vbYesNo, "Pregunta")

Si y = vbSí Entonces d = a * b De lo contrario MsgBox ("Acción cancelada")

Si y = vbSí, entonces MsgBox (d)

El código del procedimiento 3 en VBA y el resultado de ejecutar el programa con diferentes condiciones se presentan en la Fig. 6.9.



Arroz. 6.9. Ejemplo de procedimiento 4

6.5. Construcciones de control de VBA

Las construcciones de control de un lenguaje de programación son instrucciones y grupos de instrucciones, cuyo uso le permite cambiar la secuencia de ejecución de otras instrucciones del programa según sea necesario. Estas estructuras se dividen en ramas y ciclos. La bifurcación es una estructura de control que le permite omitir ciertos grupos de instrucciones durante la ejecución según el valor de la condición. Un bucle es una estructura de control que representa la capacidad de ejecutar repetidamente grupos de instrucciones antes de que ocurra un evento.

6.5.1. Derivación

Si…entonces construcción

La construcción If...Then indica a VBA que tome la decisión más simple: si la condición que sigue a la declaración If es verdadera, debe ejecutar la siguiente declaración (o declaraciones); si la condición es falsa, debe ir a la línea ubicada inmediatamente después de la construcción condicional. Construcción de una línea:

Si condición Entonces declaración(es)

Cuando se utilizan varias declaraciones (bloque If):

Si condición entonces

operador

[operadores]

Ejemplo de una línea:

A ge = InputBox("ingrese su edad.", "Edad")

Si edad< 21 Then MsgBox "Вы не можете покупать алкогольные напитки.", "несовершеннолетний"

Arroz. 6.10 Ejemplo de construcción Si, entonces

Si…Entonces…De lo contrario construcción

Usando esta construcción, puedes elegir una dirección de actividad si la condición es verdadera y otra si es falsa. Por ejemplo, se puede utilizar para trabajar con ventanas que contienen dos botones.

Sintaxis de construcción:

Si condición entonces

operadores_1

operadores_2

Si la condición es verdadera, VBA ejecuta el primer grupo de declaraciones: declaraciones_1; si es falsa, pasa a la línea Else y luego ejecuta el segundo grupo de declaraciones: declaración_2.

S ub vozrast()

Edad = InputBox("ingrese su edad.", "Edad")

Si edad< 21 Then

MsgBox "No se pueden comprar bebidas alcohólicas.", "menor"

Vkus = InputBox("¿qué quieres comprar?", "Sabor")

Arroz. 6.11. Ejemplo de una construcción If Then Else

Si... Entonces... Si no... Si... Si no construcción

Con este diseño, puede elegir una de varias direcciones de acción. Puede utilizar cualquier número de líneas ElseIf dependiendo de la complejidad del programa.

Sintaxis de construcción:

Si condición_1 Entonces

operadores_1

De lo contrario, si condición_2, entonces

operadores_2

De lo contrario, si condición_3, entonces

operadores_3

operadores_4

Es recomendable utilizar esta construcción con un número de declaraciones ElseIf no superior a 5. En este caso, es mejor utilizar la construcción Select Case.

Seleccionar diseño de caja

En lugar de varias declaraciones ElseIf, puede utilizar la construcción Select Case para obtener una vista más condensada del programa.

Se recomienda utilizar esta construcción si la decisión que se debe tomar en el programa depende de una variable o de una expresión que tenga al menos tres o cuatro valores. Esta variable (o expresión) se denomina caso de prueba.

La expresión repetida se compara con las expresiones posteriores a Case. Si coinciden, se ejecuta la declaración correspondiente; de ​​lo contrario, se verifican otras expresiones. Si ninguna de las expresiones coincide, se ejecutan las declaraciones que siguen a Case Else.

Sintaxis de construcción:

Seleccione Caso iterable_expression

Expresión de caso_1

operadores_1

Expresión de caso_2

operadores_2

operadores

6.5.2. Ciclos

Hay tres tipos de bucles: con condición de control, con contador y bucles basados ​​en una estructura de datos.

En los bucles condicionales, una declaración o grupo de declaraciones se repite hasta que se cumple la condición. Estos bucles se denominan bucles Do.

Si se conoce de antemano el número de repeticiones del cuerpo del bucle, no es necesario comprobar la condición de control. Estos bucles se denominan bucles de enumeración repetidos. Los bucles de este tipo se dividen en dos grupos: bucles con contador y bucles basados ​​en una estructura de datos.

En bucles con contador, se utiliza una variable especial: encimera, cuyo valor aumenta o disminuye en una cantidad determinada con cada repetición del cuerpo del ciclo – paso del ciclo. El ciclo finaliza después de que el valor del contador alcanza (o excede) el valor final del contador del ciclo.

Sintaxis:

Para contador = valor_inicial Para valor_final Paso loop_step

<тело цикла>

Siguiente contador

Un ejemplo de cálculo de la suma de los valores contenidos en las celdas impares de la primera columna de la primera hoja (dentro de las primeras 10 celdas):

Atenuar I como número entero

S = 0

Para I = 1 a 10 Paso 2

S = S + Aplicación.Hojas de trabajo(1).Celdas(I, 1).Valor

Arroz. 6.12. Ejemplo de bucle 1

En los bucles de estructura de datos, el cuerpo del bucle se repite sucesivamente para todos los objetos homogéneos que forman una matriz o familia. En este caso, la variable de objeto actúa como contador.

Sintaxis:

Para cada elemento en data_structure

<тело цикла>

Siguiente elemento

Un ejemplo de visualización secuencial de ventanas de mensajes con los nombres de todas las hojas de trabajo del libro actual:

D Soy S como hoja de trabajo

Para cada S en la aplicación. Hojas de trabajo

Arroz. 6.13. Ejemplo de bucle 2

6.6. Usar controles para ejecutar una macro e ingresar datos

Para usar controles en una hoja de trabajo, necesita escribir código en VBA para cada elemento. Para hacer esto, primero debe cambiar al modo de diseño. Este modo también cambia las propiedades del objeto en la ventana Propiedades.

Para escribir el código de programa de un elemento de control, debe hacer doble clic en este elemento (Fig. 6.14 a) y automáticamente cambiará al modo VBA y generará "paréntesis de operador" teniendo en cuenta el evento del formulario de usuario (Fig. 6.14 b).

Arroz. 6.14. Soportes de operador de control de formación

Eventos de formulario de usuario

Un evento es una señal dada cuando algo le sucede a un objeto. Por ejemplo, un botón puede generar un evento en respuesta a un clic del mouse sobre él, una línea de entrada en respuesta a algo que se escribe, un clic del mouse sobre él, etc.

Arroz. 6.15 Eventos de formulario de usuario

Algunos tipos de eventos:

    Eventos del mouse- clic izquierdo simple (doble) en un objeto; presionando (soltando) el botón del mouse; moviendo el cursor del mouse sobre un elemento de control.

    Eventos de teclado- presionar un símbolo simple, teclas de función o alguna combinación de símbolos en el teclado.

    Eventos de formulario- cargar (Cargar), descargar (Descargar) formularios, etc.

El evento Click ocurre cuando el usuario presiona y suelta un botón del mouse mientras el puntero del mouse está sobre un objeto. El evento puede ocurrir cuando cambia el valor del control.

Formato del procedimiento del controlador de eventos

Subformulario privado_Click()

Subobjeto privado_Click()

donde objeto es el nombre del objeto al que hace referencia este controlador.

Ejemplo:

Subformulario privado_Click()

MsgBox “Clic”

Arroz. 6.17. Ejemplo de creación de un botón.

Escribir código de programa para EE

La programación de un control sigue los mismos principios que la programación de una macro.

Programación de botones:

Ejemplo 1: Escribiendo Hola después de presionar el botón:

Subbotón privado_Click()

MsgBox "Hola :)"

Arroz. 6.18. Ejemplo 1 de creación de un control

Ejemplo 2: Condiciones de verificación: recálculo de la tabla

Arroz. 6.19. tabla fuente

Crea un botón (Fig. 6.20)

Arroz. 6.20. Creando un botón para implementar el ejemplo 2

Al hacer doble clic accederá a la ventana de creación del procedimiento (Fig. 6.21):

Arroz. 6.21. Ventana de creación de procedimientos

Creemos el código:

Sub suma privada_Click()

Atenuar I como número entero

Para I = 2 a 8 Paso 1

N = Celdas(I, 2) * Celdas(I, 3)

S = S + Celdas(I, 4).Valor

Celdas(I + 2, 4) = S

Donde Celdas (I, 4) es el número de celda, donde I es la fila, 4 es la columna (D).

El código del ejemplo considerado en VBA y el resultado de ejecutar el programa con diferentes condiciones se presentan en la Fig. 6.22.




Arroz. 6.22. Implementación del ejemplo en cuestión.

6.7. Formularios personalizados creados en VBA

Los formularios personalizados son necesarios para crear una experiencia de usuario más eficiente.

Por ejemplo, en lugar de ingresar información personal directamente en una hoja de trabajo, puede crear un formulario personalizado que le solicite ingresar datos. o formulario para el programa de cálculo de datos.

Los formularios son objetos que pueden ser llamados por otros módulos de la aplicación.

Puede agregar métodos y propiedades personalizados a los formularios. Para crear un nuevo método en el formulario, debe agregar un procedimiento declarado con la palabra Público:

Método de subusuario público()

operadores

Estilos de interfaz:

1) documento único (SDI): puede abrir solo un documento y debe cerrar el documento activo para abrir otro;

2) documento múltiple (MDI): admite varios formularios dentro del formulario contenedor principal; tiene elementos en el menú Ventana para cambiar entre ventanas o documentos;

3) estilo explorador: una ventana que tiene dos paneles o áreas, que generalmente consisten en una presentación jerárquica de niveles de información a la izquierda y un área de visualización a la derecha.

Pasos de creación del formulario:

1. Los controles necesarios están colocados en el formulario y organizados de manera hermosa.

Resultado: tenemos un formulario con controles, pero las etiquetas que contienen son estándar: Comando1, Etiqueta1, etc.

2. Establecer las propiedades del formulario y los controles.

Resultado: el formulario tiene la apariencia deseada, todos los controles tienen inscripciones claras, las imágenes necesarias, etc. No se puede iniciar debido a la falta de código del programa.

3. Se escriben controladores de eventos para controles.

Resultado: ejecución de acciones de acuerdo con la tarea.

D
Para insertar un formulario de usuario, necesita Insertar – Formulario de usuario.

Si no tiene una ventana de propiedades, puede abrir una haciendo: Ver ventana de propiedades.

Arroz. 6.23. Interfaz de creación de formularios

Ejemplo 1: crear un formulario para calcular una función
que contiene:

    lugar para la salida (del programa) del resultado del cálculo;

    campo de texto para ingresar datos iniciales;

    para iniciar el programa y cancelarlo.

Después de especificar el tipo de formulario (Fig. 6.24), se debe especificar el código del programa.

Arroz. 6.24. Creando el formulario para el ejemplo 1

Al hacer doble clic en el botón "Calcular", el formulario pasará a la edición de código.

PAG Sub privado Calc_Click()

1: a = Cuadro de texto_a.Valor

2: b = Cuadro de texto_b.Valor

3: c = Cuadrado(a^2 + b^2)

4: Etiqueta1.Caption = "c = " & Str(c)

Sub privado Cancel_Click()

Arroz. 6.25. Ilustración de cómo funciona el formulario del ejemplo 1

El formulario de usuario se puede derivar de cualquier módulo. Para mostrarlo, utilice el método Mostrar. Nombre.Mostrar

Sub privado VSch_Click()

Arroz. 6.26. Usando el método Mostrar

Ejemplo 2. Crear un formulario para que el usuario ingrese variables y controle interruptores con suma y resta y muestre el resultado.


Arroz. 6.27. Creando el formulario y su código en VBA por ejemplo 2

Subcomando privadoButton1_Click()

Atenuar primero Mientras, segundo Mientras

primero = tb1.Valor

segundo = tb2.Valor

"Si se selecciona el primer botón, agregue las variables

Si ob1.Value = Verdadero Entonces

lab4.Caption = primero + segundo

"Si se selecciona el segundo botón, restar las variables

Si ob2.Value = Verdadero Entonces

lab4.Caption = primero - segundo


Arroz. 6.28. Ilustración de cómo funciona el formulario del ejemplo 2

Ejemplo 3: creación de un formulario para la entrada y salida del usuario en las filas de la tabla



Arroz. 6.29. Creando el formulario para el ejemplo 3

Sub privado CB_Cancel_Click()

Sub privado CB_ok_Click()

Atenuar la última fila mientras sea larga

Última fila = Hojas de trabajo ("Hoja3"). Rango ("A65536"). Fin (xlArriba). Fila + 1

Celdas (Última fila, 1). Valor = tb1. Valor

Celdas (Última fila, 2). Valor = tb2. Valor

Celdas (Última fila, 3). Valor = tb3. Valor


Arroz. 6.30. Ilustración de cómo funciona el formulario del ejemplo 3

Preguntas para el autocontrol

    ¿Qué es VBA?

    ¿Qué son los objetos, métodos y propiedades en VBA?

    ¿Describir la jerarquía en VBA?

    ¿Cuál es el procedimiento?

    ¿Qué es un control?

    ¿Describir la sintaxis de la variable?

    ¿Qué tipos de constantes se utilizan en VBA?

    ¿Para qué se utilizan las funciones MsgBox y InputBox?

    ¿Qué construcciones de control se utilizan en VBA?

    ¿Qué es un evento de formulario de usuario?

    ¿Qué es un formulario de usuario?

    ¿Qué estilos de interfaz se utilizan al crear un formulario de usuario?

Glosario

VBA (Visual Basic para Aplicaciones) es un lenguaje de programación de macros de alto nivel orientado a objetos integrado en todos los programas de Microsoft Office.

Macro (o macrocomando) es una secuencia de comandos y funciones escritas en un módulo VBA que le permite automatizar la ejecución de operaciones básicas.

Elemento de control: objetos colocados en hojas de trabajo y en cuadros de diálogo diseñados para mostrar, ingresar y calcular datos.

El modo de diseño pone a Excel en un modo que desactiva todos los controles de la hoja de cálculo.

Se considera objeto cualquier elemento de la aplicación: celda, hoja, libro de trabajo, gráfico. Los objetos pueden incluir áreas de celda, marcos de celda, ventanas, secuencias de comandos, estilos, etc. Cada clase de objetos tiene su propio conjunto de propiedades, funciones y eventos.

Un método es una acción que se puede realizar sobre un objeto.

Una propiedad es un atributo de un objeto que describe cómo se ve el objeto (su color, tamaño y ubicación) y cómo actúa (si es visible o se refiere a otro objeto).

Un evento es una interacción del usuario con un objeto específico en una hoja de trabajo.

Un módulo es parte de un programa diseñado de forma que permita su emisión independiente.

Un procedimiento es un fragmento de código (una estructura de programa mínima semánticamente completa) encerrado entre los operadores Sub y End Sub.

Una variable es un área de memoria con nombre que se utiliza para almacenar datos mientras se ejecuta un procedimiento.

El alcance de una variable es el área de programas donde el nombre de la variable se considera válido (visible) y, por tanto, es posible acceder a su valor.

MsgBox: esta función muestra un cuadro de diálogo que contiene un mensaje de hasta 1024 caracteres de largo, en el que se puede incluir el valor de las variables mediante la operación de concatenación, así como botones (opcionales) para reaccionar ante la visualización de la ventana (por defecto, sólo el botón OK).

InputBox es una función que se utiliza para ingresar valores variables en el programa.

El operador If es un operador que le permite especificar la ejecución de ciertas acciones dependiendo de condiciones específicas.

Las construcciones de control de un lenguaje de programación son instrucciones y grupos de instrucciones, cuyo uso le permite cambiar la secuencia de ejecución de otras instrucciones del programa según sea necesario.

La bifurcación es una estructura de control que le permite omitir ciertos grupos de instrucciones durante la ejecución según el valor de la condición.

Un bucle es una estructura de control que representa la capacidad de ejecutar repetidamente grupos de instrucciones antes de que ocurra un evento.

Un evento de control es una señal enviada cuando algo le sucede a un objeto.

7. Intercambio de datos en una hoja de cálculo




Arriba