Formulario de Alta y Búsqueda de Registros Incluyendo Imágenes en Excel

7
Formulario de alta y búsqueda de registros incluyendo imágenes 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 Exce l, ahora les comparto un ejemplo donde hacemos uso del control Imagen de vba para poder mostrar imágenes en un formulario. Cómo funciona Tenemos una tabla de Excel donde insertaremos datos de Super héroes, tales como su Nombre, de qué Editorial  provienen, Comentarios, además de insertar la ruta de nuestra PC donde se aloja la Imagen correspondiente. Figura 1. Tabla de Super héroes con imágenes. Alta de registros Lo interesante de este formulario es que tendremos la opción de elegir una imagen para cada registros que daremos de alta. El listado de imágenes 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 botón para seleccionar ima gen.

Transcript of Formulario de Alta y Búsqueda de Registros Incluyendo Imágenes en Excel

Formulario de alta y bsqueda de registros incluyendo imgenes en ExcelPublished on16 April, 2014 bySergio Alejandro CamposinBases de datos,Excel vba,Forms,FormulariosSiguiendo con el tema debase de datos en Excel, ahora les comparto un ejemplo donde hacemos uso del controlImagendevbapara poder mostrar imgenes en un formulario.Cmo funcionaTenemos una tabla de Excel donde insertaremos datos de Super hroes, tales como suNombre, de quEditorialprovienen,Comentarios, adems de insertar la ruta de nuestra PC donde se aloja laImagencorrespondiente.

Figura 1. Tabla de Super hroes con imgenes.Alta de registrosLo 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 unListBoxdonde 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 botnSeleccionar (imagen)se muestra un formulario donde habr unListBoxy tendremos vista previa de nuestras imgenes. Para mostrar la imagen se utiliz el controlImageny con su propiedadLoadPicturetomamos la ruta completa de la imagen y se carga en el control.Nota:Para este ejemplo las imgenes deben cargarse en la carpetaimagenesen la misma ubicacin del archivo.

Figura 3. Al elegir una imagen de la lista tendremos la vista previa.Bsqueda de registrosCuando tenemos nuestra tabla con registros, ahora veremos el detalle de cada registro con el formularioBsqueda de Sper hroes.Este formulario tiene unComboBoxque es llenado con los datos de la columnaNombrede 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 funcinBUSCARV (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 vbaMacros de mdulo normalPublic PathImagenes As StringPublic RutaImagen As String'PathImagenes = ActiveWorkbook.Path & "\imagenes\" as String''Ruta ListFiles donde especificamos la ruta de la carpeta a buscarSub ListFiles()iRow = 2Call ListMyFiles(PathImagenes, False)End Sub''Rutina que llena el ListBox de las imgenesSub ListMyFiles(mySourcePath, IncludeSubfolders)Dim Cuenta As IntegerOn Error GoTo ErroresSet MyObject = New Scripting.FileSystemObjectSet MySource = MyObject.GetFolder(mySourcePath)'On Error Resume NextRuta = ListBox1.txtRutaExt1 = "png"Ext = "jpg"Cuenta = 0For 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 IfNextIf IncludeSubfolders Then For Each MySubFolder In MySource.SubFolders Call ListMyFiles(MySubFolder.Path, True) NextEnd IfExit SubErrores:'MsgBox "Ha ocurrido un error: " & Err.Description & ".", vbExclamation, "EXCELeINFO"End Sub''Cada que demos click en un elemento del ListBox llamar a esta macroSub 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 iEnd WithEnd SubFormulario Alta'Mostrar el formulario de imgenesPrivate Sub CommandButton1_Click()frmImagenes.ShowEnd Sub''Macro para alta de registrosPrivate Sub CommandButton2_Click()'Declaracin de variables'Dim strTitulo As StringDim Continuar As StringDim TransRowRng As RangeDim NewRow As IntegerDim 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 MeEnd IfEnd Sub''Cerrar el formuarioPrivate Sub CommandButton3_Click()Unload MeEnd Sub''Al iniciar el formularioPrivate Sub UserForm_Initialize()PathImagenes = ActiveWorkbook.Path & "\imagenes\"Me.txtComentarios.MultiLine = TrueMe.txtComentarios.ScrollBars = fmScrollBarsVerticalEnd SubFormulario Bsqueda'Al elegir un elemento del Combo se manda llamar la funcin BUSCARVPrivate Sub cmbNombres_Change()On Error Resume NextMe.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 0End Sub''Cerrar el formularioPrivate Sub CommandButton3_Click()Unload MeEnd Sub''Al iniciar el formularioPrivate Sub UserForm_Initialize()Me.cmbNombres.RowSource = "lstNombres"Me.txtComentarios.MultiLine = TrueMe.txtComentarios.ScrollBars = fmScrollBarsVerticalMe.txtEditorial.Locked = TrueMe.txtComentarios.Locked = TrueEnd SubFormulario Imgenes'Cerrar el formularioPrivate Sub CommandButton1_Click()Unload MeEnd Sub''Al dar click en cada opcin del ListBoxPrivate Sub ListBox1_Click()Call MostrarImagenEnd Sub''Al iniciar el formularioPrivate Sub UserForm_Initialize()Call ListFilesWith Me .ListBox1.ColumnCount = 2 .ListBox1.ColumnWidths = "0 pt;100 pt" .imgPicture.Height = 150 .imgPicture.Width = 170 .imgPicture.PictureSizeMode = fmPictureSizeModeStretchEnd WithEnd SubAnexos