Professional Documents
Culture Documents
Dim N As Integer
Dim Msg As Integer
Msg = MsgBox("Esta seguro de eliminar caracter 160 al final del texto", vbYesNo)
If Msg = 7 Then
Exit Sub
Else
{instrucciones} ‘si la opcion es distinta de 7 NO
End if
3. SOLICITA UNO O VARIOS RANGOS DEL MISMO LIBRO U OTROS LIBROS ABIERTOS
Y PROCESAR EL RANGO SELECIONADO [Con Inputbox() ]
[instrucciones]
Next
ActiveCell.FormulaR1C1 = ("=subtotal(9,r7c13:r10000c13)")
Pone la formula en la celda activa
Activecell.end(xldown)
Activecell end(xltoleft)
Activecell end(xltoright)
Activecell end(xlup)
Activecell.offset(1,0).select
Range(“A1:B3”).Select
Range(“B2”).Activate
11ª. 'Hacer referencia a una hoja guardando en una variable el nombre de la hoja activa,
previa a la activa y posterior a la activa
Dim sheetnom As String
'Se guarda el nombre de la hoja activa, previa a la activa y posterior a la activa
sheetnom = ActiveSheet.Name
sheetnom = ActiveSheet.Previous.Name
sheetnom = ActiveSheet.Next.Nam
11A. COPIA UNA HOJA Y LA RENOMBRA DE ACUERDO AL DIA DE LA FECHA ACTUAL
Sheets("molde").Copy After:=Sheets(ActiveWorkbook.Sheets.Count)
ActiveSheet.Name = Day(Now())
Active.Workbook.Save
13. PONE NOMBRE DE RANGO A CELDA ACTIVA BAJA 5 LINEAS, COLOCA “HOLA”,
VUELVE A CELDA “NOMBRE” Y ELIMINA “NOMBRE”
ActiveCell.Name = “Nombre”
ActiveCell.Offset(5,0).Activate
ActiveCell.Value = “Hola”
Application.GotoReference:= “Nombre”
ActiveWorkbook.Names(“Nombre”).Delete
Sheets(“Nombre”).Select
Selection.ClearContents
Cells.Select
Selection.EntireColumn.Delete
Selection.EntireRow.Delete
Selection.Entirecolumn.Insert
Selection.EntireRow.Insert
Windows (“NombreArchivo”).Activate
26. INSERTA LINEA SI DOS FILAS MAS ABAJO DE CELDA ACTIVA TIENE DATOS
If ActiveCell.Offset(2,0)<>”” then
Selection.EntireRow.Insert
End if
Next a
29. PARA EVITAR QUE LA RUTINA PARE CUANDO HAY UN ERROR EN TIEMPO
REAL
Despues de Public Sub
On Error GoTo Error
‘Despues de Exit Sub
Error:
End
End Sub
30. AL EJECUTAR LA MACRO QUE INVOLUCRA OTRAS HOJAS DEL LIBRO SE FIJE EN
LA PANTALLA A LA VISTA
Application.ScreenUpdating = False
Vnom = Worksheets("menu").Range("nom")
Dim Rg as Range
For Each Rg In Worksheets("menu").Range("nom")
<commandos>
Next
35. 'DESPLIEGA TODOS LOS NOMBRES DE LAS HOJAS QUE CONTIENE EL LIBRO
Sub NombredeHojas()
Dim celda As Integer
Dim Hoja As Worksheet
celda = 1
For Each Hoja In Worksheets
Sheets(1).Cells(celda, 1).Value = Hoja.Name
celda = celda + 1
Next Hoja
End Sub
End Sub
37. REDONDEAR CELDAS
Set Rr = Selection
For Each Ss In Rr
Zz = Round(Ss, 0)
Ss.Value = Zz
Ss.NumberFormat = "#,##0"
Next Ss
42. SELECCIONAR UNA HOJA DEL LIBRO, PONER UNA FORMULA, DARLE
FORMATO A CELDA ACTIVA
Sheets("MatrizAnexo").Select
ActiveCell.FormulaR1C1 = _
"=ROUND(+R[-19]C[14]/COUNTIF(R[-25]C[14]:R[-20]C[15],"">0""),0)"
Selection.NumberFormat = "#,##0"
Dim C As Range
Dim Cant As Long
For Each C In Target
Cant = Cant + 1
Next
If Cant = 1 Then
'********************************
‘INSERTA UNA FORMULA EN LA MISMA LINEA 9 COL HACIA LA DERECHA
‘SI LA COL A Y LA FILA > 6 Y LA CELDA DE LA COL IZQ ES VACIA
If Target.Column = 1 And Target.Row > 6 And Target.Value <> "" And Target.Offset(-1, 0).Value <>
"" Then
Target.Offset(0, 9).FormulaR1C1 = "=r[-1]c+rc[-2]-rc[-1]"
End If
'********************************
Nro = 1
Vv = False
Dir = Worksheets("datos").Range("tipodoc").Offset(Nro, 0).Value
Cc = Target.Value 'contenido en la celda activa
Aa = Target.Row 'numero de fila en celda activa
If Cc = Dir Then
Exit Sub
End If
Nro = Nro + 1
Dir = Worksheets("datos").Range("tipodoc").Offset(Nro, 0).Value
Loop
If Dir = "" Then
MsgBox "Valor ingresado no existe, solicite Ayuda [CTROL A]... ", vbCritical
Range("C" & Aa).Select
End If
End If
'**********************************
If Target.Column = 5 And ActiveCell.Row > 4 Then
Nro = 1
Dir = Worksheets("datos").Range("auxiliar").Offset(Nro, 0).Value
Cc = Target.Value
Aa = Target.Row
Vv = False
If Cc = Dir Then
Range("F" & Aa).Select
Target.Offset(0, 1).Value = Worksheets("datos").Range("auxiliar").Offset(Nro, 1).Value
Vv = True
Exit Do
End If
Nro = Nro + 1
Dir = Worksheets("datos").Range("auxiliar").Offset(Nro, 0).Value
Loop
If Vv = True Then
Exit Sub
Else
MsgBox "Valor ingresado no existe, solicite Ayuda [CTROL A]... ", vbCritical
'Range("C" & Aa).Select
End If
End If
'**********************************
End If
End Sub
*******************************************************************
44. Pregunta : ¿Cómo puedo anular el efecto de la pulsación de teclas como el RePag, AvPag,
Esc o similares al trabajar con formularios?
Respuesta : Si quieres anular la pulsación de alguna tecla al trabajar con formularios, primero debes ir a
la ventana de propiedades del formulario y poner la propiedad Tecla de vista previa (KeyPreview) a Sí.
De esta manera, se fuerza a que el formulario sea el primero en detectar la pulsación de cualquier tecla,
antes de que lo haga el control activo en ese momento, que, de otra manera, sería el primero en
hacerlo. Después deberemos utilizar algún tipo de código para detectar la pulsación de la tecla en el
evento Al bajar una tecla (KeyDown) y anularla. Este evento detecta prácticamente todas las
pulsaciones de teclas, en detrimento del evento Al presionar una tecla (KeyPress) que sólo detecta las
teclas típicas de la escritura como son los caracteres alfanuméricos y los símbolos utilizados en los
diferentes idiomas.
En nuestro caso, podemos llamar a una función genérica que he construído y que servirá para anular
cualquier tipo de tecla que le pasemos en su segundo parámetro, el cual tiene un número de elementos
indeterminado.
Argumentos
Nombre Descripción
KeyCode Requerido. El valor de la tecla pulsada y que está recogida en el primer argumento del
evento KeyDown, del mismo nombre: KeyCode
Keys Opcional. Lista separada por comas de los valores ASCII o las constantes Visual Basic (ver
estas constantes en este enlace) de las teclas que se quieren anular.
Esta función también puede ser utilizada a través del evento KeyDown de un control. Funcionará de la
misma manera que para un formulario.
Un ejemplo de uso:
'---------------------------------------------------------
'
' DeleteKeys
'
' Código escrito originalmente por Juan M Afán de Ribera.
' Estás autorizado a utilizarlo dentro de una aplicación
' siempre que esta nota de autor permanezca inalterada.
' En el caso de querer publicarlo en una página Web,
' por favor, contactar con el autor en
'
' accessvbafaq@ya.com
'
' Este código se brinda por cortesía de
' Juan M. Afán de Ribera
'
End Function
vbKey0 48 tecla 0
vbKey1 49 tecla 1
vbKey2 50 tecla 2
vbKey3 51 tecla 3
vbKey4 52 tecla 4
vbKey5 53 tecla 5
vbKey6 54 tecla 6
vbKey7 55 tecla 7
vbKey8 56 tecla 8
vbKey9 57 tecla 9
vbKeyA 65 tecla A
vbKeyB 66 tecla B
vbKeyC 67 tecla C
vbKeyD 68 tecla D
vbKeyE 69 tecla E
vbKeyF 70 tecla F
vbKeyG 71 tecla G
vbKeyH 72 tecla H
vbKeyI 73 tecla I
vbKeyJ 74 tecla J
vbKeyK 75 tecla K
vbKeyL 76 tecla L
vbKeyM 77 tecla M
vbKeyN 78 tecla N
vbKeyO 79 tecla O
vbKeyP 80 tecla P
vbKeyQ 81 tecla Q
vbKeyR 82 tecla R
vbKeyS 83 tecla S
vbKeyT 84 tecla T
vbKeyU 85 tecla U
vbKeyV 86 tecla V
vbKeyW 87 tecla W
vbKeyX 88 tecla X
vbKeyY 89 tecla Y
vbKeyZ 90 tecla Z
Vamos a ello. Te podría dar una API que detecta tal hecho, pero lo mejor y más sencillo -y
por lo tanto lo más adecuado- es emplear el evento KeyDown. Crea un formulario con un
Text, y codifica lo siguiente:
Comom verás se trata de capturar las teclas empleando las constantes que Visual Basic
provee. Una vez capturadas las teclas, hacer que se mueva la imagen o cualquier control es
bien sencillito En cada "CASE" adiciona o resta más a la propiedad LEFT o TOP del control
en cuestión.
******************************************************************************************************
45. Validacion de la fecha ingresada en un textbox
Nombre textbox = TxtFechaComp (o el nombre que se asigno al textbox)
‘End Sub
‘End Sub
50. CAPTURAR
Sheets(1).Range("A1").Offset(2,3).Select
'selecciona 2 filas hacia abajo y 3 col a derecha de A1 = D3
ActiveCell.Offset(-10,1).Select
'selecciona la celda que se encuentra 10 filas por encima y 1 columna a la derecha de la celda activa.
Range("B2:D10").Select
'selecciona el rango y le aplica los siguientes formatos
With Selection
.Font.Bold=True 'formato negrita .Font.Italic=True 'formato
cursiva .Font.Underline=xlUnderlineStyleSingle 'subrayado simple
.Font.Color = RGB(255,0,0)
'color de fuente (para estos valores será rojo) .HorizontalAlignment=xlCenter
'alineación central (Right=derecha, Left=izquierda)
End With
lugar= ActiveCell.Address
'guarda la referencia absoluta, por ej: $E$2
ActiveCell.Offset(0,1).Value = ActiveCell.Comment.Text
'copia el comentario de la celda activa en la celda que se encuentra en la columna siguiente.
Range("B1:E1").Select
Selection.Merge
Range("A2", Range("A2").End(xlToRight)).Select
'selecciona desde A2 hacia la derecha
Range("D2", Range("D2").End(xlToLeft)).Select
'selecciona desde D2 hacia la izquierda
Range("A20", Range("A20").End(xlUp)).Select
'selecciona desde A20 hacia arriba
Nota: Esta instrucción dará error si la celda A3 se encuentra vacía. Es preferible en ese caso realizar la
búsqueda de 'abajo hacia arriba', con:
Range("A65536").End(xlup).Select
Range("A65536").End(xlup).Row + 1
En esta sección aparecerán algunas de las instrucciones 'básicas' para utilizar con COLECCIONES. Una vez copiada
en el Editor, colocar el cursor sobre la palabra en negrita y presionar F1 para acceder a la Ayuda Excel. Allí se
encontrarán más explicaciones y ejemplos para esa instrucción.
Una colección es un conjunto de objetos del mismo tipo: hojas, celdas, controles o Shapes, imágenes.
Para trabajar con una colección se programa un bucle: es decir repetir la misma instrucción para cada
elemento de la colección.
Ejemplo1: introducir un nombre para cada hoja del libro activo. Esta rutina se coloca en un módulo:
Sub nombraHojas()
Dim MiNombre As String
Dim hoja As Worksheet
For Each hoja In Worksheets
MiNombre = InputBox("Ingrese nombre de hoja: ")
hoja.Name = MiNombre
Next hoja
End Sub
Ejemplo2: introducir valores para cada celda de un rango (se coloca en un módulo)
Sub colocaValores()
Dim celdita as Range
For Each celdita in ActiveSheet.Range("A1:B10")
celdita.Value = InputBox("Ingrese valor: ")
Next celdita
End Sub
Ejemplo3: introducir los mismos valores en celdas de todas las hojas (se coloca en un módulo)
Sub valoresHoja()
Dim hoja as Sheets
For Each hoja in Sheets
hoja.Range("E3").Value = Date
hoja.Range("F3").Value = Time
Next hoja
End Sub
OTRO TIPO DE BUCLES:
Ejemplo1: realizar una acción por cada valor que tome una variable i (se coloca en un módulo)
Sub muestraNombre()
Dim i as Byte
Dim hoja as Worksheet
For i=1 to 5
Msgbox WorkSheets(i).Name
Next
End Sub
Ejemplo2: realizar una acción mientras se cumpla una condición (se coloca en un módulo)
Sub recorreRango()
'Se recorre la col A a partir de la fila 2 hasta encontrar una celda vacía.
'El valor de cada celda se incrementa en 1
Range("A2").Select
While Activecell.Value <> ""
ActiveCell.Value = ActiveCell.Value + 1
Wend
End Sub
A continuación algunos ejemplos de cómo llamar a objetos insertados en hoja, como ser Cuadros de texto, Listas
o Cuadros combinados y también un Userform.
1- Llamando a un Userform, desde un botón:
En una hoja de Excel, los botones que lanzan una acción, pueden ser colocados con la barra de
Formularios o Cuadro de Controles.
a. Botón de formulario: se asigna una macro, como la del ejemplo, que previamente se escribió
en un módulo en el Editor de Visual Basic. Ejemplo:
Sub mostrando ()
UserForm1.Show 'nombre del Userform que se desea mostrar
End Sub
b. Botón del Cuadro de controles: una vez dibujado en la hoja, clic derecho, opción Ver código y
escribir la rutina (ésta se habilita en la hoja donde aparecerá el control). Ejemplo:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Nota: Estas instrucciones como las del punto 3 y 4, se colocan dentro de alguna rutina general, como
puede ser un botón para guardar o aceptar.
TextBox1.Value = "CANCELADO"
TextBox2 = Sheets("Hoja3").Range("A5").Value
TextBox2 = Range("C1").Value + Range("C2").Value
Notese que en Textbox2 se omitió la expresión 'value' ya que esa es su propiedad predeterminada. Puede
colocarse o no.
3- Volcar datos de un control Textbox y Combobox a la hoja:
Estos controles han sido dibujados con la barra 'Cuadro de controles'
'pasar datos de un control Textbox a la celda indicada en Cells(fila,col)
Cells(fila, col).Value = TextBox1.Value
* Otra manera de asignar rango. En este caso el control se dibujó con la barra ActiveX o Cuadro de Controles:
ActiveSheet.ListBox1.ListFillRange = "$F$1:$F$4"
En esta sección aparecerán algunas de las instrucciones 'básicas' para utilizar con LIBROS. Una vez copiada en el
Editor, colocar el cursor sobre la palabra en negrita y presionar F1 para acceder a la Ayuda Excel. Allí se
encontrarán más explicaciones y ejemplos para cada instrucción.
Nota: Al inicio de esta sección Macros hemos visto las distintas maneras de hacer referencia a Libros, Hojas y
Rangos o celdas. A partir de aquí usaré solo el objeto activo considerando que puede usarse algunas de las otras
expresiones
Si el nombre se encuentra en una varible NO lleva comillas (aquí se abre un libro que se encuentra en la misma
carpeta que el libro activo. La variable 'libro2' contiene el nombre y la extensión)
Estas son algunas de las opciones. Si se omiten, escribir la coma, como en el siguiente ejemplo:
ActiveWorkbook.SaveAs Filename:="C:\Mis doc\Libro.xls",,, ReadOnlyRecommended:=False
*- La carpeta y el nombre del libro pueden guardarse en variables, como en este ej:
ruta = ThisWorkbook.Path & "\"
'o quizás: ruta = "C:\"
libro = "LibroCopia.xlsm"
ActiveWorkbook.SaveAs ruta & libro
7-No mostrar aviso al salir, al eliminar hoja, o cualquier aviso que queremos omitir:
Application.DisplayAlerts= False 'volverla a True al finalizar la macro
En esta sección aparecerán algunas de las instrucciones 'básicas' para utilizar con HOJAS. Una vez copiada en el
Editor, colocar el cursor sobre la palabra en negrita y presionar F1 para acceder a la Ayuda Excel. Allí se
encontrarán más explicaciones y ejemplos para esa instrucción.
2-Datos de la hoja:
ActiveSheet.Name 'nombre de la hoja
ActiveSheet.Index 'número de hoja
Sub nrocol()
Msgbox Range("AB1").Column
End Sub
Reemplazar PrintOut por PrintPreview para realizar solo una vista preliminar.
Esta página intenta ser una guía no solo para el que se inicia en el tema VBA sino también para aquellos
que, conociendo el tema, no recuerdan tal o cual instrucción o buscan ampliar sus conocimientos con otros
ejemplos.
Los temas se encuentran separados en categorías, desde un repaso por las instrucciones básicas, hasta
macros más desarrolladas, con varios ejemplos en cada una.
Como casi siempre hay más de una forma de programar un evento, podrán observar que a veces se
escribe una línea O la otra. Quiere decir que puedo utilizar cualquiera de las 2. (¡Nunca las 2 juntas!)
Los temas están divididos en 2 grupos principales: Conceptos e Instrucciones básicas (ver índice de
contenidos en margen izquierdo)
'Hacer referencia a una hoja guardando en una variable el nombre de la hoja activa, previa a la
activa y posterior a la activa
Dim sheetnom As String
'Se guarda el nombre de la hoja activa, previa a la activa y posterior a la activa
sheetnom = ActiveSheet.Name
sheetnom = ActiveSheet.Previous.Name
sheetnom = ActiveSheet.Next.Name
'Hacer referencia a una hoja guardando en una variable el número de hoja, actual, previa a la
actual y siguiente
Dim sheetnumb As Byte
sheetnumb = ActiveSheet.Index
sheetnumb = ActiveSheet.Previous.Index
sheetnumb = ActiveSheet.Next.Index
'ActiveSheet.Cells(ActiveCell.Row, 1).Select
'Seleccionar la unión de dos o más rangos especificados, similar a seleccionar y tener apretado tecla ctrl
Application.Union(Range("A2: C5"), Range("F6: H12")).Select
'Seleccionar desde la celda E2 hasta la última celda con datos hacia abajo, similar a ctrl + shift
+ flecha hacia abajo
Range("E2", Range("E2").End(xlDown)).Select
'Otra forma de seleccionar
Range("E2:" & Range("E2").End(xlDown).Address).Select
'Seleccionar desde la celda E2 hasta la última celda con datos hacia la derecha, similar a ctrl +
shift + flecha hacia la derecha
Range("E2", Range("E2").End(xlToRight)).Select
'Otra forma de seleccionar
Range("E2:" & Range("E2").End(xlToRight).Address).Select
Sub ultimaFila1()
'Identifica la última fila que contiene datos
Dim ultimaFila As Long
End Sub
Para seleccionar la celda F7 en una hoja de cálculo de un libro diferente, puede utilizar
cualquiera de los ejemplos siguientes:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)
Para seleccionar un rango de celdas rectangular alrededor de una celda, utilice el método
CurrentRegion. El rango seleccionado mediante el método CurrentRegion es un área limitada
por cualquier combinación de filas en blanco y columnas vacías. A continuación se muestra un
ejemplo de cómo utilizar el método CurrentRegion:
ActiveSheet.Range("a1").CurrentRegion.Select
Este código seleccionará las celdas A1 a C4. A continuación se enumeran más ejemplos de selección de
celdas del mismo rango:
ActiveSheet.Range("a1", _
ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select
o bien
ActiveSheet.Range("a1:" & _
ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select
55. MACRO: Una macro es un conjunto de instrucciones escritas en lenguaje Visual Basic (*), que nos
permite automatizar ciertas tareas que la aplicación no contempla desde las herramientas de la hoja.
Por ejemplo, si necesitamos que se inserten automáticamente 2 hojas nuevas al abrir un libro, recurriremos
a una macro.
Otros casos: completar alguna tarea cada vez que se ingresa un valor en una celda o rango de celdas;
realizar un cierto control antes de imprimir, guardar o cerrar el libro, etc. Son todas tareas que pueden ser
automatizadas mediante rutinas o macros.
Cómo se crea una macro: para automatizar una tarea mediante una macro básicamente se necesitan
los siguientes elementos:
1- un espacio de trabajo donde escribir las instrucciones o rutinas que harán esas tareas: el
Editor de Macros. A este espacio se accede desde menú Herramientas, Macros, Editor o con el
atajo de teclado Alt+F11.
En versión 2007, activar la opción Programador de la Cinta de Opciones.
Una vez en ese 'espacio', escribiremos o copiaremos las rutinas en:
a- alguno de los objetos (hoja o libro) que seleccionemos con doble clic en el panel de Objetos
que se encuentra a la izquierda del Editor.
b- insertando módulos
c- o insertando formularios personales o Userforms.
2- una acción que hará que la tarea programada se ejecute. A esto llamamos 'Eventos' que
inician una macro y pueden ser: abrir o cerrar un libro, entrar o salir de una hoja, cambios o
selección de celdas, antes de imprimir o guardar, el 'clic' en un botón de comando, al presionar
un atajo de teclado, y otros más.
3- un lenguaje de programación. En Excel utilizamos VBA (Visual Basic para Aplicaciones)
4- Ocasionalmente un formulario donde trabajar para luego volcar los resultados en las hojas:
llamados Userforms.
Dónde colocar o escribir la macro: esto dependerá de lo que deba ejecutar nuestra rutina.
Si las instrucciones se deben ejecutar, por ejemplo, al abrir o cerrar un libro, se colocan en el
objeto ThisWorkbook (o EsteLibro según la versión).
Si las instrucciones se deben ejecutar al entrar o salir de una hoja o al seleccionar o modificar
una celda, se colocan en el objeto Hoja. Estos objetos se encuentran en el margen izquierdo del
Editor, en la ventana Proyecto-VBAProyect
Si nuestra rutina será llamada con un botón, atajo de teclado o desde otra rutina, se colocará en
un módulo (estando en el Editor, menú Insertar, Módulo).
Las instrucciones para los controles de un formulario o Userforms se colocan en la sección
Código del mismo formulario.
Cómo ejecutar una macro: En el punto anterior se menciona que se necesita una 'acción' que dispare
o ejecute una macro grabada.
Veamos los distintos casos:
1- Una acción automática resultado de un evento, ya sea a nivel libro, hoja, rango o celda
En este grupo se encuentran las rutinas que se ejecutan en la apertura o cierre de libro, al entrar
o salir de una hoja, al seleccionar o cambiar valores en celda …Son las que se colocan en el
objeto HOJA o ThisWorkbook, como se menciona en tema anterior
2- Al presionar un botón dibujado en la hoja. Podemos utilizar botones de la barra 'Cuadro de
controles o ActiveX' o de la barra 'Formularios'. En versión 2003 se encuentra en Menú Ver,
Barras de Herramientas. En versión 2007 desde la ficha Programador
Dibujamos el control en la hoja, ajustamos algunas propiedades como texto, tamaño, ubicación.
Al hacer clic derecho sobre el control optamos por 'Ver código' o 'Asignar macro' según qué
barra de herramientas hemos utilizado.
a- Cuadro de controles: al optar por 'Ver código' nos llevará al Editor, al objeto HOJA
donde se generará automáticamente una rutina con estas 2 instrucciones:
Private Sub CommandButton1_click()
'aquí escribiremos nuestras instrucciones
End Sub
b- Formularios: ya debemos tener lista la rutina en un módulo del Editor y la asignaremos
cuando optemos por 'Asignar macro'.
Las rutinas para este caso son como el siguiente ejemplo:
Sub nombre_rutina()
'nuestras instrucciones
End Sub
3- Ejecutar un atajo de teclado: En estos casos tendremos una rutina como la del punto anterior
(b) en un módulo del Editor.
Desde la hoja Excel, menú Herramientas, Macros, Macros seleccionarla de la lista. Presionar
el botón 'Avanzadas' e ingresar una letra, por ejemplo 't' (sin las comillas)
Nota: Si Excel ya tiene asignada esta letra la reemplazará por Ctrl+Mayúsc +t Esto significa que
en el momento que necesitemos que la macro se ejecute presionaremos juntas las teclas Ctrl + t
(o Ctrl+Mayusc+t)
4- Desde el menú Herramientas: si no hemos asignado la rutina que se encuentra en un módulo
a ningún botón ni a atajo de teclado, la ejecutaremos desde este menú de Excel.
En versión 2007, activar la opción Programador de la Cinta de Opciones.
Referencias: Veamos los diferentes modos de referirnos a libros, hojas y celdas:
**************************
El evento OnKey ejecuta un procedimiento específico cuando una tecla o combinación de teclas
se pulsan.
A continuación os relaciono una matriz con los códigos que representa cada tecla en el teclado.
Clave Código
BREAK {PAUSA}
CLEAR {CLEAR}
FIN {END}
ENTER ~ (tilde)
CES { Salir} o {ESC}
AYUDA {AYUDA}
INICIO {HOME}
INS {INSERT}
PÁG {} PGDN
PÁG {} PGUP
REGRESAR {Return}
TAB {TAB}
También se pueden especificar en combinación con las teclas SHIFT , CTRL y ALT.
Sub DemoOnKey()
Application.OnKey "{TAB}", "Message"
End Sub
Sub Message()
MsgBox "Hola"
End Sub
Sub compare_two_array()
Dim thisarray As Variant
Dim thatarray As Variant
thisarray = Range("range1").Value
thatarray = Range("range2").Value
counter = 1
While counter <= UBound(thisarray)
x = thisarray(counter, 1)
y = thatarray(counter, 1)
If x = y Then
MsgBox "yes"
Else MsgBox "no"
End If
counter = counter + 1
Wend
End Sub
Application.ScreenUpdating = False
Application.DisplayStatusBar = True
Application.StatusBar = "Iniciando..."
Application.ScreenUpdating = True
Application.StatusBar = "Ejecución terminada."
Application.ScreenUpdating se encarga de encender y apagar la actualización
de video. Application.DisplayStatusBar = True habilita la barra de estado que
está en la parte inferior de la ventana de Excel, y allí despliegas mensajes
asignando una hilera a Application.StatusBar. La idea de usar la barra de estado
es que si la ejecución de la macro tarda mucho, es bueno que el usuario sepa
que la macro está trabajando, y que no se ha quedado atascada.
No hay nada que fastidie más que tener un programa atascado frente a uno. Por
eso sería bueno que dentro de la macro agregues otros mensajes donde el
usuario pueda ver que la macro va caminando, pero si pones mensajes con
demasiada frecuencia eso ralentizará la ejecución, porque como dijimos, la
actualización de video consume mucho tiempo de la máquina.
Esto es especialmente útil cuando vas a correr una macro que pasa de un libro
de Excel a otro o que se mueve mucho a lo largo de las páginas o celdas de
manera muy intensiva.
60.