Macro para borrar archivos error 424

Tengo una tabla donde recojo un montón de links a archivos de distintas carpetas, en cada carpeta siempre se repiten dos archivos que coinciden en las tres primeras letras, pero puede que hayan otros archivos que no me interesan, así que necesito una macro que de la tabla donde recojo los links y en base a la condición de las tres primeras letras, me elimine el resto de archivos sobrantes. Yo de momento tengo esta macro pero me da el error 424:

Private Sub CB7_Click()
Dim Archive_name, Olda_name As String
    With Sheets(1)
        For i = 2 To .Range("O1").End(xlDown).Row
            Archive_name = Cells(i, 16).Value
            Olda_name = Cells(i, 15).Value
            If Archive_name.Value <> "MD_" Then
            Kill Olda_name
            End If
        Next i
    End With
End Sub

La parte que me señala el error cuando le doy a depurar es la del "If"...

1 respuesta

Respuesta
3

Si lo que intentas comparar son los 3 primeros caracteres de cada archivo encontrado, la instrucción del If sería:

If Left(Archive_name, 3) <> "MD_" Then

En realidad para eso he creado una columna auxiliar donde ya aíslo los tres primeros caracteres, entonces en base a esta tabla:

Nombre de archivo               Ruta                      Auxiliar

PEPITO                              C:\lo que sea             PEP

MD_XX                              C:\lo que sea             MD_

ALFONSO                              C:\lo que sea             ALF

Necesito lo siguiente:

Si auxiliar es diferente de "MD_" que coja la ruta perteneciente a esa fila y elimine el archivo, así con todas las filas de la tabla, pero el código que he puesto yo me da error y no sé por qué....¿puede tener algo que ver con las variables que he nombrado? Es el error 424 que menciono más arriba.

Gracias!

Con la instrucción que te pasé te evitarías la col extra... se evalúan directamente los 3 1ros caracteres del nombre.

Ahora, si es para sacarte la duda, a la variable en tu instrucción quitale la parte del .value

If Archive_name <> "MD_" Then

Sdos!

Por supuesto que de quitar la col auxiliar, a la instrucción que guarda el nombre del archivo en la variable Archive_Name deberás ajustarle el nro de col ya que no será 16.

Sdos!

Muchas gracias!

Ahora parece que elimina los archivos, pero me los ha eliminado todos....no ha discriminado según la condición.....sabes cómo puedo hacer esto?¿

Un saludo y gracias!

El codigoo enviado esta probado en mi modelo y corre perfecto.

Tuenes que dejar de mido más claro tu ejemplo. ¿Lo más seguro es que estés evaluando mal las col 15? ¿16?

Deja una imagen donde se vean bien los encabezados de col para ajustar tu macro.

Sdios!

Yo tengo esto:

Para tu ejemplo así quedaría la macro, que es la que no necesita la col auxiliar P. Controla los 3 primeros caracteres de la col N, o sea 14.

Private Sub CB7_Click()
Dim Archive_name, Olda_name As String
    With Sheets(1)
        For i = 2 To .Range("O1").End(xlDown).Row
            Archive_name = Cells(i, 14).Value
            Olda_name = Cells(i, 15).Value
            If Left(Archive_name, 3) <> "MD_" Then
                Kill Olda_name
            End If
        Next i
    End With
End Sub

En mis pruebas que adjunto en imagen solo quedaron los archivos marcados con amarillo.

En tu caso el único archivo que NO se elimina es el último, que inicia con MD_... siempre y cuando no tenga un espacio delante.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas