Anda di halaman 1dari 7

Formulario de alta y bsqueda de registros

incluyendo imgenes en Excel


Published on 16 April, 2014 by Sergio Alejandro Campos in Bases de datos, Excel vba, Forms, Formularios
Siguiendo con el tema de base de datos en Excel, ahora les comparto un ejemplo donde hacemos uso del
control Imagen de vba para poder mostrar imgenes en un formulario.
Cmo funciona
Tenemos una tabla de Excel donde insertaremos datos de Super hroes, tales como suNombre, de
qu Editorial provienen, Comentarios, adems de insertar la ruta de nuestra PC donde se aloja
la Imagen correspondiente.

Figura 1. Tabla de Super hroes con imgenes.
Alta de registros
Lo interesante de este formulario es que tendremos la opcin de elegir una imagen para cada registros
que daremos de alta. El listado de imgenes se mostrar en un ListBox donde tendremos una vista previa
de cada imagen al elegir cada una de la lista.

Figura 2. Formulario de alta de registros con botn para seleccionar imagen.
Al dar click en el botn Seleccionar (imagen) se muestra un formulario donde habr unListBox y
tendremos vista previa de nuestras imgenes. Para mostrar la imagen se utiliz el control Imagen y con
su propiedad LoadPicture tomamos la ruta completa de la imagen y se carga en el control.
Nota: Para este ejemplo las imgenes deben cargarse en la carpeta imagenes en la misma
ubicacin del archivo.

Figura 3. Al elegir una imagen de la lista tendremos la vista previa.
Bsqueda de registros
Cuando tenemos nuestra tabla con registros, ahora veremos el detalle de cada registro con el
formulario Bsqueda de Sper hroes.
Este formulario tiene un ComboBox que es llenado con los datos de la columna Nombre de la tabla y
cada vez que elegimos un elemento del Combo se llenan los datos correspondiente y se muestra la
imagen. El Combo manda llamar la funcin BUSCARV (VLOOKUP).
Para que se muestre la imagen ser indispensable que la ruta que est en la columna IMAGEN de la
tabla, sea correcta.

Figura 4. Formulario para mostrar registros de una tabla y su imagen correspondiente.
Cdigo vba
Macros de mdulo normal
Public PathImagenes As String
Public RutaImagen As String
'PathImagenes = ActiveWorkbook.Path & "\imagenes\" as String
'
'Ruta ListFiles donde especificamos la ruta de la carpeta a buscar
Sub ListFiles()
iRow = 2
Call ListMyFiles(PathImagenes, False)
End Sub
'
'Rutina que llena el ListBox de las imgenes
Sub ListMyFiles(mySourcePath, IncludeSubfolders)
Dim Cuenta As Integer
On Error GoTo Errores
Set MyObject = New Scripting.FileSystemObject
Set MySource = MyObject.GetFolder(mySourcePath)
'
On Error Resume Next
Ruta = ListBox1.txtRuta
Ext1 = "png"
Ext = "jpg"
Cuenta = 0
For Each myFile In MySource.Files
With Application.WorksheetFunction
Extension = .Trim(Right(.Substitute(myFile.Name, ".", .Rept(" ", 500)), 500))
End With
If Ext1 = Extension Or Ext = Extension Then
With frmImagenes
.ListBox1.AddItem myFile.Path
.ListBox1.List(.ListBox1.ListCount - 1, 1) = myFile.Name
End With
Else
End If
Next
If IncludeSubfolders Then
For Each MySubFolder In MySource.SubFolders
Call ListMyFiles(MySubFolder.Path, True)
Next
End If
Exit Sub
Errores:
'
MsgBox "Ha ocurrido un error: " & Err.Description & ".", vbExclamation, "EXCELeINFO"
End Sub
'
'Cada que demos click en un elemento del ListBox llamar a esta macro
Sub MostrarImagen()
With frmImagenes
Cuenta = .ListBox1.ListCount
For i = 0 To Cuenta - 1
If .ListBox1.Selected(i) Then
.imgPicture.Picture = LoadPicture(PathImagenes & .ListBox1.List(i, 1))
frmAlta.txtNombreImagen.Caption = .ListBox1.List(i, 1)
RutaImagen = .ListBox1.List(i, 0)
End If
Next i
End With
End Sub
Formulario Alta
'Mostrar el formulario de imgenes
Private Sub CommandButton1_Click()
frmImagenes.Show
End Sub
'
'Macro para alta de registros
Private Sub CommandButton2_Click()
'Declaracin de variables
'
Dim strTitulo As String
Dim Continuar As String
Dim TransRowRng As Range
Dim NewRow As Integer
Dim Limpiar As String
'
strTitulo = "EXCELeINFO"
'
Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo)
If Continuar = vbNo Then Exit Sub
'
Cuenta = Application.WorksheetFunction.CountIf(Range("A:A"), Me.txtNombre)
'
If Cuenta > 0 Then
'
MsgBox "Nombre'" & Me.txtNombre & "' ya se encuentra registrado", vbExclamation, strTitulo
'
Else
'
Set TransRowRng = ThisWorkbook.Worksheets("Super").Cells(1, 1).CurrentRegion
NewRow = TransRowRng.Rows.Count + 1
With ThisWorkbook.Worksheets("Super")
'NOMBRE
.Cells(NewRow, 1).Value = Me.txtNombre.Value
'EDITORIAL
.Cells(NewRow, 2).Value = Me.txtEditorial.Value
'COMENTARIOS
.Cells(NewRow, 3).Value = Me.txtComentarios.Value
'IMAGEN
.Cells(NewRow, 4).Value = RutaImagen
End With
'
MsgBox "Alta exitosa.", vbInformation, strTitulo
'
Unload Me
End If
End Sub
'
'Cerrar el formuario
Private Sub CommandButton3_Click()
Unload Me
End Sub
'
'Al iniciar el formulario
Private Sub UserForm_Initialize()
PathImagenes = ActiveWorkbook.Path & "\imagenes\"
Me.txtComentarios.MultiLine = True
Me.txtComentarios.ScrollBars = fmScrollBarsVertical
End Sub
Formulario Bsqueda
'Al elegir un elemento del Combo se manda llamar la funcin BUSCARV
Private Sub cmbNombres_Change()
On Error Resume Next
Me.txtEditorial = Application.WorksheetFunction.VLookup(Me.cmbNombres.Value, _
Sheets("Super").Range("A1:D100"), 2, 0)
Me.txtComentarios = Application.WorksheetFunction.VLookup(Me.cmbNombres.Value, _
Sheets("Super").Range("A1:D100"), 3, 0)
Me.imgPicture.Picture =
LoadPicture(Application.WorksheetFunction.VLookup(Me.cmbNombres.Value, _
Sheets("Super").Range("A1:D100"), 4, 0))
On Error GoTo 0
End Sub
'
'Cerrar el formulario
Private Sub CommandButton3_Click()
Unload Me
End Sub
'
'Al iniciar el formulario
Private Sub UserForm_Initialize()
Me.cmbNombres.RowSource = "lstNombres"
Me.txtComentarios.MultiLine = True
Me.txtComentarios.ScrollBars = fmScrollBarsVertical
Me.txtEditorial.Locked = True
Me.txtComentarios.Locked = True
End Sub
Formulario Imgenes
'Cerrar el formulario
Private Sub CommandButton1_Click()
Unload Me
End Sub
'
'Al dar click en cada opcin del ListBox
Private Sub ListBox1_Click()
Call MostrarImagen
End Sub
'
'Al iniciar el formulario
Private Sub UserForm_Initialize()
Call ListFiles
With Me
.ListBox1.ColumnCount = 2
.ListBox1.ColumnWidths = "0 pt;100 pt"
.imgPicture.Height = 150
.imgPicture.Width = 170
.imgPicture.PictureSizeMode = fmPictureSizeModeStretch
End With
End Sub
Anexos