Excel Avanzado SESION 9 VARIABLES “Cae siete veces, levántate ocho” (Proverbio Japonés) Ejercicio 1. Instrucción Offset 1. Realicemos una macro que permita visualizar valores en diferentes celdas utilizando referencias relativas. Para esto utilizaremos la instrucción Offset(fila, columna), la cual permite desplazarnos las cantidad de filas y columnas indicadas. Sub Relativa() ActiveCell.Value = "Enero" 'Ingresa un texto en la celda activa ActiveCell.Offset(0, 3).Select ActiveCell.Value = "Febrero" ActiveCell.Offset(2, 0).Select ActiveCell.Value = "Marzo" ActiveCell.Offset(0, -3).Select ActiveCell.Value = "Abril" ActiveCell.FormulaR1C1 = "Junio" ActiveCell.Offset(0, -5).Range("A1").Select ‘Desplaza cinco columnas a la izquierda End Sub Ejercicio 2. Instrucción Offset 2. Utilizando la instrucción Offset realice un macro que permita mostrar un listado de los días de la semana verticalmente, partiendo de la celda activa. Ejercicio 3. Variables e InputBox 3. Realicemos un ejercicio que nos permita ingresar un valor a través de una ventana, el valor ingresado lo almacenaremos en una variable y lo mostraremos una celda de la Hoja de Cálculo activa. Lic. Juan Carlos Aguilar Escobedo -1- Excel Avanzado Sub Entrar_Valor_01() Dim Texto As String ‘Declaramos una variable llamada Texto de tipo cadena ‘Chr(13) sirve para que el mensaje se muestre en dos Líneas ‘InputBox(Texto central, Título de la ventana Texto = InputBox("Introducir un texto " & Chr(13) & "Para la casilla B3", "Entrada de datos") ‘Mostramos el valor de la variable texto en la celda B3 ActiveSheet.Range("B3").Value = Texto ActiveSheet.Range("B3").Font.Bold = True ‘para colocar negrita ActiveSheet.Range("B3").Font.Color = RGB(255, 0, 0) ‘para fuente de color rojo End Sub Ejercicio 4. Variables e InputBox 4. Veamos ahora un ejercicio que en vez de ingresar un valor en una celda fija, demos la posibilidad de especificar en cual celda deberá visualizarse el texto. Sub Entrar_Valor_02() ‘Declaramos dos variables de tipo cadena Dim Casilla As String Dim Texto As String ‘Ingresamos la referencia a una celda mediante InputBox Casilla = InputBox("En que casilla quiere entrar el valor", "Entrar Casilla") ‘Ingresamos el texto que se visualizará Texto = InputBox("Introducir un texto " & Chr(13) & "Para la casilla " & Casilla, "Entrada de datos") ‘Visualizamos en la celda especificada el valor, en este caso el Rango es ‘el valor de la variable Casilla ActiveSheet.Range(Casilla).Value = Texto ActiveSheet.Range(Casilla).Font.Bold = True ActiveSheet.Range(Casilla).Font.Color = RGB(255, 0, 0) End Sub Lic. Juan Carlos Aguilar Escobedo -2- Excel Avanzado Ejercicio 5. Variables e InputBox 5. Realice un macro que permita mostrar tres ventanas que permitan ingresar tres textos, además debe solicitarse el ingreso de una referencia a una celda, donde a partir de esa referencia debe de visualizar los textos ingresados verticalmente. Ejercicio 6. Utilización del Option Explicit 6. Cuando colocamos la instrucción Option Explicit forzamos a que se declaren todas las variables. Visual Basic va a detectar un error cuando encuentre una variable que no ha sido declarada, es recomendable que nos acostumbremos a trabajar siempre en esta modalidad. Esta instrucción debe estar declarada al principio del módulo. 7. Pruebe el programa sin la instrucción Option Explicit. Notaremos que no emite ningún error ni tampoco un valor adecuado, debido a que no identifica el error de la variable no declarada testo. Sub Entrar_Valor_03() Texto = InputBox("Introducir un texto " & Chr(13) & "Para la casilla B3", "Entrada de datos") ActiveSheet.Range("B3").Value = Testo ActiveSheet.Range("B3").Font.Bold = True ActiveSheet.Range("B3").Font.Color = RGB(255, 0, 0) End Sub 8. Agregue ahora la instrucción Option Explicit al principio del módulo, declare la variable texto y vuelva a ejecutar el programa y notaremos que ahora si nos identifica el error. Option Explicit Sub Entrar_Valor_03() Dim Texto As String Texto = InputBox("Introducir un texto " & Chr(13) & "Para la casilla A1", "Entrada de datos") ActiveSheet.Range("B3").Value = Testo ActiveSheet.Range("B3").Font.Bold = True ActiveSheet.Range("B3").Font.Color = RGB(255, 0, 0) End Sub 9. Cambie la instrucción de testo por texto para poder corregir el error. Ejercicio 7. Conversión de datos Veamos un ejercicio que nos permita conocer las funciones Val() y Str(). Val().- Convierte la cadena a su valor numérico. Str().- Convierte el número a una expresión cadena. 10.Realice el siguiente programa. Lic. Juan Carlos Aguilar Escobedo -3- Excel Avanzado Sub Sumando() Dim Numero1 As Integer Dim Numero2 As Integer Numero1 = InputBox("Entrar el PRIMER valor", "Entrada de datos") Numero2 = InputBox("Entrar el SEGUNDO valor", "Entrada de datos") ActiveSheet.Range("A1").Value = Numero1 + Numero2 End Sub 11.Ejecute el programa e ingrese dos números. El programa no emitirá ningún error debido a que el valor ingresado se almacena en una variable del mismo tipo. 12.Pero ahora vuelva a ejecutar el programa e ingrese una cadena, por ejemplo “Carlos” y notaremos que ahora nos muestra un error de conversión de tipo de datos. 13.Una forma para poder dar solución a este problema es utilizar la función Val(), la cual al encontrar un valor que no tiene valor numérico devuelve el valor de cero. 14.Modifique el programa de la siguiente forma y verifique que ahora no se produce el error. Sub Sumando() Dim Numero1 As Integer Dim Numero2 As Integer Numero1 = Val(InputBox("Entrar el PRIMER valor", "Entrada de datos")) Numero2 = Val(InputBox("Entrar el SEGUNDO valor", "Entrada de datos")) ActiveSheet.Range("A1").Value = Numero1 + Numero2 End Sub Ejercicio 8. Objeto Cells(Fila, Columna) 15.El objeto Cells sirve como el objeto range, para referenciar una casilla o rango de casillas, pero en lugar de utilizar la referencia de la forma A1, B1, X320 utiliza la fila y la columna que ocupa la casilla dentro de la hoja (o objeto WorkSheet) 16.En cambio el objeto Range(Casilla_Inicial : Casilla_Final), debemos de especificar referencias de celdas, por ejemplo Range(A1:A10). 17.Veamos el siguiente programa: Sub instruccion_cells_range() ‘Ingresamos en la celda A1 un texto. ActiveSheet.Cells(1, 1).Value = "Hola" ‘Ingresamos en el rango C3:D8 un texto Range(Cells(3, 3), Cells(8, 4)).Value = "Hola" ‘Tomando como base el rango A5:B10 ingresamos en la 2da fila y primera Lic. Juan Carlos Aguilar Escobedo -4- Excel Avanzado ‘columna un texto, es decir en la celda A6 Range("A5:B10").Cells(2, 1).Value = "Hola" End Sub Ejercicio 7. Variables de objetos 18.Una variable objeto sirve para hacer referencia a un objeto, esto significa que podemos acceder a las propiedades de un objeto e invocar a sus métodos a través de la variable en lugar de hacerlo directamente a través del objeto. 19.Posiblemente no se utilice demasiado esta clase de variables (está claro que esto dependerá de las preferencias del programador), pero hay casos en los que no hay más remedio que utilizarlas, por ejemplo en estructuras For Each … Next como veremos, o cuando sea necesario continuar funciones que devuelvan rangos, referencias a hojas, etc. 20.Para poder declarar una variable objeto se utiliza también la palabra Dim de la siguiente forma: Dim Var_Objeto as Objeto 21.Veamos un ejemplo que permita crear una variable de objeto Worksheet y poder asignarle diferentes Hojas de cálculo. Sub variables_objetos() Dim hoja As Worksheet ‘Creamos una variable al objeto Hoja de cálculo Set hoja = ActiveSheet ‘Asignamos a la variable la Hoja de cálculo activa hoja.Range("A1:A10") = "HIPOLITO" ‘Modificamos el contenido del rango A1:A10 Set hoja = Worksheets(1) ‘Asignamos la Hoja de Cálculo 1 utilizando el array ‘de Worksheets hoja.Range("C1:C5") = "EN LA HOJA 1" Set hoja = Worksheets(2) ‘Asignamos la Hoja de Cálculo 2 hoja.Range("C1:C5") = "EN LA HOJA 2" Set hoja = Worksheets(3) ‘Asignamos la Hoja de Cálculo 3 hoja.Range("C1:C5") = "EN LA HOJA 3" End Sub Lic. Juan Carlos Aguilar Escobedo -5- Excel Avanzado Ejercicio 7. Variables de objetos 22.Ahora tratemos de llenar el rango de A1 a B10 con la palabra “Hola” y después poner negrita, observe como se asigna una variable objeto y luego como se trabaja con esa variable de la misma forma que trabajaría directamente sobre el objeto. Sub variables_objetos2() ‘Creamos una variable objeto de tipo Range Dim r As Range ‘Asignamos a la variable un rango específico Set r = ActiveSheet.Range("A2:B5") ‘Modificamos sus propiedades utilizando la ‘variable r.Value = "Hola" r.Font.Bold = True End Sub Lic. Juan Carlos Aguilar Escobedo -6-