Hacer un catálogo de imágenes en excel usando un userform

Esperando se encuentren de lo mejor, y ojala puedan apoyarme con un problema que tengo, tratando de programar un userform en excel 2016; estoy buscando hacer un un registro de todas las piezas que componen a una maquina, creando un userform para registrar cada pieza de la maquina con su nombre, código, numero de pieza, etc, haciendo así una base de datos en una hoja de excel, pero estoy tratando de agregar también la imagen de la pieza, es decir que cada ves que haga un registro con ayuda de un botón guardar, también guarde la imagen de la pieza.

Como puedo programar un botón en la misma userform, para que, cada vez que lo use me abra una ruta de carpeta especifica para seleccionar la imagen que quiero asignar al registro( la pieza), y así guardar el registro con los datos de la pieza y su imagen de la misma. De igual forma mostrarla en el mismo userform, que al tiempo que ya seleccione la imagen me la muestre en un imagecontrol que inserte en la userform, para así verificar que la imagen que seleccione sea la correcta y así poder guardarla.

1 Respuesta

Respuesta
2

Te anexo el código. Sigue las indicaciones

1. Crea un control Image1,

2. Crea un control Label1

3. Inserta la siguiente línea en tu evento Activate:

Private Sub UserForm_Activate()
    Label1.Caption = ""
End Sub

4. En un botón, para cargar la imagen pon lo siguiente:

Private Sub CommandButton1_Click()
'Por.Dante Amor
    'cargar imagen en Image1
    Label1.Caption = ""
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Seleccione archivo de excel"
        .Filters.Clear
        .Filters.Add "Todos", "*.*"
        .Filters.Add "JPG", "*.j*"
        .Filters.Add "BMP", "*.bm*"
        .Filters.Add "GIF", "*.gif"
        .Filters.Add "PNG", "*.pn*"
        .FilterIndex = 2
        .AllowMultiSelect = False
        .InitialFileName = ThisWorkbook.Path & "\"
        '.Show
        If .Show Then
            nombre = .SelectedItems.Item(1)
            Label1.Caption = nombre
            Image1.Picture = LoadPicture(nombre)
        End If
    End With
End Sub

5. En otro botón para pasar el registro a la hoja pon lo siguiente, cambia el nombre de la hoja "Registro" por el nombre de tu hoja. Ajusta la fila en la que quieras insertar el registro. El nombre del archivo se inserta en la columna J y la imagen en la columna K, ajusta las columnas.

Private Sub CommandButton2_Click()
'Por.Dante Amor
    Set h1 = Sheets("Registro")                         'hoja de registos
    fila = h1.Range("A" & Rows.Count).End(xlUp).Row     'fila para insertar registro
    '
    'insertar imagen en la celda
    archivo = Label1.Caption
    If Dir(archivo) <> "" Then
        H1. Cells(fila, "J").Value = archivo             'en la col "J" se pone el nombre del archivo
        With h1.Cells(fila, "K")                        'en la col "K" se pone la imagen
            arr = .Top + 1
            izq = .Left + 1
            anc = .Width - 2
            alt = .Height - 2
        End With
        Set imagen = h1.Pictures.Insert(archivo)
        With imagen
            .ShapeRange.LockAspectRatio = msoFalse
            .Top = arr
            .Left = izq
            .Width = anc
            .Height = alt
        End With
    End If
    'fin insertar imagen en la celda
    '
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Gracias, me resulto increíble la ayuda, me has sacado de un gran apuro; ya solo quería preguntar una cosa más, y es que quería saber y sien lugar de registrar la imagen como tal, se registrara la ubicación, para no saturar la hoja de excel y solo mantener la ubicación del archivo.

La ubicación y nombre del archivo están en el Label1

En esta línea de la macro se pone el dato

H1. Cells(fila, "J").Value = archivo             'en la col "J" se pone el nombre

Borra las otras líneas:

        With h1.Cells(fila, "K")                        'en la col "K" se pone la imagen
            arr = .Top + 1
            izq = .Left + 1
            anc = .Width - 2
            alt = .Height - 2
        End With
        Set imagen = h1.Pictures.Insert(archivo)
        With imagen
            .ShapeRange.LockAspectRatio = msoFalse
            .Top = arr
            .Left = izq
            .Width = anc
            .Height = alt
        End With

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas