Sie sind auf Seite 1von 28

VBA Excel 2013. Libro de macros personal: Se abre en cualquier libro.

Es un libro
oculto.
Es un lenguaje de programación orientado a objetos. Su estructura
se asemeja a la realidad con los objetos y sus propiedades y Libro nuevo: Se abre un nuevo libro al ejecutar la macro y ahí se
métodos. Así las propiedades de los objetos nos dan diferentes realiza el proceso
instancias. Los objetos VBA tienen dentro de sí una colección de
Este libro: Solo para el libro en el cual se desea trabajar
otros objetos.
Caso: Referencia de rango absoluta y relativas
Los objetos VBA tienen una jerarquización. La misma se usa para
hacer referencias.

Debemos tener en cuenta que la ventana del VBA se almacena en


módulos de tal manera que la podemos llamar desde cualquier lado
solo con su nombre (código libre).

 Introducción. Se da click antes de empezar la grabadora.

‘Crear un rango con los días de la semana

Grabadora:
 Organizando el código. ‘Range(“b5”).Interior.Color = rgb(125,200,250)

Sub prueba () ‘ Los valores van de 0 a 255

Application. Workbooks (“Libro1”).Worksheets (“Hoja2”).Range. Selection.Interior.Color = rgb(125,200,250) ‘Pinta desde la selección


Value = 250
End Sub
Range (“b5”) = 250 ‘Esto hace lo mismo que arriba siempre que el
 Tipos de datos y variables
libro1 y hoja2 están activas. Value es la propiedad por defecto.
+Byte (ítem) --- 0 al 255
End sub
+ boolean --- verdadero o falso

+integer --- nro entero desde -32768 al 32767

+long --- nro enteros grandes


Activar barra de herramientas: Ver—Barra her—Edición. Comentar o +single --- nro decimales (parte decimal corta). Ejm: 0.8
no
+double --- nro decimales (parte decimal largo)

+currency --- tipo moneda


Sub borrar ()
+decimal --- nro decimales (parte decimal extremadamente larga)
Range (“b5”).Select
+object --- objeto
Selection.ClearContents ‘Borra solo el contenido
+string --- cadena de caracteres
Selection.Clear ‘Borra formato y contenido
+variant --- sin especificar
‘Range (“b5”).ClearContents

End Sub
Variable: espacio en la memoria del ordenador donde se puede
Sub destacar() almacenar un valor que podrá variar a lo largo de la ejecución de un
programa.
Range(“b5”).Interior.Color = 255 ‘ Rojo

‘Range(“b5”).Interior.Color = vbYellow
Declaración de variables. Los nombres no empiezan con número o Nombre = “Juan”
letras extrañas.
MsgBox nombre
Ejemplo:
End Sub

‘----------------------------------------------
Dim nombre As String
Option Explicit
Nombre = María
Dim nombre As String
Dim edad As Byte
Sub declaración_variables()
Edad = 15
Nombre = “Juan”
Msgbox “Hola” & nombre & “. Tienes” & edad & “años.”
MsgBox nombre
Obs: F5 para ejecutar un procedimiento.
End Sub
Alt + f11: abrir ventana VBA
Sub uso_variables()
Option Explicit: Ir a Herramientas, edición, obligar
Nombre = “Juan”
declaración de variables.
MsgBox nombre

End Sub

‘----------------------------------------------
 Ámbito de las variables
‘Módulo 1
Las variables pueden trabajar solo dentro de un procedimiento,
fuera de los procedimientos (a nivel de módulo) o a nivel Option Explicit
público.
Public nombre As String
Option Explicit
Sub declaración_variables()
Sub declaración_variables()
Nombre = “Juan”
Dim nombre As String
MsgBox nombre ‘Módulo 2

End Sub Option Explicit

Sub uso_variables() Const Valor As Integer = 7

Nombre = “Juan” Sub declaración_constantes()

MsgBox nombre MsgBox valor

End Sub End Sub

‘Módulo 2 Sub declaración_constantes()

Option Explicit MsgBox valor

Sub uso_variables_públicas () End sub

Call declaración_variables ‘A nivel público

MsgBox nombre ‘Módulo 3

End Sub Option Explicit

‘Declaración de constantes Public Const Valor As Integer = 7

‘A nivel local Sub declaración_constantes ()

Option Explicit MsgBox valor

Sub declaración_constantes() End Sub

Const Valor As Integer = 7 Sub declaración_constantes ()

MsgBox valor MsgBox valor

End Sub End sub

‘ A nivel módulo ‘Módulo 2


Option Explicit Debug.Print mimatriz(3)

Sub uso_constantes_publica () End Sub

MsgBox valor Option Explicit

End Sub Option Base 1 ‘Para empezar las matrices desde la posición por
defecto
 Matrices de una dimensión
.
Option Explicit
.
Sub declaración_Matrices()
End sub
Dim mirango(4) As Integer
Ahora para poder llamar toda la matriz desde MsgBox.
Mirango(0) = 5
Option Explicit
Mirango(1) = 7
Sub introducirvalores()
Mirango(2) = 4
Dim mirango(5) As Integer
Mirango(3) = 9
Dim micelda As Range
Mirango(4) = 12
Dim índice As Integer
MsgBox mirango(4)
Range(“d1”).Select
Dim mimatriz(0 to 4) As Integer
Selection.CurrentRegion.Select
Mimatriz(0) = 7
For Each micelda In Selection
mimatriz(1) = 9
Mirango(indice) = micelda.Value
mimatriz(2) = 7
Indice = indice + 1
mimatriz(3) = 5
Next micelda ‘Hasta se creó internamente la matriz
mimatriz(4) = 1
‘Ahora mostraremos los valores de la matriz en la ventana  Declarar una variable como objeto.
inmediato
Option Explicit
Dim i As Integer
Sub variables_objeto()
For i = 0 To 5 Step 1
Dim micelda As Range
Debug.Print mirango(i)
Set micelda = Worksheets(1).Range(“b5”)
Next i
Micelda.value = 124
End Sub
Micelda.font.bold = True

Micelda.Font.Italic = True
 Matrices de 2 dimensiones
‘Otra forma
Sub declaracion_matrices()
With micelda
Dim mimatriz(3,4) As Integer
.Value = 124
Dim i As Integer, z As Integer
.Font.Bold = True
For i=0 To 2 Step 1
.Font.Italic = True
For z = 0 To 3 Step 1
End With
Mimatriz(I,z) = Math.Round(Math.Rnd*100) Commented [eym1]: Es un método del objeto Math()
End Sub para redondear.
Debug.Print mimatriz(i, z)
‘Modificamos los procedimientos. Ahora trabajamos con variables Commented [eym2]: Se genera un número aleatorio
Next z declarados como objetoc (range, worksheets) entre 0 a 1.

Next i Option Explicit

End Sub Sub variables_objeto ()

Dim mihoja As Worksheet

For Each mihoja In Worksheets


MsgBox mihoja.Name End Sub

Next mihoja

End Sub

‘Selección de un rango de celda y seleccionar aquellas que


cumplen una condicional
 Funciones predefinidas o integradas.
Sub mi_formato()
Option Explicit
Dim micelda As Range
Sub funciones_integradas()
For Each micelda In Selection
Vba.MsgBox ‘Funciones predefinida en VBA
If micelda.Value >= 300 Then
‘Si queremos saber el uso de una función
Micelda.Interior.Color = vbRed
‘Seleccionar la Función (msgbox, inputbox, abs) + F1
End If
MsgBox WorksheetFunction.Sum (Selection)
Next micelda
Range (“110”).Value = WorksheetFunction.Sum (Selection)
End Sub
Math.abs
‘Recorriendo hojas
End Sub
Sub localiza()
Si queremos asignarle una combinación de teclas para activar la
Dim mihoja As Worksheet macro nos vamos a Macros y luego en el nombre de la misma y le
asignamos una combinación.
For Each mihoja In Worksheets
Option Explicit
If mihoja.Name = “Balance_anual” Then
Sub funciones_integradas()
Mihoja.Select
Dim micelda As Range, z As Boolean
End If
For Each micelda In Selection
Next mihoja
If WorksheetFunction.IsText (micelda) Then Var1 = InputBox(“Introduce el primer nro”, “Valor 1”, “Introduce
aquí”, 1, 1)
Z = True
Var2 = InputBox(“Introduce el segundo nro”, “Valor 2”, “Introduce
End If
aquí”)
Next micelda
MsgBox “La suma de los números es “ & var1 + var2
If z = True Then
End Sub
Valor = MsgBox (“Hay texto en el rango Commented [eym3]:
Sub trabajo_hojas()
seleccionado” & vbCrLf & “. ¿Deseas continuar?”, 4)
Dim n_hoja As String
If valor = vbYes Then
n_hoja = InputBox(“En qué año quieres trabajar”)
MsgBox WorksheetFunction.Sum(Selection)
Worksheets(n_hoja).Visible = True
Else
End Sub
MsgBox “No se realizará la suma”
Evento: Hace referencia a cúando quiero que se ejecute el código.
End If
‘Queremos que el código se ejecute cuando abrimos la hoja
Else
(Evento: abrir el libro).
MsgBox WorksheetFunction.Sum(Selection)
Primero creamos hojas con nombre 2010 2011 2012 2013 y un
End If Bienvenida. Los hacemos invisible con VBA menos Bienvenida.

End Sub Para ello vamos al objeto ThisWorkbook (doble cick), el cual va a
responder dado el evento
Funciones predefinidas II.
Se escoge el objeto (Worbook) y el evento en las ventanas
Option Explicit Commented [eym4]:
desplegables.
Sub uso_inputbox() Option Explicit
Dim var1 As Integer, var2 As Integer ‘Evento BeforeClose

Commented [eym5]:
Private Sub Workbook_BeforeClose (Cancel As Boolean) Sub control_flujo1()

ActiveSheet.Visible = False ‘Me oculta la hoja activa On Error Goto etiqueta ‘Para control de errores

ActiveWorkbook.Close (True) ‘Guarda el libro con los cambios en la Dim edad As Integer
hoja donde se trabajó
Edad = InputBox(“Introduce tu edad”, “”)
End Sub
If edad < 18 Then
‘Evento Open
MsgBox “Eres menor de edad”
Private Sub Workbook_open()
End If
Dim n_hoja As String
If edad >= 18 Then
n_hoja = InputBox (“En qué año quieres trabajar”)
MsgBox “Eres mayor de edad”
Worksheets (n_hoja).Visible = True
End If
Worksheets (n_hoja).Select

End Sub
Etiqueta :

MsgBox “No se que edad tienes”


 Estructuras de control de flujo: IF
End Sub
* Condicionales: If – Then, Select - case
 Condicional If.
Commented [eym7]:
* Bucles:
Option Explicit
Determinados: For – Next, For – each - next
Sub control_flujo1()
Indeterminados: Do – loop, While – wend, Do – until
On Error Goto etiqueta ‘Para control de errores
* Goto: Usado generalmente para control de errors.
Dim edad As Integer
‘If Then:
Edad = InputBox(“Introduce tu edad”, “”)
Option Explicit
If edad < 18 Then For Each micelda In Selection

MsgBox “Eres menor de edad” If micelda.Offset(0,1).Value > 500 and micelda.Offset(0,1).Value <
1000 Then
Else
Micelda.Offset(0,2).Value = micelda.Value +
MsgBox “Eres mayor de edad”
micelda.Offset(0,1)*0.02
End If
Elseif micelda.Offset(0,1).Value >= 1000 and
Etiqueta : micelda.Offset(0,1).Value < 2000 Then

MsgBox “No se que edad tienes” Micelda.Offset(0,2).Value = micelda.Value +


micelda.Offset(0,1)*0.04
End Sub
Else

Micelda.Offset(0,2).Value = micelda.Value +
micelda.Offset(0,1)*0.07

End If
‘Calcularemos la comisión de los trabajadores según sus número Next micelda
de ventas
End Sub

‘Finalmente le asignamos una combinación de teclas a este


procedimiento Ctrl + K

 If - Select Case.

Sub calculocomision2()

Dim micelda As Range

Sub calculocomision() For Each micelda In Selection

Dim micelda As Range Select Case micelda.Offset(0,1)


Case 500 To 999

Micelda.Offset(0,2).Value = micelda.Value +
micelda.Offset(0,1)*0.02

Case 1000 To 2000

Micelda.Offset(0,2).Value = micelda.Value +
micelda.Offset(0,1)*0.04

Case Else Option Explicit


Micelda.Offset(0,2).Value = micelda.Value + ‘Click sobre el botón en la hoja de cálculo
micelda.Offset(0,1)*0.07
Private Sub CommandButton1_Click() ‘Click() es un evento
End Select
Micombo.Clear
Next micelda
Dim fila As Integer
End Sub
Fila = 3

While Cells(fila,”D”).Value <> “” ‘Diferente de cadena vacía. ‘Value


 Bucle en VBA: While (indeterminado) se puede obviar

Micombo.AddItem Cells(fila, “D”).Value

Fila = fila + 1

Wend

End Sub

 Aplicación de BUCLES. Juego. Ejercicio Repaso I.


Range(“f2”).Offset(fila, 0).Value = “El n° es más
alto”

ElseIf aleatorio < minum And minum >=1 And minum <=100
Then

Range(“f2”).Offset(fila, 0).Value = “El n° es más


Option Explicit
bajo”
Private Sub CommandButton1_Click() ‘El evento puede ser doble
ElseIf aleatorio = minum Then
click (DbClick)

On Error Goto etiqueta ‘etiqueta es un marcador, una línea al cual With Range(“f2”).Offset(fila, 0)
se redirige el proceso ‘Range(“f2”).Offset(fila, 0).Value = “Correcto”

.Value = “Correcto”
´On Error Resume Next ‘Ignora error y sigue adelante
.Font.Color = vbRed Commented [eym8]:
Dim aleatorio As Integer, minum As Integer, fila As Integer

Aleatorio = Math.Rnd * 100 ‘rnd es una función del objeto Math .Font.Size = 36
(solo tiene métodos) ‘Además se puede probar en la ventana End With
inmediato
Else
‘Debug.Print aleatorio ( este imprime el aleatorio en la vent inmed)
MsgBox “El n° debe estar entre 0 y 100”
While aleatorio <> minum
Fila = fila + 1
Minum = InputBox(“Introduce un N° entre 1 y 100”,
“Introducción”,,150,150) End If

Range(“d2”).Offset(fila, 0).Value = minum ‘Ojo son Fila = fila + 1


instrucción Cells y Offset Range(“h3”).Value = fila
If aleatorio > minum And minum >=1 And minum <=100 Wend
Then
Exit Sub

Etiqueta:
MsgBox “No se permite texto” End Sub

Resume 0 ‘Le llevamos hacia atrás hasta la línea que


generó el error en este caso Inputbox
Private Sub CommandButton1_Click()
End Sub
Open “C:\Users\Juas…\paises.txt” For Input As #1
‘Procedimiento para borrar
Dim nlinea As Integer, lineatexto As String ‘En nlinea se almacena el
Private Sub CommandButton2_Click() n° y en lineatexto el texto del país

Range(“d2”).Select ‘Cuando se abre un archivo este es similar a una matriz. Commented [eym12]:
Filas/columnas comienzan desde 0
Range(Selection, Selection.End(xlDown)).Select
nlinea = 0
Range(“f2”).Select
‘Do While EOF(1) = False / Do Until EOF(1) = True
Range (Selection, Selection.End(xlDown)).Select
Do While Not EOF(1) = True ‘EOF es un método de objetos tipos
Selection.Clear
archivos. Indica que mientras no se llegue al final de la lista en el
Range (“h3”).Clear archivo se hará la acción que se le señalará

End Sub Line Input #1, lineatexto ‘Nos lee la línea activa del archivo
que por defecto es la primera. Luego se almacena en lineatexto
 Bucle Do - Loop
micombo.AddItem lineatexto
‘Do loop While
nlinea = nlinea + 1
Option Explicit Commented [eym9]:
Loop
Private Sub CommandButton1_Click()
Close #1 ‘Cerramos el archive para ahorrar recursos
Do While Not IsEmpty(ActiveCell)
End Sub
Micombo.AddItem ActiveCell.Value
Private Sub CommandButton2_Click()
ActiveCell.Offset(1,0).Select
Micombo.Clear
Loop

Commented [eym10]:
End Sub

 Procedimientos en VBA
Set nombre_usuario = CreateObject (“Wscript.Network”)

‘MsgBox nombre_usuario.UserName

‘MsgBox nombre_usuario.Userdomain

If nombre_usuario.UserName = “Juan” Then

MsgBox “Bienvenido al libro” &


nombre_usuario.UserName

Else

Application.Quit

End If

End Sub

‘Un procedimiento dentro del objeto ThisWorkbook

Option Explicit

Private Sub WorkBook_Open() ‘Evento Open

Call detecta_usuario

End Sub

Hay otras propiedades de la biblioteca Wscript.Network que se l le


puede asignar al objeto nombre_usuario tales computername: si
se está trabajando en una computadora del trabajo, userdomain:
asegura que el archivo no se abre en una red diferente al nuestro.
Option Explicit ‘No trabajar con un libro que no está a pantalla completa
Sub detecta_usuario() ‘Evento: Libro cambie de tamaño
Dim nombre_usuario As Object ‘Objeto: Libro
Option Explicit PASO DE ARGUMENTOS.

Sub maximiza_siempre() Argumentos: Datos/Valores que recibe un procedimiento para


utilizarlos en las instrucciones de su interior.
ActiveWindow.WindowState = xlMaximized ‘No dejará
redimensionar la ventana Tipo de valores que puede recibir: Variables, constantes, matrices,
objetos.
End Sub
Option Explicit
Sub guardar_cambios()
Sub llama_a_suma ()
ActiveWorkbook.Save
Dim op1 As Integer, op2 As Integer
End Sub
Op1 = InputBox(“Introduce primer n°”)
‘En el objeto ThisWorkBook
Op2 = InputBox(“Introduce Segundo n°”)
Option Explicit
Call suma(op1, op2)
Private Sub Workbook_BeforeClose (Cancel As Boolean)
End Sub
Call guardar_cambios
‘OBS: En VBA no existe la sobrecarga de procedimientos. Es decir
End Sub
procedimientos con diferentes nros de argumentos e iguales
Private Sub Workbook_WindowsResize(ByVal Wh As Window) nombres

‘Para que se observe el procedimiento podemos agregar Sub suma (operador1 As Integer, operador2 As Integer)

‘ MsgBox “No se permite trabajar con tamaño que no sea maximizar MsgBox “La suma de los números es “ & operador1 + operador2”

Call maximiza_siempre MsgBox “Trabajo terminado”

End Sub End Sub

‘Sub suma (operador1 As Integer, operador2 As Integer, operador3


As Integer)
‘MsgBox “La suma de los números es “ & operador1 + operador2”
‘End Sub
End Sub

‘Paso de parámetros. ‘Se debe tener cuidado cuando se ejecuta con f5 pues la variable
resultado sigue acumulando sumas anteriores. Se debe para la
‘Hacemos un procedimiento que pueda abrirse en cualquier libro.
ejecución y volver hacerla.

‘Por último creamos un nuevo grupo en la pestaña mi curso para


ejecutar el procedimiento mi_suma. Commented [eym14]:

‘Cerramos el libro, guardamos la macro. Al abrir cualquier otro libro


poder ejecutar el procedimiento mi_suma desde la pestaña

Option Explicit

Dim resultado As Integer

Sub recoge_rango ()
 TRABAJO CON PROCEDIMIENTOS Práctica guiada. Commented [eym15]:
Dim micelda As Range
‘EXTRAEREMOS INFORMACIÓN DE UNA BD. ADEMÁS
For Each micelda In Selection
OCULTAREMOS LAS HOJAS ARTÍCULOS Y CRITERIOS. FILTRO
Call realiza_suma (micelda.Value) AVANZADO.

micelda.select ‘Se nombra el rango BD como mibase. Se hace un combo Activex al


cual se le cambia de nombre c_paises
Next micelda
‘Se trabaja con el objeto ThisWorkbook. El evento Open
ActiveCell.Offset(2, 0).Value = resultado
Option Explicit
End Sub
Private Sub Workbook_Open() Commented [eym16]:
Sub realiza_suma(valor_celda As Integer)
With Worksheets(”Resultados”).c_paises
resultado = resultado + valor_celda
.AddItem “China”

Commented [eym17]:
.AddItem “Italia”

.AddItem “USA”

.AddItem “Marruecos”

.AddItem “España”

.AddItem “Japón”

.AddItem “Suecia” ‘Poner en el combo la lista de países a través del uso de filtro
avanzado y leer cada uno de ellos con for each.
End With
Option Explicit
End Sub
Private Sub Workbook_Open()

Range(“mibase”).AdvancedFilter Action:=xlFilterCopy,
CopyToRange:=Range( _ “Criterios!Extract”), Unique:=True

Worksheets(“Criterios”).Select

Range(“h2”).Select

Range(Selection, Selection.End(xlDown)).Select

Dim micelda As Range

‘Este proceso de filtrar los nombres de países sin repetición lo For Each micelda In Selection
realizaremos con ayuda de la grabadora Worksheets(“Resultados”).c_paises.AddItem micelda.Value

Next micelda

Worksheets(“Resultados”).Select

Worksheets(“Articulos”).Visible = xlSheetHidden

Worksheets(“Criterios”).Visible = xlSheetHidden
End Sub ‘Módulos:

‘Al guarder y cerrar el libro y volver a abrirlo (Open) tenemos: ‘COMBO:

Option Explicit

Sub rellena_combo()

Worksheets(“Criterios”).Select

Range(“h2”).Select

Range(Selection, Selection.End(xlDown)).Select

Dim micelda As Range

For Each micelda In Selection


‘Ahora llamaremos desde el ThisWorkbook los procedimientos
rellena_combo y filtra_paises guardado en módulos del libro en Worksheets(“Resultados”).c_paises.AddItem micelda.Value
que trabajamos.
Next micelda

Worksheets(“Resultados”).Select

Worksheets(“Articulos”).Visible = xlSheetHidden

Worksheets(“Criterios”).Visible = xlSheetHidden

End Sub

‘FILTRADO:

Option Explicit

Sub filtra_paises()

Range(“mibase”).AdvancedFilter Action:=xlFilterCopy,
CopyToRange:=Range( _ “Criterios!Extract

End Sub
‘ En el objeto ThisWorkbook Range(“A1”).CurrentRegion.Select

Option Explicit Selection.Clear ‘Para eliminar información anterior

Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.ScreenUpdating = False ‘Se evita el parpadeo al cambiar
a diferentes países en el combo. No hay refresco de pantalla
Worksheets(“Articulos”).Visible = xlSheetVisible
Worksheets(“Criterios”).Visible = xlSheetVisible ‘Hacemos visible la
Worksheets(“Criterios”).Visible = xlSheetVisible
hoja Criterios
Range(“A1”).CurrentRegion.Select
Worksheets(“Articulos”).Visible = xlSheetVisible
Selection.Clear
Worksheets(“Criterios”).Range(“d2”).Value = combo_paises.Value
Range(“A1”).Selection
Call filtro_final
ActiveWorkBook.Save
Worksheets(“Articulos”).Value = xlSheetVeryHidden ‘Ponemos
End Sub VeryHidden para que no aparezca la opción mostrar luego de un
cambio en el combo.
Private Sub Workbook_Open()
Worksheets(“Criterios”).Value = xlSheetVeryHidden
Call filtra_paises
Range(“A1”).Select
Call rellena_combo
End Sub
End Sub
‘ Al guardar este libro y abrirla se generará un error en tiempo de
ejecución. El problema es con el módulo Combo pues requiere que
‘En modo diseño hacemos doble click en el combo. se muestre las hojas Articulos y Criterios.

‘Hacemos esto para hacer acciones desde el combo ‘ Para ello en procedimiento en ThisWorkbook hacemos uso del
evento BeforeClose con la intención de volver a mostrar las hojas
Option Explicit ocultas antes de cerrar.
‘ Este procedimiento c_paises se guarda en el objeto hoja1

Private Sub c_paises_Click() ‘Evento click en el combo


Commented [eym20]:
Option Explicit

Sub filtro_final()

‘ Macro1 Macro

Range(“mibase”).AdvancedFilter Action:=xlFilterCopy,
CriteriaRange:=Sheets(_”Criterios”).Range(“A1:E2”),
CopyToRange:=Range(“A1”), Unique:=False

End Sub

‘ Por ultimo ocultamos las hojas Articulos y Criterios desde el


explorador de proyectos y la ventana de propiedades de VBA

‘ Se graba un filtrado avanzado. Le cambiamos el nombre del


modulo donde esta la macro1 como FiltraBase
‘Podemos proteger los procedimientos

CREAR FORMULARIOS.
Obs: forma model: solo se usa el formulario y lo
demás en segundo plano no se puede manejar
Nro 27.

‘Cambios en las propiedades del formulario

‘Usamos el evento initialize del objeto formulario


‘Doble click en el formulario para ir VBA
Option Explicit

Private Sub combo_paises_Click()

Range(“A1”).CurrentRegion.Select

Selection.Clear ‘Para eliminar información anterior

‘Application.ScreenUpdating = False

Worksheets(“Criterios”).Visible = xlSheetVisible ‘Hacemos visible la


hoja Criterios
Worksheets(“Articulos”).Visible = xlSheetVisible Worksheets(“Articulos”).Visible = xlSheetHidden

Worksheets(“Criterios”).Range(“d2”).Value = c_paises.Value Worksheets(“Criterios”).Visible = xlSheetHidden

Call filtro_final

Worksheets(“Articulos”).Value = xlSheetVeryHidden ‘Ponemos End Sub


VeryHidden para que no aparezca la opción mostrar luego de un
 Grabador de Macros
cambio en el combo.

Worksheets(“Criterios”).Value = xlSheetVeryHidden

Range(“A1”).Select

End Sub

Private Sub Userform_Initialize()

Worksheets(“Criterios).Visible=xlSheetVisible

Worksheets(“Criterios”).Select

Range(“h2”).Select - Se graba el proceso. Se para la grabadora. Nos vamos a


Macros y lo ejecutamos
Range(Selection, Selection.End(xlDown)).Select
- Creamos un botón de comando. Doble click y nos
Dim micelda As Range manda al editor del VBA.
Private Sub CommandButton1_Click()
For Each micelda In Selection
Hoja1.Cells(1,1)=”youtube”
combo_paises.AddItem micelda.Value ‘Le damos un nombre al End Sub
combo del formulario: combo_paises
Se quita el modo de diseño y se ejecuta la macro desde
Next micelda el botón.
Worksheets(“Resultados”).Select
 Insertar Botón de comando. Doble clic.
Commented [eym21]:
Celda = Inputbox(“Seleccione la celda de destino”,
- Declaración de variables en las que se van a guardar la “Selección de Celda”)
información que se requiere, con el proceso respectivo. Texto = inputbox(“Ingrese su nombre” & Chr(13) & “y Commented [eym23]: Chr(13) es equivalente al enter
apellido”, ” Entrada de Datos”)
Private Sub CommandButton1_Click()
Dim Texto As String ActiveSheet.Range(Celda) = Texto
Texto = inputbox(“Ingrese su nombre” & Chr(13) & “y Commented [eym22]: Chr(13) es equivalente al enter
apellido”, ” Entrada de Datos”) End Sub
ActiveSheet.Range(“A1) = Texto
End Sub

 Declaración de BUCLES.

Private Sub CommandButton1_Click()


For n = 1 to 10
(Caja de mensaje) MsgBox (“n = ” & n)
La declaración de la variable es importante porque permite Next n
ahorrar espacio (por default una variable sin declarar es una End Sub
de tipo VARIANT la cual ocupa mucho espacio en memoria).
Option Explicit
Sentencia Option Explicit. Private Sub CommandButton1_Click()
Dim Fila As Integer
- Generalizando el proceso desde el inputbox Dim Columna As Integer
Dim n As Integer
Option Explicit Fila = 1
Private Sub CommandButton1_Click() Columna = 1
Dim Celda As String For n =1 to 10 step 1
Dim Texto As String ActiveSheet.Cells(Fila, Columns) = n
Fila = Fila + 1
Next n
End Sub

Dado los siguientes datos:

Option Explicit
Private Sub CommandButton1_Click()
Dim Fila As Integer
Dim Columna As Integer
Columna = 2
- Deseamos marcar con una fuente y un fondo las ventas For fila =2 to 13 step 1
que cumplen cierta condición.
If ActiveSheet.Cells(Fila,
Para ello primero hacemos una grabadora para sacar los Columna).value < 3200 Then
códigos del color del fondo y de la fuente. Activesheet.cells(Fila,
Columna).Select

With Selection.Interior
.
.
.
End With
End If

Next fila
End Sub
 Creando formularios.

Un formulario es una ventana que se programa por medio de


controles que se diseñan programando.

En la ventana Editor VBA---Insertar---User Form

Se le llama al formulario Registro de Clientes

Inicio---Dar formato de tabla.

Commented [eym24]:

Private Sub btn_Finalizar_Click()

End Sub

Private Sub btn_Registrar_Click()

ActiveSheet.cells(8,1) Commented [eym25]:

Selection.Entirerow.Insert

Activesheet.cells(8,1) = TextBox1

Activesheet.cells(8,2) = textbox2

% Limpiar caja de texto

Commented [eym26]:
Textbox1 = Empty

Textbox2= Empty

Textbox1.setfocus

% se graba una macro “ORDENAR” que permita ordenar los


registros

Ordenar ‘ Llamada de la macro


CREANDO procedimientos FUNCIONES.
End Sub
VBA Excel 2013 #5 y #6
- Insertamos un nuevo modulo.
% Nueva macro en modulo1
Function Ejemplo(n As Integer) As Integer
% Sub Agregar()
Ejemplo = n * 4
Load form_clientes ‘Cargamos el formulario
End Function
Form_cliente.show ‘Mostramos el
formulario - Otro ejemplo. Una función numérica y de texto.

% End Sub Function nEvaluar(j As Integer, Optional Mayusculas As Boolean) As


String

nEvaluar = IIF(j >= 1000, “cantidad grande”, “cantidad


% Se asigna la macro Agregar a un cuadro de texto
pequeña”)
llamado Registro de clientes
nEvaluar = IIF(Mayusculas, Ucase(nEvaluar), nEvaluar)
% Se da clik y se carga el formulario
End Function

Commented [eym27]: