Como crear una macro, que seleccione una imagen del equipo al clicar en un botón y luego la muestre en el mismo formulario.

Hola, es mi primera pregunta en esta página, espero estar haciéndolo en el lugar correcto. En primer lugar saludos a todos. Mi pregunta va dirigida a Dante Amor. Tengo en un formulario, lo que ves en la imagen, y me pareció muy interesante una opción que encontré tuya donde al clicar en el botón Examinar, se abre la ventana del sistema para que selecciones una imagen, y al hacerlo te permite moverla de carpeta, funciona a la perfección pero, ¿qué debería modificar en ese mismo código para que, cuando diga que no quiero mover el archivo, en lugar de cerrarse el formulario, la imagen seleccionada se muestre en el Objeto Image (recuadro superior del botón)?, muchas gracias anticipadas por la gran labor que realizas ayudando con tus respuestas y por supuesto con tus post. Enhorabuena.

3 Respuestas

Respuesta
2

Te anexo la macro

En esta línea de la macro revisa el nombre de tu image, cambia Image1 por el nombre de tu control

Image1.Picture = LoadPicture(imag)


Private Sub CommandButton1_Click()
'Por.Dante Amor
    imag = Application.GetOpenFilename(FileFilter:= _
            "Imágenes (*.gif;*.jpg;*.jpeg;*.bmp; *.png), *.gif;*.jpg;*.jpeg;*.bmp; *.png", _
            Title:="Selecciona una imagen", MultiSelect:=False)
    If imag <> False Then
        arch = LTrim(Mid(imag, 1 + InStrRev(imag, "\")))
        If MsgBox("Quieres mover el archivo", vbYesNo) = vbYes Then
            ruta = ThisWorkbook.Path
            Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
            With fldr
                .Title = "Selecciona la carpeta destino"
                .AllowMultiSelect = False
                .InitialFileName = ruta
                If .Show <> -1 Then Exit Sub
                cp = .SelectedItems(1)
            End With
            On Error GoTo sincopia
            FileCopy imag, cp & "\" & arch
            Kill imag
            MsgBox "El Archivo se cambió de carpeta"
        Else
            Image1.Picture = LoadPicture(imag)
        End If
    End If
    Exit Sub
sincopia:
    MsgBox "El archivo no se pudo mover"
End Sub

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

Hola de nuevo Dante Amor. Como puedes ver, creo que si no me he dejado nada, cambié todo lo necesario tal y como ves en la imagen, y funciona a la perfección (aunque la imagen no se ve completa en el recuadro, me imagino que por cuestión de dimensiones, aunque eso imagino que sería otro tema), pero si subo una png me da error, en cambio con jpg y gif me va bien, me parece extraño ya que png también está incluida arriba con el resto de extensiones. Nuevamente gracias.

Disculpa, olvidé comentar que la primera llamada al principio del código a la macro MostrarImagen, no hace nada, simplemente es una macro vacía, que dejé preparada por si se me ocurría otra forma de solucionarlo, gracias.

Si bien las png se ven en la lista, me parece que el formato png no se carga en un control image.

¡Gracias! Muchas gracias por las explicaciones Dante Amor y por el dato del png, curioso, pero, imagino que habrá alguna forma ¿cierto?

Respuesta
1

La solución fue la que me diste en el comentario tal y como ves en el código, millones de gracias.
Pero me lo marca como error, si subo un archivo png, en cambio con jpg y gif va bien, raro porque más arriba donde están definidas las extensiones de las imágenes también está png.

Respuesta
1

Dices:

(Aunque la imagen no se ve completa en el recuadro, me imagino que por cuestión de dimensiones,

Coloca la propiedad del cuadro Imagen1 Picture en 1

Quería decir la propiedad PictureSizeMode en 1

Mil gracias Joaom Manuel fantástico aporte el de PictureSizeMode en valor 1, me funcionó a la perfección, algo que pensé que sería complicado buscar en el código y mira por donde desde Propiedades y con un simple click genial. Esa ventana de Propiedades es fantástica, si supiera todo lo que indica en cada elemento estoy seguro que lograría muchas cosas que imagino complicadas, al igual que solucioné esta gracias a tu dato. Un excelente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas