You are on page 1of 18

Visual Basic applicaction

TUTORIAL Visual Basic Application


Microsoft VBA (Visual Basic for Applications) es el lenguaje de macros de Microsoft Visual
Basic que se utiliza para programar aplicaciones Windows y que se incluye en varias
aplicaciones Microsoft. VBA permite a usuarios y programadores ampliar la funcionalidad de
programas de la suite Microsoft Office. Visual Basic para Aplicaciones es un subconjunto casi
completo de Visual Basic 5.0 y 6.0.
Microsoft VBA viene integrado en aplicaciones de Microsoft Office, como Word, Excel, Access
y Powerpoint. Prcticamente cualquier cosa que se pueda programar en Visual Basic 5.0 o 6.0
se puede hacer tambin dentro de un documento de Office, con la sola limitacin que el
producto final no se puede compilar separadamente del documento, hoja o base de datos en
que fue creado; es decir, se convierte en una macro (o ms bien sper macro). Esta macro
puede instalarse o distribuirse con slo copiar el documento, presentacin o base de datos.
Su utilidad principal es automatizar tareas cotidianas, as como crear aplicaciones y servicios
de bases de datos para el escritorio. Permite acceder a las funcionalidades de un lenguaje
orientado a eventos con acceso a la API de Windows.

El objeto Workbook y el objeto Worksheet


El objeto Workbook representa un libro de Excel y el objeto Worksheet representa una hoja de
un libro de Excel. Como sabemos, un libro de Excel puede tener ms de una hoja lo cual
significa que un objeto Workbook puede contener ms de un objeto Worksheet.
Ya que no hay lmite en el nmero de hojas que puede tener un libro, se volvera complicado
organizar esta relacin entre los objetos Workbook y Worksheet y por esta razn se crearon
las colecciones de objetos. De esta manera un objeto Workbook tiene asociada una coleccin
de objetos Worksheets la cual contiene los objetos Worksheet que representan las hojas de
ese libro de Excel.
De la misma manera, el objeto Application no tiene asignados directamente todos los libros de
Excel sino que tiene una coleccin de objetos Workbooks la cual incluir todos los objetos
Workbook de los libros de Excel que abramos en nuestro cdigo VBA.

Abrir un libro de Excel


Para abrir un libro de Excel en VBA podemos utilizar el mtodo Open del objeto Workbooks de
la siguiente manera:
Application.Workbooks.Open Filename:="C:Libro1.xlsx"
ThisWorkbook.Save
Boton Cerrar
ActiveWorkbook.Close SaveChanges:=True
Esta instruccin abrir el archivo ubicado en C:Libro1.xlsx y lo agregar a la coleccin de
objetos Workbooks. De esta manera podemos abrir tantos archivos como sean necesarios y

Ing. Juan Zevallos

Pgina 1

Visual Basic applicaction


para cada uno de ellos se crear un objeto Workbook el cual ser almacenado dentro de
Workbooks.

Hacer referencia a un libro en VBA


Una vez que hemos abierto los archivos que necesitamos podremos hacer referencia a cada
uno de ellos a travs de la coleccin de objetos Workbooks de la siguiente manera:
Application.Workbooks(1).Activate

El nmero que observas dentro de los parntesis indica el ndice del objeto Workbook dentro
de la coleccin de objetos Workbooks. De manera predeterminada el ndice 1 ser para el
libro de Excel que contiene el cdigo VBA y a partir de ah la numeracin ser de acuerdo al
orden en que hayamos abierto otros archivos.
Si conocemos el nombre del libro podemos utilizarlo en lugar del ndice y tener una instruccin
como la siguiente:
Application.Workbooks("Libro1.xlsx").Activate

La coleccin de objetos Workbooks nos permitir acceder a todos los libros que hayamos
abierto dentro de nuestra aplicacin VBA.

Acceder las hojas de un libro


De igual manera podemos acceder las hojas de cualquier libro a travs de su coleccin de
objetos Worksheets. Esta coleccin tambin puede ser accedida por el ndice de cada una
de las hojas del libro:
Application.Workbooks(1).Worksheets(1).Range("A1").Value = "Hola"

Esta instruccin accede a la hoja con el ndice 1 y coloca el valor Hola Mundo en la celda
A1. Tambin podemos acceder a una hoja a travs de su nombre en caso de que lo
conozcamos:
Application.Workbooks(1).Worksheets("Hoja1").Range("A1").Value = "Hola"

Agregar una nueva hoja


A travs de la coleccin de objetos Worksheets podemos crear nuevas hojas en un libro.
Observa la siguiente instruccin:
Worksheets.Add

Ing. Juan Zevallos

Pgina 2

Visual Basic applicaction


Observa que no he iniciado la instruccin anterior con el objeto Application, ni tampoco est
precedida por el objeto Workbooks. Esta es una sintaxis aceptable dentro de VBA e indica que
se agregar una nueva hoja al libro que est activo en ese momento. Este es un mtodo
abreviado que podemos utilizar si estamos seguros de que el libro activo es el libro al que
deseamos agregar una nueva hoja. De lo contrario, podemos especificar tota la ruta completa:
Application.Workbooks("Libro1.xlsx").Worksheets.Add

Ahora ya sabemos que VBA tiene un objeto para representar los libros de Excel (Workbook) y
otro objeto para representar las hojas de un libro (Worksheet). Ambos tipos de objetos son
almacenados dentro de colecciones de objetos que son conocidas como Workbooks, que se
refiere a la coleccin de libros que se han abierto y Worksheets que es la coleccin de hojas
que pertenecen a un determinado libro.

Range :

A un conjunto de celdas.

A una celda en concreto.

A toda una fila / columna.

A celdas de otras hojas.

Como propiedades el objeto Range tiene las siguientes:

ActiveCell->representa la primera celda activa de la ventana activa (windowactive) o especificada.

Areas->todos los rangos de una selecin mltiple.

Cells->representa a una celda o cleccin de ellas.

Columns->representa las columnas de la hoja activa,o especificada, o del rango especificado.

Entire column/row->la columna/fila entera dentro del rango.

End->la celda situada al final del rango especificado.

Offset->la celda desplazada segn un n especfico de fila/columna.

Este ejemplo usa un cuadro de mensaje para mostrar el valor de la celda activa. Puesto que la propiedad
ActiveCell falla si la hoja no es una hoja de clculo, el ejemplo activara la Hoja1 antes de utilizar la propiedad
ActiveCell.

Worksheets(Hoja1).Activate

MsgBox ActiveCell.Value

En este ejemplo se cambia el formato de fuente de la celda active.


Worksheets(Hoja1).Activate

With ActiveCell.Font

.Bold=True

.Italic=True

End With

Ing. Juan Zevallos

Pgina 3

Visual Basic applicaction

Una celda slo:

Un conjunto de celdas contiguas dentro de la misma hoja:

Range(A1).Select
Range(A1:G5).Select

Para seleccionar celdas no contiguas:


Range(A1,A5,B4).Select

Para seleccionar celdas no contiguas ms un conjunto contiguo:


Range(A1,A5,B4:B8).Select

Recorre todas las celdas del rango A2 hasta A5 y muestra el valor de cada celda.

For Each c In Worksheets("Hoja3").Range("A2:A5")


MsgBox c.Value
Next c
Dim rango As Range
Set rango = Worksheets("Hoja1").Range("B5:B14")
Dim mayor As Double
Dim menor As Double
mayor = Application.WorksheetFunction.Max(rango)
menor = Application.WorksheetFunction.Min(rango)
MsgBox (Str(mayor) + Chr(13) + Str(menor))
Worksheets("Hoja1").Range("B12:B12").Formula = "=SUMA(B2:B11)"
ActiveCell.Offset(5, 5) = 35
Ejemplo:

Sub ejemplo()
ejemplos del empleo de range y cells
escribo Hola en varias celdas de la hoja 2
Worksheets(Hoja2).Range(A1:B5) = Hola
lo mismo pero en celdas discontinuas
Worksheets(1).Range(F1, G5) = Hi
ahora en la hoja 2
Worksheets(Hoja2).Range(J1, K3, H5) = AAA
ActiveCell.Offset(2, 2) = Me desplazo 2 filas y 2 columnas
End Sub

Utilice la propiedad Rows o Columns para trabajar con filas o columnas enteras. Estas propiedades
devuelven un objeto Range que representa un rango de celdas. En el siguiente ejemplo, Rows(1)

Ing. Juan Zevallos

Pgina 4

Visual Basic applicaction

devuelve la fila uno de la Hoja1. A continuacin, la propiedad Bold del objeto Font del rango se
establece en True.

Sub FilaNegrita()
Worksheets(Hoja1).Rows(1).Font.Bold = True
End Sub

Establecer el valor de una celda

Para establecer el valor de una celda podemos utilizar alguna de las siguientes
instrucciones:

Range("B5").Value = 500
Cells(5, 2).Value = 600

Ventaja del objeto Cells

Es mucho ms comn encontrarse el objeto Range en las aplicaciones VBA, sin


embargo el objeto Cells ofrece una ventaja que debemos considerar cuando
necesitamos hacer un recorrido programtico por varias celdas ya que ser muy
sencillo especificar las filas y columnas utilizando una variable numrica.

For i = 1 To 10
For j = 1 To 5
Cells(i, j).Value = i * j
Next j
Next i

Ejemplo :

Ing. Juan Zevallos

Pgina 5

Visual Basic applicaction

Solucin:
Private Sub ComboBox1_Change()
Dim mes As String
mes = Me.ComboBox1.Value
Dim Finding As Range
Set Finding = Range("A2:A13").Find(What:=mes, LookAt:=xlWhole, SearchOrder:=xlByColumns,
SearchDirection:=xlNext, MatchCase:=False)
If Finding Is Nothing Then
MsgBox "No existe"
Exit Sub
End If
Finding.Activate
B1 = ActiveCell.Offset(0, 1).Value
Me.TextBox1.Text = Cells(ActiveCell.Row, 2).Value
Me.TextBox2.Text = Cells(ActiveCell.Row, 3).Value
End Sub

Private Sub UserForm_Initialize()


Workbooks(1).Sheets("Hoja4").Select
For Each c In Sheets("Hoja4").Range("A2:A13")
Me.ComboBox1.AddItem c
Next
End Sub

Cmo seleccionar una celda en la hoja activa


Para seleccionar la celda D5 en la hoja activa, puede utilizar cualquiera de los ejemplos siguientes:
ActiveSheet.Cells(5, 4).Select

Ing. Juan Zevallos

Pgina 6

Visual Basic applicaction

-o bienActiveSheet.Range("D5").Select

2. Cmo seleccionar una celda en otra hoja del mismo libro


Para seleccionar la celda E6 en otra hoja del mismo libro, puede utilizar cualquiera de los ejemplos siguientes:
Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
-o bienApplication.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))
O bien, puede activar la hoja y usar el mtodo 1 anterior para seleccionar la celda:
Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select

3. Cmo seleccionar una celda en una hoja de un libro diferente


Para seleccionar la celda F7 en una hoja de un libro diferente, puede utilizar cualquiera de los ejemplos
siguientes:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Hoja1").Cells(7, 6)
-o bienApplication.Goto Workbooks("BOOK2.XLS").Sheets("Hoja1").Range("F7")
O bien, puede activar la hoja y usar el mtodo 1 anterior para seleccionar la celda:
Workbooks("BOOK2.XLS").Sheets("Hoja1").Activate
ActiveSheet.Cells(7, 6).Select

4. Cmo seleccionar un rango de celdas en la hoja activa


Para seleccionar el rango C2:D10 en la hoja activa, puede utilizar cualquiera de los ejemplos siguientes:
ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select
ActiveSheet.Range("C2:D10").Select
ActiveSheet.Range("C2", "D10").Select

5. Cmo seleccionar un rango de celdas en otra hoja del mismo


libro

Ing. Juan Zevallos

Pgina 7

Visual Basic applicaction

Para seleccionar el rango D3:E11 en otra hoja del mismo libro, puede utilizar cualquiera de los ejemplos
siguientes:
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11")
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11")
O bien, puede activar la hoja y usar el mtodo 4 anterior para seleccionar el rango:
Sheets("Sheet3").Activate
ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select

6. Cmo seleccionar un rango de celdas en una hoja de un libro


diferente
Para seleccionar el rango E4:F12 en una hoja de otro libro, puede utilizar cualquiera de los ejemplos
siguientes:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Hoja1").Range("E4:F12")
Application.Goto _
Workbooks("BOOK2.XLS").Sheets("Hoja1").Range("E4", "F12")
O bien, puede activar la hoja y usar el mtodo 4 anterior para seleccionar el rango:
Workbooks("BOOK2.XLS").Sheets("Hoja1").Activate
ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).Select

7. Cmo seleccionar un rango con nombre en la hoja activa


Para seleccionar el rango con nombre "Test" de la hoja activa, puede utilizar cualquiera de los ejemplos
siguientes:
Range("Test").Select
Application.Goto "Test"

8. Cmo seleccionar un rango con nombre en otra hoja del mismo


libro
Para seleccionar el rango con nombre "Test" en otra hoja del mismo libro, puede utilizar el ejemplo siguiente:
Application.Goto Sheets("Hoja1").Range("Test")
O bien, puede activar la hoja y usar el mtodo 7 anterior para seleccionar el rango con nombre:
Sheets("Hoja1").Activate
Range("Test").Select

Ing. Juan Zevallos

Pgina 8

Visual Basic applicaction

9. Cmo seleccionar un rango con nombre en una hoja de un libro


diferente
Para seleccionar el rango con nombre "Test" en una hoja de otro libro, puede utilizar el ejemplo siguiente:
Application.Goto _
Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")
O bien, puede activar la hoja y usar el mtodo 7 anterior para seleccionar el rango con nombre:
Workbooks("BOOK2.XLS").Sheets("Sheet2").Activate
Range("Test").Select

10. Cmo seleccionar una celda relativa a la celda activa


Para seleccionar una celda que se encuentra cinco filas ms abajo y cuatro columnas a la izquierda de la
celda activa, puede utilizar el ejemplo siguiente:
ActiveCell.Offset(5, -4).Select
Para seleccionar una celda que se encuentra dos filas ms arriba y tres columnas a la derecha de la celda
activa, puede utilizar el ejemplo siguiente:
ActiveCell.Offset(-2, 3).Select
Nota: se producir un error si intenta seleccionar una celda que est "fuera de la hoja de clculo". El primer
ejemplo anterior devolver un error si la celda activa se encuentra entre en las columnas A y D, ya que si se
mueve cuatro columnas a la izquierda, la celda activa se desplazara a una direccin de celda no vlida.

11. Cmo seleccionar una celda relativa a otra celda (que no sea la
celda activa)
Para seleccionar una celda que se encuentra cinco filas ms abajo y cuatro columnas a la derecha de la celda
C7, puede utilizar cualquiera de los ejemplos siguientes:
ActiveSheet.Cells(7, 3).Offset(5, 4).Select
ActiveSheet.Range("C7").Offset(5, 4).Select

12. Cmo seleccionar un rango de celdas separadas por un rango


especfico
Para seleccionar un rango de celdas que sea del mismo tamao que el rango con nombre "Test" pero que
estn desplazadas cuatro filas ms abajo y tres columnas a la derecha, puede utilizar el ejemplo siguiente:
ActiveSheet.Range("Test").Offset(4, 3).Select

Ing. Juan Zevallos

Pgina 9

Visual Basic applicaction

Si el rango con nombre est en otra hoja (que no sea la activa), active primero esa hoja y, a continuacin,
seleccione el rango con el ejemplo siguiente:
Sheets("Sheet3").Activate
ActiveSheet.Range("Test").Offset(4, 3).Select

13. Cmo seleccionar un rango especificado y cambiar el tamao


de la seleccin
Para seleccionar el rango con nombre "Database" y, a continuacin, extender la seleccin cinco filas, puede
utilizar el ejemplo siguiente:
Range("Database").Select
Selection.Resize(Selection.Rows.Count + 5, _
Selection.Columns.Count).Select

14. Cmo seleccionar un rango especificado, desplazarlo y cambiar


su tamao
Para seleccionar un rango cuatro filas ms abajo y tres columnas a la derecha del rango con nombre
"Database" e incluir dos filas y una columna ms que el rango con nombre, puede utilizar el ejemplo siguiente:
Range("Database").Select
Selection.Offset(4, 3).Resize(Selection.Rows.Count + 2, _
Selection.Columns.Count + 1).Select

15. Cmo seleccionar la unin de dos o ms rangos especificados


Para seleccionar la unin (es decir, el rea combinada) de los dos rangos con nombre "Test" y "Sample",
puede utilizar el ejemplo siguiente:
Application.Union(Range("Test"), Range("Sample")).Select
Tenga en cuenta que ambos rangos deben estar en la misma hoja para que este ejemplo funcione. Observe
tambin que el mtodo Union no funciona entre diferentes hojas. Por ejemplo, esta lnea funciona
correctamente
Set y = Application.Union(Range("Hoja1!A1:B2"), Range("Hoja1!C3:D4"))
pero esta lnea
Set y = Application.Union(Range("Hoja1!A1:B2"), Range("Sheet2!C3:D4"))
devuelve el mensaje de error:
Error en la clase de aplicacin del mtodo Union

Ing. Juan Zevallos

Pgina 10

Visual Basic applicaction

16. Cmo seleccionar la ltima celda de una columna de datos


contiguos
Para seleccionar la ltima celda de una columna contigua, utilice el ejemplo siguiente:
ActiveSheet.Range("a1").End(xlDown).Select
Cuando este cdigo se utilice con la tabla de ejemplo, se seleccionar la celda A4.

18. Cmo seleccionar la celda en blanco en la parte inferior de una


columna de datos contiguos
Para seleccionar la celda situada debajo de un rango de celdas contiguas, utilice el ejemplo siguiente:
ActiveSheet.Range("a1").End(xlDown).Offset(1,0).Select
Cuando este cdigo se utilice con la tabla de ejemplo, se seleccionar la celda A5

19. Cmo seleccionar un rango completo de celdas contiguas en


una columna
Para seleccionar un rango de celdas contiguas en una columna, utilice uno de los ejemplos siguientes:
ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select
-o bienActiveSheet.Range("a1:" & ActiveSheet.Range("a1"). _
End(xlDown).Address).Select
Cuando este cdigo se utilice con la tabla de ejemplo, se seleccionarn las celdas A1 a A4.

20. Cmo seleccionar un rango completo de celdas que no sean


contiguas en una columna
Para seleccionar un rango de celdas que no sean contiguas en una columna, utilice uno de los ejemplos
siguientes:
ActiveSheet.Range("a1",ActiveSheet.Range("a65536").End(xlUp)).Select
-o bien-

Ing. Juan Zevallos

Pgina 11

Visual Basic applicaction

ActiveSheet.Range("a1:" & ActiveSheet.Range("a65536"). _


End(xlUp).Address).Select
Cuando este cdigo se utilice con la tabla de ejemplo, se seleccionarn las celdas A1 a A6.

21. Cmo seleccionar un rango rectangular de celdas


Para seleccionar un rango de celdas rectangular alrededor de una celda, utilice el mtodo
CurrentRegion. El rango seleccionado mediante el mtodo CurrentRegion es un rea limitada por
cualquier combinacin de filas en blanco y columnas vacas. A continuacin se muestra un ejemplo
de cmo utilizar el mtodo CurrentRegion:
ActiveSheet.Range("a1").CurrentRegion.Select
Este cdigo seleccionar las celdas entre A1 y C4. Otros ejemplos para seleccionar el mismo rango
de celdas son los siguientes:
ActiveSheet.Range("a1", _
ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select
-o bienActiveSheet.Range("a1:" & _
ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select
En algunos casos, es posible que desee seleccionar las celdas entre A1 y C6. En este ejemplo, el
mtodo CurrentRegion no funcionar porque hay una lnea en blanco en la fila 5. Los ejemplos
siguientes seleccionarn todas las celdas:
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
-o bienlastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1:" & _
ActiveSheet.Cells(lastRow, lastCol).Address).Select
Ejemplo:
Dim mainWorkBook As Workbook
Set mainWorkBook = ActiveWorkbook
With mainWorkBook.Sheets("Hoja1")
.Range("H2").Value = 5
.Range("I3").Value = 15
.Range("H2").Activate
End With

Ing. Juan Zevallos

Pgina 12

Visual Basic applicaction


ActiveCell.CurrentRegion.Select

NOTAS SOBRE LOS EJEMPLOS


Normalmente se puede omitir la propiedad ActiveSheet, ya que se considera implcita si una hoja
concreta no tiene nombre. Por ejemplo, en lugar de escribir
ActiveSheet.Range("D5").Select
Puede utilizar:
Range("D5").Select
Generalmente tambin se puede omitir la propiedad ActiveWorkbook. A menos que se nombre un
libro concreto, el libro activo se considera implcito.
Cuando use el mtodo Application.Goto, si desea utilizar dos mtodos Cells dentro del mtodo
Range cuando el rango especificado est en otra hoja (no en la activa), debe incluir el objeto Sheets
cada vez. Por ejemplo:
Application.Goto Sheets("Hoja1").Range( _
Sheets("Hoja1").Range(Sheets("Hoja1").Cells(2, 3), _
Sheets("Hoja1").Cells(4, 5)))

Para cualquier elemento entre comillas (por ejemplo, el rango con nombre "Prueba"),
tambin puede utilizar una variable cuyo valor sea una cadena de texto. Por ejemplo,
en lugar de escribir
ActiveWorkbook.Sheets("Hoja1").Activate

puede utilizar
ActiveWorkbook.Sheets(myVar).Activate

donde el valor de myVar es "Hoja1".

Ejemplo: El siguiente formulario permite agregar desde un formulario registros a una hoja.

Ing. Juan Zevallos

Pgina 13

Visual Basic applicaction

Private Sub CommandButton1_Click()


Sheets("articulos").Select
Range("A1").Activate
Selection.End(xlDown).Select
Dim pro As String
Dim pre As Double
Dim sto As Double
Dim dcto As Double
pro = Me.TextBox1.Text
pre = Val(Me.TextBox2.Text)
sto = Val(Me.TextBox3.Text)
dcto = Val(Me.TextBox4.Text)
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = pro
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = pre
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = sto
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = dcto
End Sub

Ing. Juan Zevallos

Pgina 14

Visual Basic applicaction

Ejemplo:

El siguiente demo presenta el uso de un formulario que permita iniciar sesin.

Dim con As Connection


Dim rs As Recordset
Dim cmd As Command
Private Sub btnAceptar_Click()
Dim user As String
Dim pwd As String
user = Me.txtuser.Text
pwd = Me.txtclave.Text
Set rs = New Recordset
Set cmd = New Command
cmd.CommandText = "select * from usuarios where loginname=? and clave=?"
cmd.ActiveConnection = con
cmd.Parameters.Append cmd.CreateParameter("loginname", adVarChar, adParamInput, 50, user)
cmd.Parameters.Append cmd.CreateParameter("clave", adVarChar, adParamInput, 50, pwd)
Set rs = cmd.Execute
If rs.EOF Then
MsgBox "Las credenciales no son vlidas", 0 + 64, "Error"
Else
frmLogin.Hide
End If
End Sub
Private Sub btnCancelar_Click()
Application.Workbooks(1).Close
Application.Quit
End Sub
Private Sub UserForm_Initialize()
Set con = New Connection
con.ConnectionString = "Provider=sqloledb;Data source=(local);Initial Catalog=Importadora;user
id=sa;pwd=meche"
con.Open

Ing. Juan Zevallos

Pgina 15

Visual Basic applicaction


End Sub
Ejemplo: Aqu presento un formulario que permite realizar el insertar y buscar registros en una tabla de la
base de datos.

Dim con As Connection


Dim Arr() As String
Private Sub btnTerminar_Click()
UserForm2.Hide
End Sub
Private Sub cbodis_Change()
Dim i As Integer
i = cbodis.ListIndex
MsgBox Arr(i)
End Sub
Private Sub CommandButton1_Click()
Sheets("articulos").Select
Range("A1").Activate
Selection.End(xlDown).Select
Dim pro As String
Dim pre As Double
Dim sto As Double
Dim dcto As Double
pro = Me.TextBox1.Text
pre = Val(Me.TextBox2.Text)
sto = Val(Me.TextBox3.Text)
dcto = Val(Me.TextBox4.Text)
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = pro

Ing. Juan Zevallos

Pgina 16

Visual Basic applicaction


ActiveCell.Offset(0, 1).Select
ActiveCell.Value = pre
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = sto
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = dcto
End Sub
Private Sub CommandButton2_Click()
Dim c As String
c = Me.txtcodigo.Value
Dim rs As Recordset
Set rs = New Recordset
Dim cmd As Command
Set cmd = New Command
cmd.CommandText = "select * from clientes where codcli=?"
cmd.ActiveConnection = con
Dim prm As Parameter
cmd.Parameters.Append cmd.CreateParameter("codcli", adInteger, adParamInput, , c)
'rs.CursorLocation = adUseClient
Set rs = cmd.Execute
If rs.EOF Then
Me.txtcliente.Value = ""
Me.txtdni.Value = ""
Me.txtruc.Value = ""
MsgBox "Codigo no existe", 0 + 32, "Error"
Me.txtcodigo.SetFocus
Else
Me.txtcliente.Value = rs.Fields(1)
Me.txtdni.Value = rs.Fields(2)
Me.txtruc.Value = rs.Fields(3)
End If
End Sub
Private Sub UserForm_Initialize()
'MsgBox ("Estableciendo conexion")
'Maximiza el formulario
'Application.ActiveWindow.WindowState = xlMaximized
'Me.Width = Application.Width
'Me.Height = Application.Height
Me.Caption = "Mantenimiento de Clientes"
On Error GoTo ex
Application.CommandBars("Standard").Visible = False
Application.CommandBars("Formatting").Visible = False
Application.CommandBars("Drawing").Visible = False
Set con = New Connection
con.ConnectionString = "Provider=sqloledb;Data source=(local);Initial Catalog=Importadora;user
id=sa;pwd=meche"
con.Open
Dim rsdis As New Recordset
Dim cmd As Command
Set cmd = New Command
cmd.CommandText = "select * from distritos"
cmd.ActiveConnection = con
rsdis.CursorLocation = adUseClient
Set rsdis = cmd.Execute
Static n As Integer
While Not rsdis.EOF
ReDim Preserve Arr(n)
Arr(n) = rsdis.Fields(0)
Me.cbodis.AddItem rsdis.Fields(1)

Ing. Juan Zevallos

Pgina 17

Visual Basic applicaction


rsdis.MoveNext
n=n+1
Wend
Exit Sub
ex:
MsgBox Err.Description
End Sub

Ing. Juan Zevallos

Pgina 18