Crear un macro para eliminar arhcivos

Quiero generar una macro en excel de forma tal que al ejecutarlo se borren tres archivos dos .xls y un .doc
Los nombre de archivos "hola.xls" "como va.xls" y "chau.doc"
No sabría como hacer para generar una sola macros para que borre los tres de una vez, trate con uno, mi entento fue:
Sub FileExists()
Dim fso
Dim file As String
file = "C:\hola.xls"
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(file) Then
MsgBox file & " was not located.", vbInformation, "File Not Found"
Else
MsgBox file & " has been located.", vbInformation, "File Found"
End If
End Sub
Sub DeleteFile()
Dim fso
Dim file As String
file = "C:\hola.xls"
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(file) Then
fso.DeleteFile file, True
Else
MsgBox file & " does not exist or has already been deleted!" _
, vbExclamation, "File not Found"
End If
End Sub
Esto funciona pero no se como hacer para que lo busque en todo el disco, solo lo borra en C:\hola.xls, por ejemplo si esta en el escritorio no lo borra.
En resumen:
¿Cómo armar una macro que busque archivos especificando el nombre, sin especificar su ubicación y los elimine?
¿Cómo hacer un macro que elimine los tres archivos?
La idea seria que cuando se abra el archivo se auto ejecute el macro y se ejecute el macro para proceder a la eliminación de archivos si y solo si la fecha actual es mayor a una fecha determinada especifica (por ejemplo 25/10/2010)

2 Respuestas

Respuesta
1
'
Se pueden hacer muchas cosas para lo que necesitas, pero el siguiente es un ejemplo que te puede servir y que espero que lo puedas personalizar a tu gusto.
'
'
1º MACRO PARA BORRAR UN FICHERO EN UN DISCO (O EN CUALQUIER CARPETA)
Te copio más abajo la macro "BuscaFicheroEnCarpeta()", que utiliza tres parámetros:
- Carpeta = para que indiques en qué carpeta buscar (si quieres buscar en todo el disco C, tendrás que poner "C:\")
- fichero = para que indiques el nombre del fichero
- sw_borrar = para que indiques si lo quieres borrar
'
También he creado otra macro que la llama "llama_a_macro()" para que te sirva de ejemplo y de pruebas. En ella está incluido el control de fecha, pero poniendo la fecha de hoy para que te funcione.
'
Me he permitido incluir una copia de seguridad del archivo borrado (la macro crea un archivo igual que el borrado pero añadiendo extensión ".bak").
'
'
2º AUTOEJECUCION DE LA MACRO
Tendrás que crearte una macro llamada Auto_Open()
Sub Auto_Open()
    llama_a_macro()
End Sub
'
'
Como te digo, es para que la personalices según tus necesidades. Espero que se entienda.
Si tienes alguna duda, no dudes en decírmelo.
'
Saludos
'
Angel
'
'
'
'
Function BuscaFicheroEnCarpeta(carpeta As String, fichero As String, sw_borrar As Boolean)
'  
   Dim fin_carpeta, sw_encontrado As Boolean
   Dim carpeta_nueva As String
   Dim fs_carpeta, fs_subcarpeta, sf1, sf
   Dim num_encontrados As Integer
'  
   fin_carpeta = False
'     
   On Error GoTo 1

   Set fs_carpeta = CreateObject("Scripting.FileSystemObject")
   Set fs_subcarpetas = fs_carpeta.GetFolder(carpeta).SubFolders
'  
   For Each f1 In fs_subcarpetas
       carpeta_nueva = carpeta + f1.Name + "\"
       If BuscaFicheroEnCarpeta(carpeta_nueva, fichero, sw_borrar) Then
          sw_encontrado = True
       End If
   Next
'       
1  fin_carpeta = True
'
   Set fs_fichero = CreateObject("Scripting.FileSystemObject")

   If fs_fichero.FileExists(carpeta + fichero) Then
        MsgBox ("encontrado en carpeta: " + carpeta)
        sw_encontrado = True
        If sw_borrar Then
           fs_fichero.Copyfile carpeta + fichero, carpeta + fichero + ".bak"
           fs_fichero.DeleteFile (carpeta + fichero)
           MsgBox ("borrado")
        End If
   End If
'  
   BuscaFicheroEnCarpeta = sw_encontrado
'
End Function
'
'
'
'
Function llama_a_macro()
    If Date >= "05/04/2010" Then
        If Not BuscaFicheroEnCarpeta("C:\", "salida.xml.bak", True) Then
               MsgBox ("No encontrado el fichero en la carpeta ni en sus subcarpetas")
        End If
    Else
        MsgBox ("No alcanzada todavía la fecha")
    End If
End Function
'
Gracias por tu respuesta, seguro es lo que necesito pero sabrás disculpar que soy novato en esto y no sabría como crearlo y aplicarlo a mi caso... digamos: lo copio y lo puego y no funciona. Seguro que el problema soy yo, ¿podrías ayudarme? Desde ya mil gracias
Dices que no te funciona, pero necesito algo más de información.
'
1º Confirma que tienes las tres macros creadas:
Auto_Open()
BuscaFicheroEnCarpeta()
llama_a_macro()
'
2º En la macro Auto_Open() sobran los paréntesis siguientes:
'
ASI NO:
Sub Auto_Open()
    llama_a_macro()
End Sub
'
ASI SI:
Sub Auto_Open()
    llama_a_macro
End Sub
'
3º Una vez que corrijas esto último, cierra el archivo y ábrelo de nuevo. Debería mostrarte el mensaje de "No encontrado el fichero en la carpeta ni en sus subcarpetas".
'
En caso de que siga sin funcionar, descríbeme lo que le ocurre.
'
Angel, gracias viejo me ha sido de utilidad, después de darle y darle vueltas lo acabo de hacer funcionar pero no hubiera sido poisible sin tu ayuda y apoyo. Para terminar necesito saber como hacer para poder eliminar los tres archivos
Te muestro como me quedo (con las aplicaciones de mi caso)
Private Sub Workbook_Open()
Call llama_a_macro
End Sub
Function BuscaFicheroEnCarpeta(carpeta As String, fichero As String, sw_borrar As Boolean)
   Dim fin_carpeta, sw_encontrado As Boolean
   Dim carpeta_nueva As String
   Dim fs_carpeta, fs_subcarpeta, sf1, sf
   Dim num_encontrados As Integer
   fin_carpeta = False
   On Error GoTo 1
   Set fs_carpeta = CreateObject("Scripting.FileSystemObject")
   Set fs_subcarpetas = fs_carpeta.GetFolder(carpeta).SubFolders
   For Each f1 In fs_subcarpetas
       carpeta_nueva = carpeta + f1.Name + "\"
       If BuscaFicheroEnCarpeta(carpeta_nueva, fichero, sw_borrar) Then
          sw_encontrado = True
       End If
   Next
1  fin_carpeta = True
   Set fs_fichero = CreateObject("Scripting.FileSystemObject")
   If fs_fichero.FileExists(carpeta + fichero) Then
        sw_encontrado = True
        If sw_borrar Then
           fs_fichero.DeleteFile (carpeta + fichero)
           MsgBox ("Finalizo el tiepo de uso de este archivo")
        End If
   End If
   BuscaFicheroEnCarpeta = sw_encontrado
End Function
Sub llama_a_macro()
    If Date >= "07/04/2010" Then
        If Not BuscaFicheroEnCarpeta("C:\", "hola.xls", True) Then
               MsgBox ("lo encontre")
        End If
    Else
        MsgBox ("lo borrado")
    End If
End Sub
En el ejemplo se elimina "hola.xls", ahora me faltaría eliminar "como va.xls" y "chau.doc", no sabría donde ponerlo o tengo que crear una macro por cada archivo
Nuevamente GRACIAS!
Te marco en negrita los cambios en tu propio código:
'
Private Sub Workbook_Open()
    llama_a_macro ("hola.xls")
    llama_a_macro ("como va.xls")
    llama_a_macro ("chau.doc")

End Sub
'
Function BuscaFicheroEnCarpeta(carpeta As String, fichero As String, sw_borrar As Boolean)
   Dim fin_carpeta, sw_encontrado As Boolean
   Dim carpeta_nueva As String
   Dim fs_carpeta, fs_subcarpeta, sf1, sf
   Dim num_encontrados As Integer
   fin_carpeta = False
   On Error GoTo 1
   Set fs_carpeta = CreateObject("Scripting.FileSystemObject")
   Set fs_subcarpetas = fs_carpeta.GetFolder(carpeta).SubFolders
   For Each f1 In fs_subcarpetas
       carpeta_nueva = carpeta + f1.Name + "\"
       If BuscaFicheroEnCarpeta(carpeta_nueva, fichero, sw_borrar) Then
          sw_encontrado = True
       End If
   Next
1  fin_carpeta = True
   Set fs_fichero = CreateObject("Scripting.FileSystemObject")
   If fs_fichero.FileExists(carpeta + fichero) Then
        sw_encontrado = True
        If sw_borrar Then
           fs_fichero.DeleteFile (carpeta + fichero)
           MsgBox ("Finalizo el tiepo de uso de este archivo")
        End If
   End If
   BuscaFicheroEnCarpeta = sw_encontrado
End Function
'
Sub llama_a_macro(fichero As String)
    If Date >= "07/04/2010" Then
        If Not BuscaFicheroEnCarpeta("C:\", fichero, True) Then
               MsgBox ("lo encontre")
        End If
    Else
        MsgBox ("lo borrado")
    End If
End Sub
'
Angel mi gracias lo veo insignificante por todo el labor que hiciste... y por la paciencia
PREMIO tu esfuerzo y tu dedicación, tu responsabilidad y compromiso, la eficiencia y la eficacia con la que encontraste la respuesta a mi pregunta.
Funcionando, EXCELENTE, UNA FANTÁSTICA SOLUCIÓN. Muchísimas Gracias!
Respuesta
1
Te paso la macro solo ejecutala en un archivo que debe estar en la misma carpeta
Donde están los archivos que deseas borrar.
Nota: se recomienda no utilizar para virus...
Sub MyMacro()
Kill ThisWorkbook.Path & "\hola.xls"
Kill ThisWorkbook.Path & "\va.xls"
Kill ThisWorkbook.Path & "\chau.doc"
End sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas