Hay algunos puestos similares acerca de este tema, lo sé. Sin embargo, tengo un código que es diferente de todos los códigos que he visto aquí (cuando se habla de este tema).

El error que estoy recibiendo, está diciendo que el archivo no se pudo encontrar. Pero eso es algo imposible, ya que estoy buscando el archivo en la misma carpeta que estoy utilizando como FUENTE de en el fso.CopyFile.

Así que tengo que corregir este error y, si es posible, me gustaría copiar el archivo a otra carpeta y cambiar el nombre. Por ejemplo, si tengo el archivo «Excel.xls» me gustaría copia con el nombre de «Excel_old.xls» es que es posible, utilizando el siguiente código o es demasiado duro que no vale la pena?

Este es el código:

Sub CopyFiles()
'Macro to copy all files modified yesterday

Dim n As String, msg As String, d As Date
Dim fso As Object

Set fso = CreateObject("Scripting.FileSystemObject")
Set fils = fso.GetFolder("C:\Users\Desktop\Files\").Files

'Verify all files in the folder, check the modification date and then copy 
'to another folder (named Old)
For Each fil In fils
    n = fil.Name
    d = fil.DateLastModified
    If d >= Date - 1 Then
        file = n
        'The following line is where the error occurs
        fso.CopyFile "C:\Users\Desktop\Files\file", "C:\Users\Desktop\Files\Old\file"

    End If
Next fil

End Sub
InformationsquelleAutor dekio | 2014-10-07

2 Comentarios

  1. 1

    Esto es debido a que fso.CopyFile "C:\Users\Desktop\Files\file", "C:\Users\Desktop\Files\Old\file" no es un archivo… Es simplemente una cadena de caracteres en un archivo ficticio de las miradas de él.

    Si en lugar de la línea fue

    fso.CopyFile fil.Path, "C:\Users\Desktop\Files\Old\" & fil.name… que podría funcionar.

    Actualizado para añadir:

    Me acaba de intentar el siguiente utilizando (subbing equipo nombre de usuario para abajo) y tuvo éxito en movimiento todo en una carpeta nueva:

    Sub test()
        Dim fso As FileSystemObject
        Dim fsoFiles As Files
        Dim fil As File
    
        Set fso = New FileSystemObject
        Set fils = fso.GetFolder("C:\Users\<MY USERNAME>\Desktop\").Files
    
        For Each fil In fils
            n = fil.Name
            d = fil.DateLastModified
            fso.CopyFile fil.Path, fil.ParentFolder & "\test\" & fil.Name
    
        Next fil
    End Sub

    La única diferencia aquí es que he utilizado fil.Nombre parentfolder para obtener mi Escritorio y luego lo tiró en una nueva carpeta que he creado en mi escritorio (antes de ejecutar la secuencia de comandos) con el nombre de «prueba».

    • eso es correcto. Pero hay un error tipográfico, después de fso.CopyFile debe ser file o fil.name de acuerdo a la OP del código.
    • Whooops! Se corrigió.
    • Pero yo todavía tengo el 13 de error de coincidencia de Tipo
    • Yep.. debe haber sido fil.path no fil.name. Mis disculpas. Supongo que estoy un poco oxidado con fso.
    • Utiliza fso.CopyFile fil.Path, "C:\Users\Desktop\Files\file", "C:\Users\Desktop\Files\Old\file" y tiene el mismo error, el Tipo de Desajuste. También traté de fso.CopyFile fil.Path, "C:\Users\Desktop\Files\file", "C:\Users\Desktop\Files\Old\" y sigue recibiendo el error 13
    • No debería ser: «C:\Users\Desktop\Files\» & file «C:\Users\Desktop\Files\Old\» & archivo
    • Tratado, el mismo error de nuevo, estoy buscando, pero realmente estoy luchando
    • Estraka, que tendría más sentido ya que es en un bucle. De lo contrario, el Destino sería sobrescribe cada vez que un nuevo archivo se encontró que pasa Si la instrucción. fso.CopyFile sólo toma dos argumentos, dekio, ambos son una cadena. El Origen y el Destino tanto de lo que debe ser la ruta de acceso y nombre de archivo completo.
    • He intentado esto mismo hacer una Herramientas>>Referencia a Microsoft Scripting Runtime para que yo pudiera conseguir información sobre herramientas y autocompletado de mi VBE. Todo funcionó como yo esperaba que lo haría. (Yo no uso las variables n y d pero pensé que incluiría para la diversión. El código que he usado fue añadido a mi respuesta.
    • Déjame ver si lo he entendido, porque no soy tan hábil con estas cosas os escribo muy simple de códigos y yo en realidad no entiendo cómo trabajar con fso, por ejemplo. Si me marque la casilla de Microsoft Scripting Runtime, me da consejos en códigos de escritura? ¿Tiene alguna sugerencia para que yo pueda mejorar mi entender en vba y sus objetos, por ejemplo? Muchas gracias por toda la ayuda aquí!

  2. 0

    Para mover todos los archivos en una carpeta:

    Sub MoveFiles()
    
    Dim MyFile As String
    
    MyFile = Dir("C:\AAAA\*.*")
    
    Do Until MyFile = ""
    
    Name "C:\AAAA\" & MyFile As "C:\AAA\" & MyFile
    
    MyFile = Dir
    
    Loop
    
    End Sub

Dejar respuesta

Please enter your comment!
Please enter your name here