Fig C.1d opciones Editor de Visual Basic
Asegúrese de que se han seleccionado todas las opciones en el grupo 'Configuración de Código' (marcados) como se muestra en la figura.
C.2 continuación de línea y Comentarios continuación de línea
Cada instrucción de programa en una macro puede escribirse en una sola línea continua. Sin embargo, a veces una sola instrucción puede ser demasiado y la línea completa puede no caber en el ancho de la ventana en nuestra pantalla. Esto afecta a la legibilidad. En tales casos es posible que queramos romper una sola línea de código a la siguiente línea. Esto se hace usando el carácter de continuación de línea (_), un espacio seguido de un guión bajo. Por ejemplo, las siguientes dos líneas de código son equivalentes
YO) rng.Copy _
(ThisWorkbook.Worksheets ( “Invtemp”). Range ( “$ R $ 1”))
II) rng.Copy (ThisWorkbook.Worksheets ( “Invtemp”). Range ( “$ R $ 1”))
Aquí, RNG es un objeto Range. Vamos a cubrir objetos en las próximas secciones en el apéndice actual. El objeto Range es un grupo de células en una hoja de cálculo de Excel y se describe en detalle en el Apéndice B. detalles del objeto no son necesarios para entender el concepto de continuación de línea.
comentarios Los comentarios son líneas que no se ejecutan cuando corremos nuestros macros. Comentarios nos permiten dejar comentarios acerca de lo que hace una determinada pieza de código. De ahí que nos permiten proporcionar documentación sobre el código mezclado con el propio código. Esto ayuda de dos maneras
1. Pocos días o semanas en la línea si queremos realizar ningún cambio en el código, puede ser que se olvide de una gran cantidad de funcionalidad pero los comentarios nos ayudaría a recordar lo que hemos creado.
2. Si nuestro código es leído por otros programadores, comentarios ayudarían a entender nuestro código.
Aquí hay un ejemplo.
'// ** Copiar el contenido de RNG a la hoja de cálculo denominada InvTemp ** //' // ** con la esquina superior izquierda se encuentra en las células R1 ** //
rng.Copy (ThisWorkbook.Worksheets ( “InvTemp”). Range ( “$ R $ 1”))
Un comentario comienza con un ( '). Si un ( ') se produce en una línea después de un cierto código (en la misma línea), todos los caracteres después del apóstrofe se ignoran.
Al igual que en nuestro ejemplo, a veces es posible que queramos comentar varias líneas. En lugar de poner una ( ') en cada línea individual, podemos hacer de la siguiente manera 1. Escriba las líneas como de costumbre 2. Seleccionar todas las líneas a ser comentados, en la barra de herramientas, haga clic en el icono de “comentario de bloque”, como se muestra en la figura C.2.1a
Fig C.2.1a El símbolos de bloque Descomente Comentario Bloquear y en la barra de herramientas de edición.
Si el comentario o iconos Eliminar Bloque no son visibles, haga lo siguiente: 1. En el Editor de Visual Basic, haga clic en el menú 'Ver'. 2. Pase el puntero del ratón sobre la opción “Barras de herramientas” para abrir una pequeña sub-menú 3. Haga clic en la opción “Editar” para mostrar la barra de herramientas de edición. Esta barra de herramientas se pueden arrastrar y colocar al igual que una barra de herramientas normal de las ventanas. Debe contener los dos iconos requeridos. Los comentarios pueden ser utilizados para desactivar ciertas líneas de código. Por ejemplo, las líneas que necesitamos sólo durante el propósito de prueba o líneas que hemos mantenido como opciones para el código primario. Por ejemplo, no se ejecutará la segunda línea de código se muestra a continuación.
rng.Copy (ThisWorkbook.Worksheets ( “InvTemp”). Range ( “$ R $ 1”))
'rng.Copy (ThisWorkbook.Worksheets ( ‘Factura’). Range ( ‘$ A $ 1’))
Tipos de datos primitivos C.3, variables, expresiones y Declaración. En un programa de ordenador, tenemos que decirle a la computadora acerca de los elementos del mundo real que el programa se ocupan de la. A modo de ejemplo, supongamos que tenemos un programa que calcula los ingresos de ventas, tenemos la fórmula
Ingresos = unidades vendidas x Precio por unidad
El ordenador no entiende cosas como 'ingresos' o 'precio'. Sin embargo, lo hace entender cosas como números enteros, números decimales, letras individuales, cadena de letras y así sucesivamente.
En nuestro ejemplo, supongamos por ahora, que las unidades vendidas serían un número entero o 'Integer' como 5000 o 1000 libros batidora.
Los ingresos y los precios serían las cifras en dólares, números con fracciones. Éstos se llaman los números de punto flotante. Si cada producto vendido tiene un número de identificación de producto, lo más probable es que sea alguna forma de identificación alfanumérico. Por ejemplo, “CPU00010A590”. Se trata de una 'cadena'. Integer, Float y la cadena se denominan tipos de datos primitivos o nativas, las cosas que la computadora entiende.
Los siguientes son algunos puntos a tener en cuenta a la hora de escribir macros: Ø Cada representación de un elemento del mundo real que es procesada por nuestro programa / macro es
llamado a ' variable '. Ø Las variables se les asignan nombres para que el programa y el programador puede identificarlos. Ø Hay ciertas palabras llamadas 'palabras reservadas' o "palabras clave que se utilizan exclusivamente
para escribir las instrucciones del programa. Estos no deben ser utilizados como nombres de variables. Ø En realidad, una variable es un nombre dado a un espacio reservado en la memoria del ordenador.
Nuestra macro puede entonces almacenar valores en que los valores de espacio o de cambio que están ya almacenados. El acto de decirle al programa qué elemento del mundo real se corresponde con lo que el tipo de datos que se llama 'La declaración de' la variable. Esto se hace usando la palabra clave 'Dim'. La declaración de la variable indica al programa que reservar un poco de espacio en la memoria (RAM), donde se pueden almacenar diferentes valores para esa variable. Continuando con nuestro ejemplo, la declaración sería algo así
Dim UnitsSold como número entero
Aquí estamos diciendo,
“Hey macro, siempre que lo diga unitSold, usted debe pensar en él como un entero. En la memoria de la computadora, por favor crear espacio para un número entero más. Te diré cuál es el valor para poner allí en diferentes momentos en el programa “.
Puntos importantes sobre los tipos de datos primitivos: Ø Conceptualmente, los tipos de datos primitivos no pueden tener todos los subcomponentes. Son los básicos
bloques de construcción. Ø Cada tipo de datos sólo puede contener cierto rango de valores. Como valor máximo para un número
o el número máximo de caracteres de texto. Si se supera este límite podría causar errores. Afortunadamente, los tipos de datos tienen un límite lo suficientemente grande como para cubrir todos los propósitos prácticos.
expresiones:
En la discusión que sigue, vamos a utilizar 'expresión' el término en muchos lugares. Una expresión es una línea de código que consta de variables y operaciones sobre las variables. Por ejemplo, al principio de esta sección vimos la siguiente expresión Units_Sold x Price_per_Unit
Aquí 'Units_Sold' y 'Price_per_Unit' son variables y la operación es la de multiplicar las dos variables.
Las operaciones se realizan utilizando 'operadores'. Por ejemplo, la multiplicación se realiza utilizando (*) y no (x) como se muestra aquí. Vamos a discutir los operadores en detalle en una sección próxima.
Expresiones producen un resultado o valor. El resultado es de un tipo de datos particular. Este resultado se puede utilizar en las siguientes maneras
a. Colocar el resultado en otra variable. Por ejemplo, cuando escribimos Ingresos = Units_Sold x Price_per_Unit
Estamos colocando el resultado de la expresión (lado derecho) en la variable 'ingresos' en el lado izquierdo.
El acto de poner un valor en una variable se llama 'Asignación'. Es una operación y se realiza usando el operador de asignación (=). La variable en el lado izquierdo debe ser del tipo de datos apropiado. Por ejemplo, en nuestro caso, 'Units_Sold' lo más probable sea un número entero y 'price_ per_Unit' serían un número decimal (tipo de datos doble). El resultado de la multiplicación será un doble por lo que la variable "Ingresos debe ser declarado como un doble.
Se produce un error si el tipo de datos no es compatible o si el valor producido por la expresión está fuera del rango de la variable en el lado de la mano izquierda.
segundo. Colocar el resultado en una celda de una hoja de trabajo. Hojas de trabajo ( “Hoja 3”). Range ( “B2”). Value = _
Units_Sold * Price_per_Unit
Una expresión no tiene por qué limitarse a sólo dos variables. Podemos tener varias variables y operadores, así como constantes. La siguiente línea de código calcula una cantidad ajustada hipotético
adj_amount = (((Units_Sold * Price_per_Unit) - 13) / 100) + 50
Tenga en cuenta que cada vez que tenemos una larga expresión con varias variables y operadores debemos utilizar paréntesis o corchetes para que los resultados claros. Por ejemplo, en la expresión anterior, es evidente que
1. 'Units_Sold' debe multiplicarse con 'Price_per_Unit' 2. De resultado del paso 1 un valor fijo de 13 debería deducirse usando el operador de sustracción (-)
3. Resultado de la etapa 2 se debe dividir por 100 usando el operador de división (/)
4. Resultado del paso 3, debe añadirse a 50 utilizando el operador de suma (+) Podríamos haber escrito algo como: adj_amount = Units_Sold * Price_per_Unit - 13/100 + 50
Pero entonces el resultado no sería lo que pretendíamos.
Hay reglas matemáticas (precedencia llamada operador) integradas en lenguajes de programación que deciden el orden de las operaciones en ausencia de paréntesis. Sin embargo, excesiva dependencia de estas reglas tiene las siguientes desventajas: una) Tenemos que memorizar las reglas de precedencia.
segundo) Hace que el código sea difícil de entender si queremos cambiarlo pocos meses en la línea.
do) Si no tenemos cuidado, tal práctica puede producir resultados diferentes de lo que tenemos la intención de producir.
Para evitar todos estos inconvenientes, se aconseja hacer uso de tantos paréntesis, según sea necesario al escribir expresiones complejas. Ahora vamos a continuar con la exploración de los tipos de datos primitivos. Hay una amplia variedad de tipos de datos, pero, en el nivel básico, para trabajar con Excel, necesitamos los siguientes tipos de datos. 1. Boole: Se utiliza para mantener uno de los dos valores - Verdadero o Falso. La sintaxis de declaración de una variable booleana es la siguiente:
Dim bCompruebe As Boolean
Cada variable booleana ocupa 2 bytes en la memoria del ordenador. Podemos asignar un valor a una variable booleana como se muestra en la siguiente línea de código: bComprobación = TRUE
Una variable booleana también puede tener su valor de una expresión que se traduce en un valor verdadero o falso. En el siguiente código 'bCompruebe' obtendrá un valor TRUE si 'nº1' es mayor que 'nº2' de lo contrario obtendrá un valor de FALSO. Las variables 'number1' y 'number2' será tipos de datos numéricos como número entero o doble
bCompruebe = número1> number2
2. Fecha: Se utiliza para mantener los valores de fecha y hora. Rango de valores de fechas es de 1 a 31 de 100 Ene Dic 9999 y el rango de tiempo es 00:00:00 a 23:59:59. La sintaxis de declaración de una variable de fecha es la siguiente:
Dim dtstart Como Fecha
Cada variable de fecha ocupa 8 bytes en la memoria del ordenador. Las directrices sobre el uso de este tipo de datos y para la asignación de valores a los que se discuten en el capítulo 2, sección 2.3 y en el capítulo 8, sección 8.3. 3. Doble: Se utiliza para contener valores numéricos decimales. Rango de valores son los siguientes:
Para valores negativos -1,79 x 10 ^ 308--4,94 x 10 ^ -324 Para valores positivos
4,94 x 10 ^ -324-1,79 x 10 ^ 308
'X 10 ^ 308' significa multiplicamos con 10 seguido de 308 ceros 'x 10 ^ -324' significa que dividimos por 10 seguido de 324 ceros
La sintaxis de declaración de una variable doble es el siguiente:
Dim dblAmount Como Doble
Cada variable de doble ocupa 8 bytes en la memoria del ordenador. 4. Entero: Se utiliza para mantener números enteros o integrales. El rango de valores es -32768 a 32.767. La sintaxis para la declaración es:
nPices As Integer Dim
Cada variable entera ocupa 2 bytes en la memoria del ordenador. 5. Largo: También se llama Entero largo, este tipo de variable se utiliza para mantener muy grandes valores integrales. El rango de valores es -2,1 mil millones a 2,1 mil millones. La sintaxis para la declaración es:
lRows Dim As Long Cada variable a largo ocupa 8 bytes en la memoria del ordenador. El mejor uso de este tipo de datos es para la celebración de números de fila de una hoja de cálculo Excel ya que las nuevas versiones tienen más de un millón filas.
6. Cuerda: Se utiliza para mantener texto que tenga caracteres imprimibles alfanuméricos y otros. Estos pueden ser fijos o variables en longitud. Sin embargo, vamos a tratar sólo con cadenas de longitud variable, ya que son más útiles cuando la lectura de datos de archivos y hojas de trabajo. cadenas de longitud variable pueden contener hasta 2 mil millones de caracteres. El número de bytes ocupados en la memoria por una cadena es igual al número de caracteres de la cadena.
La sintaxis para la declaración es:
Dim como secuencia strFileName
7. Variante: Un tipo de datos variante puede contener valores de cualquiera de los otros tipos de datos. Debemos tener mucho cuidado al usar variantes, ya que puede suceder que un pedazo de código podría realizar una operación matemática en una variante, pero en otras partes de nuestro código que podría haber asignado una cadena alfanumérica a la variante.
La única vez que vamos a utilizar un tipo de datos Variant es cuando se lee una matriz (véase la sección C.7 y la sección 3.6 del capítulo 3) de valores directamente de las células en una hoja de trabajo. La sintaxis para la declaración es:
arrCellValues Dim As Variant
8. Objetos de aplicación específicos: Cuando tratamos de automatizar otras aplicaciones como Excel, Word y Powerpoint, tenemos que representar los puntos de dichas aplicaciones dentro de nuestra macro.
entonces tenemos que crear variables que representan esos artículos específicos. Tales artículos se denominan objetos de la aplicación respectiva. Vamos a discutir el concepto de objetos en detalle en la siguiente sección.
Tales objetos se utilizan para la conexión de lo que vemos en pantalla para el código de nuestra macro. Los siguientes son algunos ejemplos de declaración de objetos: Dim Wbk Como libro de trabajo Dim Dim wdDoc Como Word.Document ppFile Como Powerpoint.Presentation
Programación C.4 para el mundo real - objetos, métodos, propiedades
Cualquier elemento o entidad del mundo real que representamos en nuestro programa es demasiado compleja para ser representada por una única variable de los tipos de datos básicos como una cadena o un entero. elementos del mundo real requieren una combinación de variables para representar ellos y su comportamiento. Ejemplos de ello son
1. Un coche. Un coche tendría un nombre de modelo (Cadena), puede o no ser un 4-Wheel Drive (booleano), tendría una distancia entre ejes (doble),
2. Un libro de Excel. Un libro tendría un nombre (cadena), una ruta en la que se almacena (Cadena), el número de hojas que contiene (entero largo). Tales elementos complejos cuando se utilizan como variables dentro de una macro o programa son llamados 'objetos'.
Junto con los elementos de los tipos de datos primitivos, los objetos también pueden contener otros objetos. Esos objetos pueden contener todavía otros objetos. Por ejemplo,
1. Cada coche puede tener 4 objetos 'rueda'. Cada rueda puede tener un diámetro (doble), un patrón de banda de rodadura (representado por cadena). Anchura (Doble)
2. Cada libro de Excel puede contener una o más hojas de cálculo. Cada hoja de trabajo tendría un nombre. También tendría una colección de células y también grupos de células llamadas rangos. Las células y los rangos individuales son objetos contenidos dentro de un objeto de hoja que está contenida dentro de un objeto de libro.
Además, dentro de un objeto, son procedimientos especiales disponibles (bloques de código o instrucciones) del programa llamado 'Métodos' que nos permiten modificar los datos contenidos en el objeto. Los datos contenidos dentro de un objeto, en forma de tipos de datos primitivos u otros objetos, son llamados 'Propiedades' del objeto. Vamos a explorar estos conceptos en un mayor detalle v propiedades
Las diferentes piezas de datos, así como los otros objetos contenidos dentro de un objeto principal se denominan las “Propiedades” del objeto principal. Las propiedades se pueden acceder usando sus respectivos nombres y la (.) Operador de punto. Por ejemplo, si 'wbk' es una variable libro su nombre se puede acceder y capturado en una variable de cadena, así: strwbname Dim como secuencia
strwbname = wbk.Name
El operador de punto se puede aplicar en forma consecutiva en la misma línea de código para recuperar propiedades de los objetos dentro de los objetos. Por ejemplo, la propiedad “Hojas de trabajo” de un libro nos da las hojas de trabajo objeto (un objeto de colección que describiremos en la siguiente sección), que es un conjunto de todas las hojas contenidas dentro de un libro. Esta
objeto tiene una propiedad “Count” que nos da el número total de hojas de trabajo contenida. El “Count” la propiedad es un entero largo y se puede acceder de la siguiente manera: wbk.Worksheets.Count
v métodos Los objetos contienen construidas en 'función' y procedimientos 'sub', que nos permiten operar sobre las propiedades del objeto. Vamos a describir los procedimientos de función y de sub en detalle en la sección C.6 “Agrupaciones código”. Por ahora, tenga en cuenta que el objeto “Hojas de trabajo” tiene un método llamado “Añadir” que crea una nueva “Hoja de trabajo” en el libro de trabajo relacionada. Para agregar una nueva hoja de cálculo, el código será:
wbk.Worksheets.Add v Eventos
Los eventos son tipos especiales de los procedimientos secundarios dentro de un objeto que se ejecutan cuando el usuario o el sistema operativo o la aplicación en sí toma una medida que implica ese objeto. Cuando el submarino comienza a ejecutar se dice que el evento se activa o que se ha producido el evento. Los eventos son útiles para capturar las interacciones del usuario. Ejemplos de eventos son: una) El “clic” evento que se desencadena cuando un usuario hace clic en un botón en un formulario.
segundo) El evento “Open” que se desencadena cuando un libro se abre de forma manual por el usuario o por medio de un macro.
La creación de eventos para los objetos requiere conocimientos avanzados de programación. Sólo utilizaremos los eventos que se construyen en los objetos en Excel y otras aplicaciones.
C.4.1 La declaración y configuración de objetos Cuando declaramos una variable de tipo de datos primitivo que de inmediato obtenemos una posición de memoria para trabajar. Este no es el caso con los objetos.
Cuando declaramos una variable de objeto del objeto real no se crea en la memoria. En lugar de una ubicación se crea que sostendría una referencia a un objeto real. Esta referencia es en realidad como un entero largo pero no tiene que preocuparse por su tipo de datos real. Una vez que declaramos una variable de objeto (que en realidad es una referencia a un objeto real) necesitamos vincular la referencia de objeto al objeto real.
El acto de vincular un objeto real a una referencia se denomina “ajuste” una referencia. Se lleva a cabo mediante el “Ajuste” comunicado. Establecer una referencia a veces también se llama 'creación de instancias' del objeto. Vamos a utilizar 'entorno' los términos, 'instanciar' y 'inicialización' indistintamente todo el tiempo lo que significa que nos estamos conectando una variable de objeto a un objeto real. Una vez que tenemos una referencia, hay dos posibilidades, vamos a ver uno por uno.
1. El objeto real puede estar ya en la memoria del ordenador
Por ejemplo, cuando se abre un libro manualmente el libro y todas las hojas que se crean en la memoria de los ordenadores. Si queremos una macro para trabajar con ese libro
o cualquiera de los objetos contenidos en el mismo, sólo tenemos una referencia a la posición de memoria donde se almacenan los objetos. No necesitamos para crearlos de nuevo.
Las siguientes líneas de código declaran primero una variable objeto de hoja y luego otra vez en la primera hoja de cálculo del libro vinculado a wbk variable de Dim semanas como hoja de trabajo
Set WKS = wbk.worksheets (1)
Veremos más acerca de este enfoque en los capítulos en los que vemos las técnicas de creación de macros.
2. Un nuevo objeto tendría que ser creado
Este escenario se puede manejar con dos enfoques dependiendo del tipo de objeto que nos ocupa. v Crear un objeto con una declaración de Visual Basic
Aquí es donde se utiliza la palabra clave 'New'.
He aquí un ejemplo con PowerPoint. El objeto 'Aplicación' es el objeto principal que contiene todos los demás objetos necesarios para la automatización de PowerPoint. Veremos los detalles en el capítulo 16 “Trabajar con MS Powerpoint”. pptapp tenue Como PowerPoint.Application
Establecer pptapp = Nueva PowerPoint.Application
Esto mismo se puede hacer en el momento de la declaración también. La siguiente línea de código muestra cómo
pptapp Dim como nuevo PowerPoint.Application
1. Este enfoque se utiliza principalmente para crear los objetos de alto nivel necesarios para la automatización de otra aplicación. En nuestro ejemplo, automatizando la aplicación MS PowerPoint. 2. Tenemos que hacer alguna configuración en el Editor de Visual Basic con el fin de utilizar este enfoque. Vamos a cubrir los detalles en otros capítulos cuando vemos técnicas para la automatización de aplicaciones específicas. v Use métodos y propiedades de un objeto contenedor
La mayor parte de los objetos que usamos en nuestros macros son 'contenida' en un objeto de alto nivel. Por ejemplo, en caso de Excel, hay un nivel de objeto “Aplicación” parte superior. Tiene una propiedad llamada “libros”, que es una colección de todos los libros que están abiertos en un momento dado. 1. Cargando un objeto desde el disco.
A menudo, los objetos se almacenan como archivos en el disco del ordenador. Podemos cargar el objeto en la macro al abrir el archivo en nuestra macro. Podemos utilizar el método “abierto” de la colección de libros de trabajo. Aquí está el código
Dim Wbk Como libro de trabajo
Establecer wbk = Workbooks.Open ( “C: \ Reports \ Book1.xlsx”)
2. La creación de un nuevo objeto
La colección de libros proporciona otro método, llamado “Añadir”, que nos permite crear un nuevo libro en blanco. Aquí está el código para hacer esto Dim Wbk Como libro de trabajo
Establecer wbk = Workbooks.Add
C.4.2 La liberación de objetos Una vez que hemos terminado de trabajar con un objeto y no queremos que nuestra variable de referencia a estar vinculado a ella, podemos desactivar la variable de referencia estableciéndolo en 'nada'. Establecer wbk = nada
La palabra clave 'Nada' representa una variable de objeto (referencia) que no se refiere a cualquier obect real.
Hay un uso importante de esta palabra clave. Para comprobar si se inicializa un objeto (el término técnico es instanciado) o no, compararlo con 'Nada' esta es una buena práctica para evitar errores en el programa.
Si (obj ninguno) a continuación
'// ** ... código para tomar la acción apropiada ** // End If
Veremos uso específico de dicho código en varios capítulos de este libro.
Los operadores C.5 Vamos a discutir acerca de los operadores sin ahondar demasiado profundamente en los detalles técnicos que cubren sólo lo suficiente para permitirnos escribir macros. Un operador:
1. Es una instrucción de programación
2. Se suele representar por un solo símbolo texto (algunos operadores tienen hasta tres caracteres)
3. Funciona en dos variables o expresiones (del mismo tipo de datos). Vamos a llamar a estos argumentos. Una excepción es un operador lógico que funciona en un solo argumento. 4. Produce un resultado (no necesariamente de la misma tipo de datos como los argumentos) Dependiendo de la función de los operadores realizan se pueden clasificar en los siguientes tipos
UNA) Operadores aritméticos Estos se utilizan para realizar operaciones aritméticas. La mayoría de estos que hemos visto durante los estudios secundarios. Sintaxis para el uso de estos es el siguiente: Resultado = número1 number2
Los argumentos 'nº1' y 'nº2' son variables numéricas o expresiones. La siguiente tabla muestra el resultado producido por los distintos operadores. Operador
^
Resultado
número1 elevó al poder de number2
comentarios
número1 puede ser negativo sólo cuando number2 es un número entero
*
número1 multiplicado por number2
/
número1 dividido por number2
+
number1 añadido a number2
-
number2 resta de número1
mod
El resto cuando el número 1 se divide en número2
error se produce si number2 es 0
Los números decimales se redondean a números enteros antes de dividir. El resultado es siempre un número entero
Para todos los operadores aritméticos si alguno de los argumentos es nulo, el resultado es NULL.
SEGUNDO) Operadores de comparación
Como su nombre indica, estos operadores como los usados para comparar argumentos numéricos. Sin embargo, el resultado es un valor booleano. Sintaxis para el uso de estos es el siguiente: Resultado = número1 number2
Los argumentos 'nº1' y 'nº2' son variables numéricas o expresiones. La siguiente tabla muestra el resultado producido por los diferentes operadores Operador
Devuelve True si
Devuelve false si
<( Menos que)
number1 = number2
<= ( Menos que o igual a)
number1 <= nº2 nº1> number2
>
number1> number2 number1 <= number2
(Mas grande que)
> = ( Mayor qué o igual a)
número1> = number2 number1
= ( Igual a)
número1 = nº2 nº1 <> number2
<> ( No igual a)
number1 <> number2 number1 = number2
Si alguno de los argumentos es nulo, el resultado es NULL. DO) Operadores logicos
Estos se utilizan para realizar operaciones lógicas. Los argumentos en este caso son de variables booleanas o expresiones. Sintaxis para utilizar estos operadores es el siguiente: Resultado = expresión 1 expresión2
Los argumentos 'expression1' y 'expression2' son variables lógicas (booleano) o expresiones. Ellos deben dar lugar a valores verdadero o falso. La siguiente tabla muestra el resultado producido por los diferentes operadores
Devuelve VERDADERO si el operador
Y
Sólo si ambos argumentos son ciertos
O
Al menos uno de los dos argumentos es verdadero
XOR
Sólo si uno argmentis verdadero y el otro es también
NO
El argumento es FALSO. NO toma un solo argumento y produce un valor opuesto boolean a la del argumento.
RE) operador de concatenación Este operador se utiliza para unir dos argumentos de cadena. Se denota por “&“. En el código que sigue, el resultado de variable contendrá la cadena “Hola Mundo” Resultado = “Hola” y “mundo”
Código C.6 Agrupaciones En esta sección vamos a discutir acerca de los módulos, sub-procedimientos y funciones. Estas son formas disponibles para nosotros para organizar el código de nuestra macro. De hecho, una macro o programa pueden ser considerados para ser una combinación de módulos, sub-procedimientos y funciones. Se proporcionan las siguientes ventajas:
1. Organizar el código de funcionalidad. Todo el código que se ocupa de traer y el envío de datos de nuestro archivo de Excel se puede colocar en un módulo separado. Todo el código que procesa los datos que se pueden colocar en otro módulo. En el módulo de entrada y salida *, el código que lee archivos de texto se puede colocar en un procedimiento sub el código que envía datos a un archivo de PowerPoint puede ser colocado en otro procedimiento sub.
La organización de código de esta manera nos ayuda a la hora de editar el código de cambios y corrección de errores.
2. Ejecución selectiva de código. Es posible que no quieren todo nuestro código se ejecute cada vez. Algunos código se ejecutaría sólo cuando se cumple alguna condición.
Por ejemplo, damos una opción para que el usuario guarde salida a MS PowerPoint o MS Word. Sobre la base de lo que el usuario selecciona podemos ir al sub-procedimiento pertinente para guardar la salida. En esta sección vamos a ver cómo podemos crear nuestros propios módulos y procedimientos. Sin embargo, los objetos de Visual Basic y VBA han construido en varios procedimientos que son muy útiles para la creación de soluciones. Estos se analizan en detalle en varios capítulos en todo el libro.
Módulos C.6.1 Los módulos son como los contenedores superiores de código. Contienen alguna declaración y funciones variables y procedimientos sub. Un módulo es básicamente una colección de funciones y procedimientos sub. Módulo puede contener declararion para variables que son compartidos entre funciones y procedimientos Sub en ese módulo.
No podemos escribir código directamente dentro de un módulo. Debemos crear en primer lugar una función o un procedimiento Sub que contendrá el código.
Crear y nombrar un módulo: Haga clic derecho en la ventana Explorador de proyectos y seleccione 'Insertar' en el menú emergente y seleccione 'módulo'.
Si no existe ningún otro módulo en el proyecto, a continuación, en primer lugar un directorio llamado 'módulos' se crea en el Explorador de proyectos. El nuevo módulo se añade en la carpeta de módulos. Para establecer el nombre del módulo, haga clic en y seleccione el módulo. En la ventana Propiedades, escriba el nuevo nombre en el espacio titulado “Nombre”.
Sub-C.6.2 procedimientos Un procedimiento Sub es un conjunto de código de programa o instrucciones que juntos lograr un solo propósito. El grupo de código se le da un nombre que puede ser utilizado para exeute el código escrito en el mismo. En el futuro vamos a utilizar el término 'Sub' en lugar de 'sub-procedimiento'. Un Sub se ha creado usando el 'Sub - End Sub' bloque de código como sigue:
Sub <nombre del procedimiento> (arglist)
'// ** ** instrucciones de código // Exit Sub
'// ** ** // instrucciones de código
End Sub
un bloque de este tipo de código se llama “definición” de un submarino. '' es un nombre de la Subcomisión y las reglas para nombrar son similares a la de las variables de nombres.
'Arglist' es una lista de parámetros que producirán resultados diferentes con las mismas líneas de código. Estos parámetros se denominan 'argumentos' de la Sub. Vamos a discutir 'arglist' en un detalle mucho mayor en un corto periodo de tiempo.
'Exit Sub' es una declaración que se detendrá la ejecución del sub y transferirá el control de la macro a un punto en el que se activó la Sub. Esta declaración es útil para evitar errores. La validez de los argumentos, así como los resultados intermedios producidos en la subregión se puede comprobar (por lo general en un bloque If-Then-Else que veremos en una sección posterior) y, en caso de problemas que puede salir de la Sub.
El nombre del sub junto con la lista de argumentos a menudo se llama la “firma” si el sub. Para la cuestión que sigue en cuenta Sub que nos permite poner valores en las celdas de una hoja de trabajo. Aquí está el código.
Sub put_in_sheet (ByVal strwksname como secuencia, _
ByVal nrow As Long, ByVal ncol As Integer, _ ByVal valorVar como variante)
Thisworkbook.Worksheets (strwksname) .Cells (nrow, ncol) .Value = _
valorVar strwksname = “cambio de nombre de la hoja” End Sub
Observa lo siguiente: una) El Subcomité toma 4 argumentos de diferentes tipos de datos
segundo) Valor de uno de los argumentos se cambia dentro de la Sub.
do) Cada argumento se especifica en el siguiente formato
ByVal <arg nombre> Como
re) Nombre de los argumentos sigue las mismas reglas que los de las variables
mi) Múltiples argumentos están separados por comas F) v Ejecución de código en un Sub
Hay tres formas de ejecutar el código en un Sub. Veamos uno por uno 1. Desde dentro de otro Sub El acto de pasar parámetros apropiados para una Sub y desencadenar la ejecución de su código se conoce como “Calling” una Sub. Esto se hace usando la palabra clave “Llamar” seguido de un espacio y el nombre del Sub refiere. A modo de ejemplo, vamos a crear un procedimiento Sub que va a utilizar la funcionalidad que ofrece nuestro procedimiento anterior. Aquí está el código:
stub_proc sub () Dim strSheetName como cadena strSheetName = “Hoja1” Debug.Print strSheetName Llamar put_in_sheet (strSheetName, 4,4, “hola mundo”) Debug.Print strSheetName End Sub
Notar la expresión “Llamar” que desencadena la Subcomisión que escribimos antes.
2. Manualmente desde la interfaz de Excel
Esta técnica funciona cuando el Sub trate no toma ningún argumento. En la cinta de Programador, haga clic en “Macros”. Esto nos lleva a un cuadro de diálogo que muestra una lista de todos los Subscreated en todos los libros abiertos. El cuadro de diálogo se muestra en la figura C.6.2a.
Fig. C.6.2a Lista de procedimientos Sub
Seleccione la Sub para ejecutar y haga clic en Ejecutar.
Cuando aparece por primera vez este cuadro de diálogo, se muestra una lista de todos los procedimientos Sub creados en todos los libros abiertos. Para mostrar las macros creadas sólo en un libro específico, haga clic en la flecha del menú desplegable etiquetado como “Macros en” (mostrado por 1 en la figura)
3. Manualmente desde la interfaz del Editor de Visual Basic
Esta técnica funciona cuando el Sub trate no toma ningún argumento. En primer lugar, en el VBE, abra la definición de la Subcomisión y haga clic en su interior. El cuadro procedimiento del módulo debe mostrar el nombre de la Sub.
Fig. C.6.2b Ejecución de un Sub manualmente en VBE
Haga clic en el menú “Ejecutar” y haga clic en “Ejecutar Sub”. Alternativamente, pulse F5 v Argumentos de una Sub Un procedimiento Sub puede tomar variables de entrada que pueden ser usados para controlar las acciones del procedimiento de sub. Por ejemplo, si el sub lee datos de un archivo de texto en Excel, a continuación, la entrada puede ser una cadena que tiene la ruta del archivo. De esta manera se puede utilizar el mismo procedimiento para leer los diferentes archivos que tienen el mismo formato. Por lo tanto la misma sub puede producir diferentes resultados en función de los parámetros que recibe.
Los parámetros mismos se denominan “argumentos” y el acto de la especificación de parámetros para un sub se llama “pasando los argumentos”. Argumentos actúan como variables con nombre en el código de la sub.
Ø Por valor En el sub 'put_in_sheet' que hemos creado en el principio de esta sección, el primer argumento en la definición es 'strwksname'. El nombre del argumento es precedido por la palabra “ByVal”. Este término indica que el argumento se pasa por valor. En el sub llamando ' stub_proc ' el nombre de una hoja de trabajo se llevó a cabo en una variable de cadena. Esta variable se pasa a 'put_in_sheet'. Ya que el argumento se pasa por valor, una nueva ubicación se crea en la memoria del ordenador para una variable de cadena. Se etiqueta como 'strwksname' y el valor contenido en 'strSheetName' ahora se copia allí. Así que ahora hay dos ubicaciones en la memoria que tienen el mismo valor.
Si se ejecuta el " stub_proc ', veremos que la cadena “Hoja1” se imprime dos veces. Esto se debe a que en el sub ' put_in_sheet ' el valor de la copia se actualiza y la cadena original permanece no afectado.
Ø Por referencia Otra manera de pasar un argumento a una sub es por referencia. En este caso, el nombre del argumento es precedido por la palabra “ByRef”. La definición de la sub con el primer argumento que se pasa por referencia se verá de la siguiente manera:
Sub put_in_sheet (ByRef strwksname como secuencia, _
ByVal nrow As Long, ByVal _ ncol As Integer, _ ByVal valorVar como variante)
'// ** código para la sub ** // End Sub
Nótese que en la misma sub podemos pasar algunos argumentos de valor y otros por referencia. El paso por referencia significa que creamos una nueva variable de referencia que apunta a la misma posición de memoria. No se crea ninguna nueva variable de cadena. Así que si una variable se pasa por referencia a cualquier sub, sub que es capaz de modificar la variable pasada. Veamos un ejemplo. Si ejecutamos nuestra 'Stub_proc' Ahora vamos a ver que “Hoja1” se imprime una vez y “ha cambiado el nombre de la hoja” se imprime al lado después de que el procedimiento se llama. Esto es porque ' put_in_sheet ' es capaz de cambiar la variable ' strwksname ' incluso si no se declara exclusivamente en esa sub. Es importante señalar que las variables de objeto y las variables de matriz siempre se debe pasar por referencia. Así que cada vez que se crea una Sub que lleva libros u hojas de cálculo o archivos de presentación y así sucesivamente como argumentos, tienen que ser BYREF. Ø argumentos y valores por defecto opcional
Muchos de los submarinos y funciones que están integradas en Visual Basic y Excel puede tener
argumentos que son opcionales. Veremos ejemplos en casi todos los capítulos. Al llamar a estos procedimientos, podemos elegir no especificar ningún valor para este tipo de argumentos. El uso incorrecto de argumentos opcionales puede dar lugar a efectos impredecibles por lo que no vamos a ahondar en la creación de nuestros propios submarinos / funciones con argumentos opcionales.
Sin embargo, debemos tener en cuenta que cada vez que un procedimiento utiliza argumento opcional, hay un valor por defecto asignado a ese argumento. En caso de que no se especifica un valor para ese argumento al llamar al procedimiento, se utiliza el valor por defecto. v Salida de un Sub antes de su finalización
UNA) Desde el interior de la macro basándose en las condiciones
Las declaraciones por escrito dentro de un sub se ejecutan en el orden en que están escritos. Sin embargo, hay una manera de detener la ejecución si alguna condición no deseada se desarrolla. esto se hace con la afirmación “Exit Sub”. Cualquier número de instrucciones Exit Sub puede ocurrir en un submarino, pero ello debe estar basado en algún tipo de control condicional.
Una vez que se ha detectado un “Exit Sub”, no se ejecuta ninguna declaración posterior. Además, debemos deshacer tantos cambios como sea posible antes de decidir para salir del sub antes de su finalización. En nuestra Sub podemos tener declaraciones de la siguiente
Si (nrow <1) o (ncol <1) A continuación,
MsgBox ( “Los números de fila o columna debe ser mayor que 0”) Exit Sub End If
La función ' MsgBox ' está construido en función de Visual Basic y se describe en detalle en el capítulo 8.
SEGUNDO) manualmente mediante ratón o el teclado
A veces podemos querer salir manualmente una macro en el medio de la ejecución. Ejemplos de tales condiciones son:
·
La macro deja de responder y simplemente cuelga ya sea porque un archivo para ser procesado es demasiado grande y no se puede abrir o que está esperando para conectarse a un servidor a través de una conexión lenta.
·
Un error en la lógica de programación ha causado un bucle infinito (ver sección C.9.2). 1. Para romper el programa VBA en ejecución, realice una de las siguientes: ·
En el menú “Ejecutar”, haga clic en “Break”.
·
Pulse las teclas Ctrl + Pausa en el teclado.
Si una tecla de interrupción no está disponible en el equipo de, tratar Ctrl + Pausa
2. Se muestra un cuadro de diálogo, y el programa se suspende.
Selecciona uno de los siguientes:
·
Continuar: Reanuda la ejecución del programa.
·
Fin: Termina el programa de VBA.
·
Depurar: Muestra la línea de código donde se produce el error en tiempo de ejecución.
·
Ayuda: Abre VBA Ayuda en línea.
Si el paso 1 no funciona, la única opción (en Windows) es ir al administrador de tareas, seleccione Excel en la ficha Aplicaciones y haga clic en “Finalizar tarea”. Los usuarios de Mac tendrían que encontrar una alternativa similar.
C.6.3 procedimiento Function Un procedimiento de función o función, es un conjunto de instrucciones similares a un sub. La diferencia es que una función tiene que devolver algo al procedimiento de llamada. Aquí está el código para la creación de una función:
get_from_sheet función (ByRef strwksname como secuencia, _ ByVal nrow As Long, ByVal ncol como número entero) como variante
'// ** ** // instrucciones de código de función Exit
'// ** ** // instrucciones de código get_from_sheet = _
Thisworkbook.Worksheets (strwksname) .Cells (nrow, ncol) .Value End Function
Los conceptos sobre los argumentos que hemos visto durante un procedimiento Sub aplican a un procedimiento Function también.
De especial importancia es la línea en la que tenemos el nombre de la función a la izquierda de un signo “=” y que se le ha asignado un valor. Esto significa que el valor de la derecha del signo = será devuelto de nuevo al procedimiento de llamada. Tal línea debe ser seguida inmediatamente por una “End Function” o una línea de “Salir la función”.
En el siguiente ejemplo tenemos un sub que llama a una función. Observe cómo puede aparecer la función en el lado derecho cuando se asigna valor a una variable. TestFunction sub () Dim varFromSheet como variante
varFromSheet = get_from_sheet ( “Sheet1” 2,5) End Sub
Nota IMPORTANTE:
Si la función devuelve un objeto, entonces la palabra “Set” se tiene que usar al regresar y assigining. Considere la función y sub muestra en el código a continuación:
Función MyFunction (ByVal SheetName como secuencia) como hoja de trabajo '// ** ** // instrucciones de código
Establecer MyFunction = ThisWorkbook.Worksheets (SheetName) función Fin
TestWks sub () Dim semanas como hoja de trabajo
'// ** ** instrucciones de código // Establecer semanas = MyFunction ( ‘Sheet1’) End Sub
C.6.4 Acciones Subs, las funciones y variables a través de módulos procedimientos de llamar a otro módulo Sub y Function procedimientos definidos en un módulo se pueden llamar desde cualquier otro módulo.
Supongamos que tenemos un módulo denominado 'modTxt' que tiene procedimientos para leer y procesar datos de archivos de texto. Tenemos otro módulo 'modMain' que contiene el código de procesamiento principal de nuestra macro. El siguiente código está escrito en un sub en 'modMain' que va a llamar a una
función en el módulo 'modTxt' y además debe pasar un argumento de cadena y recibir un valor entero devuelto por la función.
Note la sintaxis “ModuleName.ProcedureName” Sub ProcMain () `// ** ** // Otro código
mNumFiles = modTxt.ReadInputFiles (strFolderPath) End Sub
Compartir variables entre los procedimientos dentro de un módulo
A veces es posible que queramos compartir variables entre diferentes procedimientos dentro del mismo módulo. Estas variables se denominan ' las variables de nivel de módulo 'Y pueden declararse con la instrucción Dim, pero, deben ser declarados fuera de cualquier procedimiento Sub o Function. Ellos deben ser declarados por delante de cualquier prodecure.
Figura C.6.4 muestra cuatro variables declaradas en el nivel de módulo. También muestra una Sub y una función que utilizan estas variables. Cuando se utiliza esta técnica, tenemos que asegurarnos de que no nos declaramos cualquier variable con el mismo nombre que una variable de nivel de módulo dentro de un procedimiento. Las variables declaradas dentro de cualquier procedimiento se denominan Local variables para que el procedimiento Sub o Function. En la figura C.6.4, la Sub 'MainSub' tiene una variable local llamada 'nMultiplier'.
variables de nivel Fig C.6.4a Módulo
El punto a destacar es que las variables locales pierden sus valores y el espacio que ocupan en la memoria del ordenador se libera tan pronto como termine la sub / función. Es decir, si asignamos un valor a 'nMultiplier', ese valor se perderá cuando extremos 'MainSub'. La próxima vez que llamamos 'MainSub', una nueva variable llamada 'nMultiplier' se crea una y otra vez
un valor tiene que ser asignado a la misma.
las variables de nivel Fig C.6.4b Módulo conservan sus valores entre llamadas a funciones
La característica útil sobre las variables de nivel de módulo es que se crean cuando alguna de ejecución de macro comienza (recordemos que una macro es un conjunto de procedimientos Sub y Function) y que no pierdan sus valores, incluso si el control del programa pasa fuera del módulo en el que se declaran. Sus valores se pierden sólo cuando la ejecución de macro se detiene y el control del programa pasa a Excel y el usuario.
Supongamos que tenemos otro módulo llamado “Module2”, que contiene una sub que llama a los submarinos en el módulo 1. El módulo, su código y su salida se muestran en la figura C.6.4b. 'MainSub' asigna los valores, 'TestFunction' les añade, la salida se imprime por Sub 'test2'.
C.7 Muchos artículos del mismo tipo - Arrays y colecciones Muchas veces en un programa, que requieren un gran número de variables (u objetos) del mismo tipo con el fin de realizar el mismo tipo de operaciones en cada ellos. Por ejemplo, supongamos que estamos creando una lista de 50 estudiantes en una clase. Necesitamos 50 variables de cadena, pero, ¿hay que crear 50 cadenas? Tendremos que utilizar 50 diferentes nombres de variables y llamar a alguna función 50 veces. ¿Qué pasa si mañana un estudiante más se agrega? En cuántos lugares en nuestro código deberíamos hacer cambios?
¿Y si pudiéramos tener otro tipo de variable que podía contener las 50 cadenas y de la que podemos extraer una sola cadena como nuestro requisito? Podemos tener un solo nombre. En cuanto a llamar a las funciones o submarinos, podríamos pasar esta única variable como argumento, y la función podríamos sacar los nombres uno por uno y trabajar en ellos. Visual Basic proporciona dos tipos de variables que nos permiten trabajar con un conjunto más amplio de variables. Veamos uno por uno. v Las matrices
Una matriz es un conjunto de elementos ordenados secuencialmente que tienen el mismo tipo de datos primitivo. Cada elemento de una matriz tiene un número único índice de identificación. Los cambios realizados en un elemento de una matriz no afectan a los otros elementos.
Hay varias maneras de declarar y initialiazing matrices. Nos centraremos en dos enfoques principales que nos alivian de hacer el seguimiento del primer índice. Esto es útil si estamos aumentando el código escrito por otra persona.
Vamos a cubrir el caso básica aquí. Los otros enfoques han sido cubiertos en las principales secciones del libro. Una referencia se proporciona a la sección en cuestión.
Primer caso:
Este es el caso cuando sabemos el número total de elementos que queremos en nuestra matriz.
'// ** Matriz de 11 enteros largos, menor índice 0 ** // Dim arrLong_0 (0 a 10) As Long
'// ** arreglo de 10 enteros largos, índice inferior 1 ** // Dim arrLong_1 (1 a 10) como de largo
Los valores tienen que ser asignado individualmente a cada elemento de la siguiente
arrLong_1 (1) = 15
arrLong_1 (2) = 200
'// ** Requeriríamos 10 de estas líneas. ** //
En las instrucciones Dim, números entre paréntesis son la gama del “índice” matrices. Índice es la posición relativa de un elemento de la matriz. por lo que en la primera matriz, el primer elemento es arrLong_0 (0), el tercero está en arrLong_0 (3).
El menor valor del índice es llamado el “Límite inferior” de la matriz. El valor más grande se llama “Límite superior” de la matriz. Si el número de elementos es conocido junto con los valores individuales de los elementos que podemos utilizar la función de “) (Array”. Esta función se describe en detalle en la sección 8.1 “Funciones para Arrays.
Segundo caso:
El segundo caso es más importante para nosotros al escribir macros en Excel. En este caso no sabemos la longitud o el contenido de la matriz. La matriz se lee de una hoja de cálculo de Excel. Este método se describe en detalle en la sección 3.6 “Utilizar matrices VB con rango de hoja de cálculo” Ø Las dimensiones de una matriz:
Una cosa a tener en cuenta sobre las matrices que hemos creado hasta ahora es que son de una sola dimensión. Se pueden considerar como una variables de tipo de datos similar dispuestos en una fila. Esto se muestra en la figura C.7a
Una única matriz:
(58, 6, 76, 45, 89)
Una matriz de matrices ((45,2), (12,64), (78,63))
Fig C.7a matriz unidimensional de 5 números enteros
Fig C.7b bidimensional gama de 6 números enteros
Sin embargo, las matrices pueden ser de dos dimensiones. en ese caso, podemos pensar en ellos como variables dispuestas en una mesa como se muestra en la figura C.7b. Aunque este concepto no se requiere con frecuencia al escribir las macros de Excel, es útil saber que todo cuando tenemos la intención de crear matrices mediante la lectura de los valores de las celdas de una hoja de trabajo.
En tal caso, para acceder a un elemento único que requerimos índices de ambas dimensiones. Cada elemento es como una celda de una tabla. Tales matrices se denominan matrices bidimensionales y estas
puede ser declarado de la siguiente Dim arr2DLng (de 1 a 10, 1 a 20), siempre
El primer conjunto de indixes es para la primera dimensión o las filas de la tabla. El segundo conjunto (1 a 20) está en la segunda timension o las columnas de la tabla. podemos asignar un valor a un elemento particular de la siguiente manera
arr2DLng (2,5) = 200
A pesar de que ayuda a visualizar una matriz de 2 dimensiones como una tabla, en realidad es una matriz bidimensional 1- donde cada elemento es otra matriz 1-dimensional. Por lo tanto, si la matriz se muestra en la figura C.7b se llama 'arr2DTest', entonces, suponiendo que el primer índice es 1, '// ** será el array (45,2) ** // arr1D = arr2DTest (1) '// ** será el número entero (45) ** // arr1D (1)
v Colecciones Una colección es un tipo especial de objeto que puede contener un gran número de otros objetos todos los cuales son del mismo tipo. Algunos ejemplos son
1. La colección de todas las hojas de un libro de Excel - bien llamado la colección '' Hojas de trabajo.
2. El conjunto de todos los libros de Excel abiertos - llama la colección 'Cuadernos'. Dado que las colecciones son tipo especial de objetos que no va a crear cualquier colección de los nuestros. Sin embargo, vamos a trabajar con las colecciones que ya son proporcionados por las aplicaciones que estamos tratando de automatizar. Las colecciones de hojas y libros mencionados anteriormente están disponibles en Excel. Cada archivo de PowerPoint tiene una colección de diapositivas que vamos a utilizar al enviar datos de forma automática a PowerPoint.
Cada colección, independientemente de los objetos que contiene, siempre tiene una propiedad y un método fácilmente disponible. Vamos a ver lo que son Ø Contar propiedad: Esta propiedad devuelve un valor entero largo que representa el número total de artículos que se encuentran en la colección. La sintaxis para la recuperación de esta propiedad es
.Count
Ø Agregar método: Este método nos permite añadir un nuevo objeto a la colección. Su comportamiento difiere ligeramente en función de cómo se haya creado la colección. Vamos a tratar con este método cuando nos fijamos en las colecciones individuales. Los puntos más destacados sobre las colecciones:
a. Colecciones, siendo ellos mismos objetos, puede convertirse en propiedades de otros objetos. La colección Hojas de trabajo es una propiedad de un objeto de libro. segundo. Dentro de una colección, objetos se almacenan de una manera ordenada y se numeran. El primero
objeto está en la posición 1. Por ejemplo, el código siguiente muestra cómo acceder a la primera y quinta hojas de un libro fijar a la variable wbk.
y
wbk.Worksheets (1)
wbk.Worksheets (5)
do. Colecciones en MS Office nos permiten ajustar nombres de muchos de los objetos y estos pueden ser recuperados de sus respectivas colecciones utilizando sus nombres. Esta es una buena noticia, ya que no tenemos que recordar la ubicación específica de los objetos que nos interesan. Por ejemplo, una hoja de cálculo denominada “Hoja de datos” puede ser recuperada con la siguiente línea de código.
Wbk.Worksheets ( “DataSheet”)
v Pasar matrices a Subs y funciones Veamos ejemplos de código para pasar variables de matriz a Subs y funciones como argumentos. En primer lugar, consideremos la función 'arrFunTest1' como se muestra.
Función arrFunTest1 (ByVal strPrefix como secuencia, _ ByRef arrNums () As Integer) como secuencia
Dim dblSum Como Doble
dblSum = Application.WorksheetFunction.Sum (arrNums) Función arrFunTest2 = strPrefix y dblSum Fin
Note el segundo argumento. Los paréntesis vacíos después de que el nombre del argumento especifican que el arugment pasó será una matriz. No necesitamos saber la longitud o dimensiones de la matriz en caso de que se trata de una matriz unidimensional.
Este código también ilustra cómo las funciones disponibles en la hoja de cálculo se pueden utilizar dentro de las macros. La propiedad WorksheetFunction se discute en detalle un poco más en el apartado B.2.1
La siguiente sub llama a la función 'arrFunTest1' y pasa a una matriz de enteros como uno de los argumentos.
arrtest sub () arrvar Dim (1 a 4) como número entero Para i = 1 a 4 Paso 1
arrvar (i) = 2 * i Siguiente i
Debug.Print arrFunTest1 ( “Prueba de Arr pasada:“, arrInt) End Sub
Cuando creamos nuestras matrices mediante la lectura de los valores de un rango de hoja de cálculo de Excel, la matriz creada es siempre de 2 dimensiones y es de la variante tipo de datos. En tales casos, el arrFunTest2 función será más útil para nosotros. También se requiere este tipo de función cuando el argumento pasado es una matriz de dimensión múltiple incluso si el tipo de datos no es variante.
Función arrFunTest2 (ByVal strPrefix como secuencia, _ ByRef arrNums As Variant) como secuencia
Dim dblSum Como Doble
dblSum = Application.WorksheetFunction.Sum (arrNums) Función arrFunTest = strPrefix y dblSum Fin
La siguiente sub llama a la función 'arrFunTest2' y pasa a una matriz de variante como uno de los argumentos.
arrtest sub () Dim arrtest como variante arrtest = Array (1, 2, 3, 4, 5)
Debug.Print arrFunTest2 ( “Prueba de Arr pasada:“, arrvar) End Sub
v Colecciones de pasar a Subs y funciones Pasando a las colecciones de los procedimientos es bastante sencillo EXPECIALLY al escribir macros porque el tipo de objetos de la colección siempre se menciona explícitamente. Veamos un ejemplo. La siguiente sub toma una colección de hojas de trabajo e imprime sus nombres
PrintSheetNames sub (ByRef wksColl como hojas de cálculo) Dim semanas como hoja de trabajo para uno a semanas en wksColl
Debug.Print wks.Name
semanas Next End Sub
C.8 La elección de un camino a seguir - estructuras de decisión En varios puntos de nuestra macro, se requiere una decisión sobre qué hacer a continuación en base a ciertas condiciones que se desarrollan cuando se ejecuta la macro. La mayoría de las veces en las condiciones están determinadas por el valor de una o más variables. Por ejemplo:
1. Macro pide al usuario que seleccione un archivo. Si el usuario elige un archivo de Excel, hay que abrirlo con Excel. Pero, si se elige un archivo de texto, debemos utilizar otro método para trabajar en el archivo. Si no es ninguna de éstas, la macro debe mostrar un mensaje y sólo se detienen.
En este caso, la variable sería una cadena que contiene la extensión de archivo que se recupera de la ruta del archivo seleccionado.
2. Mientras que el registro pagos de los clientes uno a la vez, si el pago de cualquier cliente ha estado pendiente más allá de una fecha de vencimiento, debemos marcar la fila que tiene los datos del cliente en rojo y copiarlo en otra hoja.
En este caso la variable podría ser un número entero, el valor de la diferencia entre la fecha de vencimiento y la fecha actual para el cliente en cuestión sostiene. Las características de los lenguajes de programación que nos permiten construir la toma de decisiones en nuestro código se denominan colectivamente estructuras de decisión.
En esta sección se examinan los dos más importantes estructuras de decisión disponibles en cualquier lenguaje de programación.
C.8.1 Si-Then-Else La sintaxis de esta estructura de decisión es la siguiente: Si condición-1 Entonces
[ declaraciones] - Grupo 1 [ ElseIf condición-2 Entonces
[ elseifstatements] ... - Grupo 2 [ ElseIf condición-3 Entonces
[ elseifstatements] ... - Grupo 3 [ otra cosa [ elsestatements]] - Grupo 4
Terminara si
un grupo de este tipo de declaraciones se llama un 'bloque IF-'. Si empezamos con un 'Si', entonces debemos tener el juego 'End If' y 'Entonces'. Está bien si no hay 'ElseIf' o declaraciones 'Else'. Cada una de las 'condición' expresiones son expresiones de cadenas, booleanos o numéricos que cuando
elaborado, o 'evaluado', en ese punto en el programa, ya sea como resultado un valor verdadero o falso.
Un único 'condición' podría ser una combinación de múltiples expresiones (numéricas o de cadena) cada uno de los cuales evalúa individualmente a Verdadero o Falso y luego se combinan mediante operadores lógicos (AND, OR, NOT). Ilustramos esto en nuestro ejemplo de código. La ejecución de código sucede de la siguiente manera:
1. Si 'Condición-1' evalúa a 'True', el código entre la primera 'Entonces' hasta el siguiente 'elseif' es decir, el Grupo 1 se ejecuta. Todos los otros son ignorados.
2. Si 'Condición-1' evalúa a 'falso', pero 'Condición-2' evalúa a 'True', el código entre el segundo 'Entonces' hasta la próxima 'elseif' es decir el Grupo 2 se ejecuta y todos los demás son ignorados.
3. Si todas las condiciones se evalúan a 3 se ejecuta 'falso' el código en el Grupo 4.
4. Después de eso, nuestros macro funciona en el código inmediatamente siguientes 'End If'. Por lo general no se utilizan líneas de la 'ElseIf'. Y una típica 'Si' bloque por lo general sólo tiene el 'If- Then-Else-Endif' de la siguiente manera,
Si condición Entonces
'// ** Código que se ejecuta si la condición es verdadera ** // Else
'// ** Código a ser ejecutado de otra manera ** // End If
También es normal tener sólo el “Si-Si Fin” parte si la situación así lo exija Si condición Entonces '// Código que se ejecuta si la condición es verdadera End If
Ahora, recordar el ejemplo de los tipos de archivos mencionados al principio de esta sección. El código para trabajar con los archivos correspondientes se muestra a continuación. No se preocupe por el término 'TextStream' que se trata en detalle en la sección 14.3 “Lectura y escritura de archivos de texto”.
Dim como secuencia strFileExt
If ((strFileExt = “.xlsx”) O (strFileExt = “.xlsx”)) Entonces '// ** Uso de Excel para abrir este archivo ** //
ElseIf (strFileExt = “.txt”) Entonces '// ** abrir este archivo como una TextStream ** // Else
'// ** Mostrar un mensaje al usuario para seleccionar el archivo adecuado y luego se detiene. ** // MsgBox “Por favor seleccione un texto o un archivo de Excel” Exit Sub End If
Si estamos trabajando con un tipo de datos de objeto, tenemos que garantizar que el objeto se crea una instancia antes de que podamos trabajar con él. En ese caso, el siguiente constructor de SI viene muy bien (nótese el operador es la palabra clave y la Nada) Si obj No es nada Entonces '// ** Código que se ejecuta si la condición es verdadera ** // Terminara si
C.8.2 Select Case Esta es otra estructura de decisión que nos permite ejecutar código cuando una variable toma uno de los muchos valores posibles. Su sintaxis es la siguiente: Seleccione el caso testexpression
Caso expresión-1
Grupo 1... Caso expresión-2 Grupo 2 … Caso expresión-3 Grupo-3 ... Case Else Grupo demás
End Select
un grupo de este tipo de declaraciones se llama un 'Select-Case bloque'. los 'Testexpression' es cualquier expresión numérica o de cadena. No es una expresión lógica por lo que no se evalúa como Verdadero o Falso (programadores sazonados puede superar esta limitación, pero se adhieren a los métodos estándar.)
expresión-1,2,3, son otras expresiones del mismo tipo que el 'Testexpression'. Aquí es cómo funciona el código:
1. los 'Testexpression' se evalúa. 2. El resultado se compara con resultado de 'Expresión-1' después de su evaluación. Si los resultados coinciden, se ejecutan las instrucciones de Grupo-1. Y el control de programa se desplaza fuera del bloque Select-Case.
3. Si los resultados de 'Testexpression' no coinciden con la de 'Expresión-1' entonces, 'Expresión-2' se evalúa. Si los resultados coinciden, se ejecutan las instrucciones de Grupo-1. Y el control de programa se desplaza fuera del bloque Select-Case.
4. Si no se encuentra una coincidencia en cualquiera de las expresiones, a continuación, se ejecutan las instrucciones de grupo “Else”.
Ahora tenemos nuestro ejemplo refundición de tipos de archivos en forma de bloque Select-Case.
Seleccione CasestrFileExt
Caso “.Xlsx”, “.xls” '// ** Uso de Excel para abrir este archivo ** //
Caso ".TXT" '// ** abrir este archivo como una TextStream ** //
Case Else MsgBox “Por favor seleccione un texto o un archivo de Excel” Exit Sub End Select
C.9 Hacer algo una y otra vez - Loops A menudo tenemos que llevar a cabo el mismo conjunto de operaciones y otra vez con diferentes variables o entradas.
Un ejemplo sería, empezar en la fila número 2 en una hoja de trabajo. Compruebe la primera columna en cada fila, si el tercer personaje es el cambio 'X' a 'Y'. Compruebe todas las filas hasta el número de fila 500. Visual Basic proporciona el concepto de 'bucle' para lograr este propósito. Veamos los dos bucles principales disponibles en Visual Basic. Para un bucle, cada vez que el conjunto de operaciones se lleva a cabo, se dice que ha realizado una iteración del bucle.
C.9.1 Para Loop Un bucle “for” se utiliza cuando se sabe el número de iteraciones de antemano. La ejecución del bucle está controlado por una variable llamada un “contador” para los que tenemos que especificar un valor inicial y un valor final y el incremento (o decremento) para cada iteración. La sintaxis completa es la siguiente:
por contador = inicio A final [ Paso paso] [declaraciones]
[Salir Para] [declaraciones] Próximo [ mostrador]
El 'bucle For' es útil cuando los artículos que estamos trabajando son a su vez contados. Por ejemplo, los elementos de un array (en ese caso los valores de inicio y fin serían los límites inferior y superior de la matriz) o filas en una hoja de cálculo (podríamos ir desde la fila 1 a la fila
100). Para la salida: Esta declaración nos da una manera de detener la ejecución del bucle y saltar fuera de él antes de completar todas las iteraciones. Puede ser útil en condiciones en que no se sabe dónde entre nuestro valores inicial y final será servido a nuestro propósito. Así que probamos para una condición en cada iteración mediante un 'Si' bloque. Cuando se cumple esa condición, utilizamos “salida” en el interior del Si-bloque para salir del bucle.
Consideremos ahora algunos ejemplos. Para este ejemplo, vamos a utilizar algunos objetos en un libro de Excel. Vamos a explorar estos objetos en detalles en el capítulo de VBA. Sin embargo, para estos ejemplos considerar la siguiente lista
·
·
objeto '' Wks que representa una hoja de cálculo en un libro de Excel.
colección 'filas' que representa un conjunto de todas las filas de una hoja de trabajo. Una fila individual se obtiene utilizando el número de fila. Por ejemplo, el 5 º fila se obtiene con 'filas (5)'
·
colección 'células' de todas las celdas de una hoja de trabajo. Una fila individual se obtiene utilizando su número de fila y el número de columna. Por lo tanto, la celda C5, en 3 rd columna y 5 º fila, se obtiene con 'células (5,3)'
1. Este ejemplo va de la fila 2 a la fila 100 y pone el número de fila en la primera columna
de la fila.
Para rw = 2 Para 100 Paso 1
wks.Cells (rw, 1) = rw Siguiente rw
2. En este ejemplo se va hace lo mismo que el ejemplo anterior, excepto que va desde 100 a 2. Observe cómo el valor de 'Paso' es negativo. Para rw = 100 Para 2 Paso -1
wks.Cells (rw, 1) = rw Siguiente rw
3. En este ejemplo, cada fila que es un múltiplo de 5 tendrá frase “múltiple de 5” en el célula en colum A. Para r = 2 a 100 Paso 5 Si (r Mod 5) = 0 entonces
wks.Cells (r, 1) = “Multiple de 5” Endif Siguiente r
Observe el uso del operador Mod en el propio contador 4. Este ejemplo es el mismo que en el ejemplo 3 con una diferencia. Si en cualquier fila, la primera celda (en
columna A) contiene la palabra “Total”, no ir más lejos. El control de programa sale del bucle For.
Para r = 2 a 100 Etapa 1 Si (wks.Cells (r, 1) .Value =”Total”) entonces Para la salida Endif
Si (r Mod 5) = 0 entonces
wks.Cells (r, 1) = “Multiple de 5” Endif Siguiente r
Observe que el operador Mod se utiliza en la variable de contador (r) en sí para comprobar el valor que 'r' toma. Sin embargo, no vamos a modificar el valor de 'rw' de ninguna manera. Es fácil observar que podemos tener 'Salir Para' dentro de cualquier tipo de control realizado por el bloque If. Por ejemplo, en el bloque Si podemos comprobar si hay una referencia de objeto utilizando la palabra clave 'Nada'.
5. En este último ejemplo vemos cómo es práctico el 'bucle For' puede ser cuando hay que trabajar con cada elemento individual en una matriz. Supongamos que tenemos una matriz llamada 'miMatriz'. El elemento de la matriz en la posición 'i' es myArray (i). Podemos proceder de la siguiente manera:
Dim intStart, tienen la intención As Integer = intStart LBound (myArray) tienen la intención = UBound (myArray) Para r = intStartTointEndStep1
'// ** hacer algo con miMatriz (r) ** // Siguiente r
C.9.2 While El 'Mientras' bucle es otra estructura de bucle importante. A diferencia de la 'para' bucle que depende del valor de una variable de contador, el bucle 'while' puede ser controlado ya sea con valor de una variable o de una expresión.
Mientras condición
'//
Comandos a ejecutar
Encaminarse a
El bucle comienza con la 'Mientras' palabra clave y termina con Wend ( 'mientras que el extremo'). Estas dos líneas y todas las declaraciones entre ellos se llaman colectivamente un bloque 'Aunque'.
'Condición' es cualquier cadena o expresión numérica que se evalúa como Verdadero o Falso. Mientras 'Condición' Es cierto, el bucle continúa trabajando. Esto también significa que:
1. Para el bucle para empezar, la 'Condición' tiene que ser cierto en el primer iteartion.
2. En algún momento en el tiempo, las instrucciones dentro del bloque Mientras que tienen que hacer el
'Condición' 'Falso'. De otra manera, 'Condición' será 'True' para siempre y nuestra macro dejará de funcionar en círculos. Esta condición se llama un 'bucle infinito'. Los próximos ejemplos clarificar esto. Aquí es cómo funciona el código:
1. Nuestra macro está trabajando su camino a través de las líneas de código, y de repente se encuentra con la línea con 'Mientras'.
2. 'Condición' se evalúa la expresión.
3. Si 'Condición' se evalúa como TRUE, el control del programa entra en el bloque bien y ejecuta las instrucciones de uno en uno hasta que llegue 'Wend'.
4. 'Condición' se evalúa una vez más y, si se encuentra 'True', todo el grupo de instrucciones en el bloque se ejecuta de nuevo.
Ahora, vamos a refundir los ejemplos de la sección C.9.1 en “For Loops” Mientras con bucles. 1. En cada fila, insertar el número de fila en la primera celda (Columna A) para las filas 2 a 100. r Dim As Integer r = 2
Mientras que (r <100)
wks.Cells (r, 1) .Value = r r = r + 1 Wend
2. Haciendo lo mismo que de la fila 1. 100 a la fila 2. r Dim As Integer r = 100 Mientras que (r> 2)
wks.Cells (r, 1) .Value = r r = r - 1 Wend
3. En cada fila que es un múltiplo de 5, insertar el número de fila en la primera celda. r=2
Mientras que (r <100)
Si (r Mod 5) = 0 entonces wks.Cells (r, 1) .Value = r Endif r = r + 1 Wend
Veamos algunas diferencias importantes entre los dos bucles que hemos visto hasta ahora.
En bucle
mientras Loop Controlado por una expresión booleana. Puede ser una
Controlar
Controlada con una variable de contador numérico.
variable booleana, o una cadena o expresión numérica que se evalúa como verdadero o falso.
Valor inicial: especificada antes del comienzo del bucle. Fuera del cuerpo del bucle. Inicio fin
Se especifica en la línea de salida del cuerpo del bucle.
Valor final: se especifica en la expresión de prueba.
Paso
Salir condicional
Se especifica en la línea de salida del cuerpo del bucle.
Como una declaración dentro del cuerpo del bucle.
No existe un método estándar disponible, tiene que
Disponible con 'Exit Para' comunicado.
modificar la expresión de prueba en false en el cuerpo del bucle
No hay nada como 'Salir Para' Debemos tener en cuenta que a diferencia de “salida” en “bucle For”, no hay nada disponible para un bucle while para detener su ejecución en base a alguna condición de prueba. Sin embargo, podemos evitar esta limitación, al declarar una variable booleana cuyo valor depende de una condición de prueba. Entonces sólo tiene que utilizar esta variable booleana en lugar de la condición de prueba.
Considere el ejemplo 4 de la sección 'Para Loop'. Queremos salir del bucle cuando obtenemos la palabra “total” en la columna B para una fila. Pero, al mismo tiempo, sólo queremos mirar en las filas 2 a 100, y colocar un poco de valor en cada fila que es un múltiplo de 5. Dim bKeepLooping As Boolean Dim r como número entero r = 2
'// ** Ajuste inicialmente la variable booleana a TRUE // ** bKeepLooping = True
Mientras que (bKeepLooping)
Si (r Mod 5) = 0 entonces wks.Cells (R, 1) .Value = r
End If r = r +1 Si (r> O 100 wks.Cells (r, 2) .Value =”Total”) Entonces '// ** No más iteraciones sucederán ** //
bKeepLooping = False End If Wend
C.9.3 Para cada bucle Este bucle es útil cuando queremos bucle a través de todos los miembros de una colección. La sintaxis es la siguiente:
Para cada En
'// trabajo con el objeto
Siguiente
'' es una variable de objeto del mismo tipo que los miembros de la colección. Veamos un ejemplo. El siguiente bucle imprime el nombre de cada hoja del libro actual.
Dim semanas como hoja de trabajo
Para Cada semanas En ThisWorkbook.Worksheets
Debug.Print wks.Name Siguiente semanas
'ThisWorkbook' es el objeto que representa el libro en el que está escrita la macro. 'Hojas de trabajo' es una colección de todas las hojas de un libro. Cada hoja tiene una propiedad llamada “Nombre” que contiene el nombre de la hoja de trabajo.
C.10 múltiples operaciones sobre el mismo objeto - Con Bloquear A veces, es posible que desee hacer varias operaciones diferentes en un solo objeto, pero utilizando diferentes propiedades y métodos. El 'Con ... .End Con' bloque nos permite el procesamiento del club en un solo bloque y reduce el tiempo de escritura requerido. El código siguiente muestra cómo 3 operaciones se realizan en una sola hoja de cálculo.
Con ThisWorkbook.Worksheets ( “Hoja 1”) . Name = “primera hoja: . Range ( “A1”). Value = “Primera Columna / Primera fila” . Range ( “B2”). Formula = “= Izquierda (A1,5)” End With
constantes C.11 Varios Aquí Sare algunas constantes de cadenas predefinidas de Visual Basic que podemos utilizar en nuestras macros cuando queremos formar cadenas de unirse a diferentes personajes u otras cadenas. La cadena de ensamblado se puede escribir en un archivo o aparece en la pantalla en un cuadro de mensaje o una forma. Hay un buen número de constantes disponibles adecuados para diferentes tareas, pero sólo dos necesitarán. Aquí están
1. vbCrLf: Produce el mismo efecto que pulsar la tecla 'Enter' y comenzar una nueva línea.
2. vbTab: Produce el mismo efecto que pulsar la tecla 'Tab'. El código siguiente se incluye una de esas cuerdas y lo muestra en un cuadro de mensaje. La salida se muestra en la figura C.11.
Dim str As String Cadena = “Hola” y vbTab y “extraño”. Y vbCrLf y “¿Cómo está usted?” MsgBox str
Observe el espacio en blanco entre las dos primeras palabras debido al carácter de tabulación
La figura C.11 cadena ensamblada representada en cuadro de mensaje.