Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
Grabadora:
Organizando el código. ‘Range(“b5”).Interior.Color = rgb(125,200,250)
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 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 mihoja
End Sub
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 “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
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
If - Select Case.
Sub calculocomision2()
Micelda.Offset(0,2).Value = micelda.Value +
micelda.Offset(0,1)*0.02
Micelda.Offset(0,2).Value = micelda.Value +
micelda.Offset(0,1)*0.04
Fila = fila + 1
Wend
End Sub
ElseIf aleatorio < minum And minum >=1 And minum <=100
Then
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
Etiqueta:
MsgBox “No se permite texto” End Sub
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
Else
Application.Quit
End If
End Sub
Option Explicit
Call detecta_usuario
End Sub
‘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”
‘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.
Option Explicit
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.
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
‘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:
Option Explicit
Sub rellena_combo()
Worksheets(“Criterios”).Select
Range(“h2”).Select
Range(Selection, Selection.End(xlDown)).Select
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
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
Sub filtro_final()
‘ Macro1 Macro
Range(“mibase”).AdvancedFilter Action:=xlFilterCopy,
CriteriaRange:=Sheets(_”Criterios”).Range(“A1:E2”),
CopyToRange:=Range(“A1”), Unique:=False
End Sub
CREAR FORMULARIOS.
Obs: forma model: solo se usa el formulario y lo
demás en segundo plano no se puede manejar
Nro 27.
Range(“A1”).CurrentRegion.Select
‘Application.ScreenUpdating = False
Call filtro_final
Worksheets(“Criterios”).Value = xlSheetVeryHidden
Range(“A1”).Select
End Sub
Worksheets(“Criterios).Visible=xlSheetVisible
Worksheets(“Criterios”).Select
Declaración de BUCLES.
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.
Commented [eym24]:
End Sub
Selection.Entirerow.Insert
Activesheet.cells(8,1) = TextBox1
Activesheet.cells(8,2) = textbox2
Commented [eym26]:
Textbox1 = Empty
Textbox2= Empty
Textbox1.setfocus
Commented [eym27]: