Form para buscar y eliminar articulo e imagen (vba excel)

Tengo un form funcional pero no puedo eliminar la imagen asociada del articulo eliminado.

Coloco una imagen de como tengo el código de ese botón (cmb_eliminar):

CReo que falla el trozo de "arch=" no consigo hacerlo funcionar.

¿Alguna ayuda?

1 Respuesta

Respuesta
1

Y qué hace el código, es decir, hasta dónde llega. Ejecuta el comando Kill o siempre te aparece el mensaje "No hay imagen para eliminar"

Puedes poner un ejemplo de lo que tienes en tu listbox. Y también puedes poner un ejemplo de cómo se ve el archivo con el explorador de windows. Lo que quiero ver es qué nombre aparece en el listbox y qué nombre aparece en tu carpeta.

¿Estás seguro que el archivo es jpg o jpeg?

El código solo se ejecuta hasta el mensaje de articulo eliminado. No me da la opción de eliminar la imagen.

La imagen esta asociada mediante el nombre del articulo, el mismo nombre que sale en el listbox tiene la imagen. Y si, son jpg p jpeg.

Pongo una captura:

Puedes poner el código, pero no en imagen.

Cómo estás cargando el listbox. Pon el código completo para ver cómo haces la carga. No lo pongas como imagen.

¿En cuál columna de la hoja tienes el nombre del archivo o en cuál columna del listbox tienes el nombre del archivo?

Dim h1
'
Private Sub cmb_eliminar_Click()
  'Por.Dante Amor
  If txt_buscar.Value = "" Then
        MsgBox "Escribe un dato a buscar.", vbInformation, "fjpg GAMES"
        Exit Sub
    End If
    If ListBox1.ListIndex = -1 Then
        MsgBox "Selecciona un artículo.", vbInformation, "fjpg GAMES"
        Exit Sub
    End If
    fila = ListBox1.List(ListBox1.ListIndex, 7)
    If (MsgBox("¿Se eliminará el artículo seleccionado?.", vbCritical + vbYesNo, "fjpg GAMES") = vbYes) Then
        h1.Rows(fila).Delete
        MsgBox "Artículo eliminado.", vbInformation, "fjpg GAMES"
 '====================================================================================================       
  ''' ESTA PARTE CREO QUE ES LA QUE FALLA      
        ruta = ThisWorkbook.Path & "\imagenes\"
        arch = fila & ".jpg"
            If (MsgBox("¿Quieres eliminar la imagen del artículo eliminado?.", vbCritical + vbYesNo, "fjpg GAMES") = vbYes) Then
                    If Dir(ruta & arch) <> "" Then
                        Kill ruta & arch
                        img_articulo_buscar.Picture = Nothing
                    MsgBox "Se eliminó la imagen del artículo eliminado.", vbInformation, "fjpg GAMES"
            Else
                    MsgBox "No hay imagen para eliminar.", vbInformation, "fjpg GAMES"
            End If
        End If
    Else
        Cancel = 1
    End If
 '=======================================================================================================   
    txt_buscar = ""
    ListBox1.Clear
End Sub
Private Sub cmb_volver_Click()
Unload Me
End Sub
Private Sub cmb_buscar_Click()
'Por.Dante Amor
    ListBox1.Clear
    If txt_buscar.Value = "" Then
        MsgBox "Escribe un dato a buscar.", vbInformation, "fjpg GAMES"
        Exit Sub
    End If
    '
    Set r = h1.Columns("B")
    Set b = r.Find(txt_buscar, LookAt:=xlPart)
    If Not b Is Nothing Then
        celda = b.Address
        Do
            'detalle
            ListBox1.AddItem h1.Cells(b.Row, "A")
            ListBox1.List(ListBox1.ListCount - 1, 1) = h1.Cells(b.Row, "B")
            ListBox1.List(ListBox1.ListCount - 1, 2) = h1.Cells(b.Row, "C")
            ListBox1.List(ListBox1.ListCount - 1, 3) = h1.Cells(b.Row, "D")
            ListBox1.List(ListBox1.ListCount - 1, 4) = h1.Cells(b.Row, "E")
            ListBox1.List(ListBox1.ListCount - 1, 5) = h1.Cells(b.Row, "F")
            ListBox1.List(ListBox1.ListCount - 1, 6) = h1.Cells(b.Row, "G")
            ListBox1.List(ListBox1.ListCount - 1, 7) = b.Row
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
End Sub
Private Sub cmb_modificar_Click()
    If txt_buscar.Value = "" Then
        MsgBox "Escribe un dato a buscar.", vbInformation, "fjpg GAMES"
        Exit Sub
    End If
    'Por.Dante Amor
    If ListBox1.ListIndex = -1 Then
        MsgBox "Selecciona un artículo.", vbInformation, "fjpg GAMES"
        Exit Sub
    End If
    Unload Me
    With frm_articulos_modificar2
        .fila = ListBox1.List(ListBox1.ListIndex, 7)
        .Show
    End With
    '
    txt_buscar = ""
    ListBox1.Clear
End Sub
Private Sub lb_volver_Click()
Unload Me
End Sub
Private Sub ListBox1_Click()
'Por.Dante Amor
    ruta = ThisWorkbook.Path & "\Imagenes\"
    arch = ListBox1.List(ListBox1.ListIndex, 1) & ".jpg"
    If Dir(ruta & arch) <> "" Then
        img_articulo_buscar.Picture = LoadPicture(ruta & arch)
        img_articulo_buscar.PictureSizeMode = fmPictureSizeModeStretch
    Else
        If Dir(ruta & "0000.jpg") <> "" Then
            img_articulo_buscar.Picture = LoadPicture(ruta & "0000.jpg")
            img_articulo_buscar.PictureSizeMode = fmPictureSizeModeStretch
        End If
    End If
End Sub
Private Sub txt_buscar_Change()
    If txt_buscar.Value = "" Then
        ListBox1.Clear
        cmb_modificar.Enabled = False
        cmb_eliminar.Enabled = False
    Else
        cmb_modificar.Enabled = True
        cmb_eliminar.Enabled = True
        Exit Sub
    End If
End Sub
'
Private Sub UserForm_Activate()
    Set h1 = Sheets("ARTICULOS")
    Sheets(2).Select
    Range("A2").Select
    txt_buscar.SetFocus
    cmb_modificar.Enabled = False
    cmb_eliminar.Enabled = False
End Sub

Este es el codigo que tengo en el form, me funciona todo, excepto la eliminacion de la imagen del articulo eliminado.

El nombre lo tengo en la columna 2 y en el listbox también es en la columna 2.

El código es una adaptación suya de otra vez que me ayudó.

Con esta instrucción identifica en cuál fila de la hoja se encuentra el registro que tienes marcado en el listbox.

fila = ListBox1.List(ListBox1.ListIndex, 7)

Pero para saber el nombre del archivo tienes que traerlo de la celda, por ejemplo:

arch = h1.Cells(fila, "B").Value & ".jpg"

Con eso, en la variable arch estoy poniendo el dato que tienes en la celda "B" y el número de fila

Entonces quedaría así:

Private Sub cmb_eliminar_Click()
  'Por.Dante Amor
  If txt_buscar.Value = "" Then
        MsgBox "Escribe un dato a buscar.", vbInformation, "fjpg GAMES"
        Exit Sub
    End If
    If ListBox1.ListIndex = -1 Then
        MsgBox "Selecciona un artículo.", vbInformation, "fjpg GAMES"
        Exit Sub
    End If
    fila = ListBox1.List(ListBox1.ListIndex, 7)
    arch = h1.Cells(fila, "B").Value & ".jpg"
    If (MsgBox("¿Se eliminará el artículo seleccionado?.", vbCritical + vbYesNo, "fjpg GAMES") = vbYes) Then
        h1.Rows(fila).Delete
        MsgBox "Artículo eliminado.", vbInformation, "fjpg GAMES"
        ruta = ThisWorkbook.Path & "\imagenes\"
        If (MsgBox("¿Quieres eliminar la imagen del artículo eliminado?.", vbCritical + vbYesNo, "fjpg GAMES") = vbYes) Then
            If Dir(ruta & arch) <> "" Then
                Kill ruta & arch
                img_articulo_buscar.Picture = Nothing
                MsgBox "Se eliminó la imagen del artículo eliminado.", vbInformation, "fjpg GAMES"
            Else
                MsgBox "No hay imagen para eliminar.", vbInformation, "fjpg GAMES"
            End If
        End If
    Else
        Cancel = 1
    End If
    txt_buscar = ""
    ListBox1.Clear
End Sub

Cuando hagas la prueba ve ejecutando línea por línea y me dices hasta dónde llega la macro. o si te envía algún error, qué dice el error y en cuál línea se detiene.

¡Gracias!

Va perfecto!

Elimina el articulo seleccionado. Y después elimina la imagen de la carpeta o salta el mensaje si no tiene imagen.

MUCHAS GRACIAS!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas