Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

di il
20 risposte

Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

Buonasera a tutti,
sono di nuovo qui...
Sto provando, tramite un pulsante con codice, a spostare un file da una directory ad un'altra, l'errore sta nel nome del file da spostare.
Io vorrei spostare tutti i file che hanno il Cognome e Nome dell'alunno, la prima parte del nome file è diverso. il codice che ho creato è questo:
Private Sub Comando509_Click()
Perc = "\\192.168.0.199\GESTIONALE_VA\ALUNNI\GESTIONE ATTIVITA\GESTIONE ALUNNI\DOCUMENTI DIGITALI\ALUNNI\"
NewPerc = "\\192.168.0.199\GESTIONALE_VA\ALUNNI\GESTIONE ATTIVITA\GESTIONE ALUNNI\DOCUMENTI DIGITALI\ALUNNI\1.DOCUMENTI DA IMPORTARE\" & [CognomeNome] & "\"
NFile = "*" & [CognomeNome] & ".msg"
Name Perc & NFile As NewPerc & NFile
End Sub
so già dove sta l'errore, praticamente non riconosce la parte "*" collegata al campo [CognomeNome], potete aiutarmi?
Grazie mille!

20 Risposte

  • Re: Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

    Quel * non ha senso infatti.

    Name arguments cannot include multiple-character (*) and single-character (?) wildcards.

    Usa FSO

    https://www.automateexcel.com/vba/move-files
  • Re: Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

    oregon ha scritto:


    Quel * non ha senso infatti.

    Name arguments cannot include multiple-character (*) and single-character (?) wildcards.

    Usa FSO

    https://www.automateexcel.com/vba/move-files
    Grazie mille, però non credo mi risolva il problema, perchè non riesco a capire come unire la prima parte del nome del file (che dovrebbe prendere tutti i caratteri che trova, per questo avevo indicato con "*") unito all'ultima parte del nome file che contiene il risultato del campo [CognomeNome] e infine l'estensione del file.
    Grazie
  • Re: Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

    Io non capisco vari punti:
    1. Il codice postato cosa fa? Le variabili sono state già dichiarate Public da qualche altra parte? Poi avviene semplicemente una "assegnazione"...ma poi?
    2.

    grazgrace ha scritto:


    non riesco a capire come unire la prima parte del nome del file (che dovrebbe prendere tutti i caratteri che trova, per questo avevo indicato con "*") unito all'ultima parte del nome file che contiene il risultato del campo [CognomeNome] e infine l'estensione del file.
    Da dove deve andare a prendere "tutti i caratteri che trova"?
  • Re: Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

    grazgrace ha scritto:


    oregon ha scritto:


    Usa FSO
    https://www.automateexcel.com/vba/move-files
    Grazie mille, però non credo mi risolva il problema
    Risolve, risolve, però bisogna capire come funziona, ovviamente.

    grazgrace ha scritto:


    ...so già dove sta l'errore, praticamente non riconosce la parte "*" collegata al campo [CognomeNome], potete aiutarmi
    Oltre all'utilizzo di FileSystemObject, come indicato da Oregon, restando a Name nativo VBA dovresti modificare il codice con un ciclo che utilizza la funzione Dir in cui puoi (devi) usare il carattere jolly.
    Alla fine di questa pagina
    https://support.microsoft.com/en-us/office/dir-function-1a1a4275-f92f-4ae4-8b87-41e4513bba2e
    c'è un esempio dell'uso di Dir. Anche le parti del codice riservate ai commenti sono da leggere attentamente.
  • Re: Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

    grazgrace ha scritto:


    non credo mi risolva il problema
    Questo non è vero. Risolve il problema, se non hai compreso come utilizzarlo è un'altra storia.
  • Re: Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

    oregon ha scritto:


    grazgrace ha scritto:


    non credo mi risolva il problema
    Questo non è vero. Risolve il problema, se non hai compreso come utilizzarlo è un'altra storia.
    Hai ragione, infatti mollo perchè per me risulta complesso.
    Grazie comunque
  • Re: Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

    Ma tu devi spostare o copiare quei file?

    Comunque ... prendi spunto da questo
    
        Dim CN As String
        CN = [CognomeNome]
        
        Dim FSO As Object
        Set FSO = CreateObject("Scripting.FileSystemObject")
        
        Perc = "\\192.168.0.199\GESTIONALE_VA\ALUNNI\GESTIONE ATTIVITA\GESTIONE ALUNNI\DOCUMENTI DIGITALI\ALUNNI\"
        NewPerc = "\\192.168.0.199\GESTIONALE_VA\ALUNNI\GESTIONE ATTIVITA\GESTIONE ALUNNI\DOCUMENTI DIGITALI\ALUNNI\1.DOCUMENTI DA IMPORTARE\" & CN & "\"
        
        If Not FSO.FolderExists(NewPerc) Then
            FSO.CreateFolder NewPerc
        End If
    
        FSO.MoveFile Perc & "*" & CN & "*.msg", NewPerc
    
  • Re: Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

    grazgrace ha scritto:


    ...Hai ragione, infatti mollo perchè per me risulta complesso.
    Ma noooo!!! Riprova, dai.
    Te la faccio facile facile, liberamente tratto da
    Dim strFileName As String, strFolder As String, strFileSpec As String
    strFolder = "C:\temp\"
    strFileSpec = strFolder & "*.*"
    strFileName = Dir(strFileSpec)
    Do While Len(strFileName) > 0
        'TODO: replace Debug.Print by the process you want to do on the file
        Debug.Print strFileName
        strFileName = Dir
    Loop
    Lo dice il codice nel commento: "Replace Debug.Print by the process you want to do on the file". Ecco, quello è il modo per passare tutti i file che rientrano in determinati criteri. Il trucco sta nel capire che dopo la prima chiamata
    Dir(strFileSpec)
    le successive chiamate di Dir (senza altri parametri) restituiscono il nome del file successivo che rispetta la prima selezione. Ecco perché ogni volta si deve verificare che strFileName abbia lunghezza superiore a 0, perché quando accade i file sono finiti.
  • Re: Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

    oregon ha scritto:


    Ma tu devi spostare o copiare quei file?

    Comunque ... prendi spunto da questo
    
        Dim CN As String
        CN = [CognomeNome]
        
        Dim FSO As Object
        Set FSO = CreateObject("Scripting.FileSystemObject")
        
        Perc = "\\192.168.0.199\GESTIONALE_VA\ALUNNI\GESTIONE ATTIVITA\GESTIONE ALUNNI\DOCUMENTI DIGITALI\ALUNNI\"
        NewPerc = "\\192.168.0.199\GESTIONALE_VA\ALUNNI\GESTIONE ATTIVITA\GESTIONE ALUNNI\DOCUMENTI DIGITALI\ALUNNI\1.DOCUMENTI DA IMPORTARE\" & CN & "\"
        
        If Not FSO.FolderExists(NewPerc) Then
            FSO.CreateFolder NewPerc
        End If
    
        FSO.MoveFile Perc & "*" & CN & "*.msg", NewPerc
    
    Devo spostare... ci provo! Grazie davvero, siete gentili
  • Re: Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

    Philcattivocarattere ha scritto:


    grazgrace ha scritto:


    ...Hai ragione, infatti mollo perchè per me risulta complesso.
    Ma noooo!!! Riprova, dai.
    Te la faccio facile facile, liberamente tratto da
    Dim strFileName As String, strFolder As String, strFileSpec As String
    strFolder = "C:\temp\"
    strFileSpec = strFolder & "*.*"
    strFileName = Dir(strFileSpec)
    Do While Len(strFileName) > 0
        'TODO: replace Debug.Print by the process you want to do on the file
        Debug.Print strFileName
        strFileName = Dir
    Loop
    Lo dice il codice nel commento: "Replace Debug.Print by the process you want to do on the file". Ecco, quello è il modo per passare tutti i file che rientrano in determinati criteri. Il trucco sta nel capire che dopo la prima chiamata
    Dir(strFileSpec)
    le successive chiamate di Dir (senza altri parametri) restituiscono il nome del file successivo che rispetta la prima selezione. Ecco perché ogni volta si deve verificare che strFileName abbia lunghezza superiore a 0, perché quando accade i file sono finiti.
    Grazie mille! Gentilissimo, ci provo! mi viene da mollare perchè, come avrete capito, facendo tutt'altra professione posso dedicarmi ad ampliare questi file nei ritagli di tempo!
    Comunque guardo bene e spero di darvi buone notizie!
  • Re: Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

    Grazie mille per il prezioso aiuto!
    Diciamo che "ci sono riuscita"... funziona tutto
  • Re: Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

    grazgrace ha scritto:


    Diciamo che ... funziona tutto
    Per completare il thread quindi è bene pubblicare anche la soluzione applicata al tuo problema iniziale, in modo che possa essere d'aiuto a chi eventualmente si troverà di fronte alla stessa esigenza.
  • Re: Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

    Philcattivocarattere ha scritto:


    grazgrace ha scritto:


    Diciamo che ... funziona tutto
    Per completare il thread quindi è bene pubblicare anche la soluzione applicata al tuo problema iniziale, in modo che possa essere d'aiuto a chi eventualmente si troverà di fronte alla stessa esigenza.
    Ma certo, scusate
    Private Sub Comando509_Click()
    
    Dim CN As String
        CN = [CognomeNome]
        
        Dim FSO As Object
        Set FSO = CreateObject("Scripting.FileSystemObject")
        
        Perc = "\\192.168.0.199\GESTIONALE_VA\ALUNNI\GESTIONE ATTIVITA\GESTIONE ALUNNI\DOCUMENTI DIGITALI\ALUNNI\1.DOCUMENTI DA IMPORTARE\"
        NewPerc = "\\192.168.0.199\GESTIONALE_VA\ALUNNI\GESTIONE ATTIVITA\GESTIONE ALUNNI\DOCUMENTI DIGITALI\ALUNNI\" & CN & "\"
        
        If Not FSO.FolderExists(NewPerc) Then
            FSO.CreateFolder NewPerc
        End If
    
        FSO.MoveFile Perc & "*" & CN & ".*", NewPerc
    
    End Sub
    Ne approfitto, perchè ho provato ad evolvere il codice, per velocizzare l'operazione vorrei creare un pulsante unico per spostare i file massivamente in ogni cartella cliente. Ho quindi creato una maschera che ha come origine dati una query dove sono elencati tutti i clienti, e questo pulsante generale dove ho inserito questo codice:
    Private Sub Comando6_Click()
    Dim CN As String
    CN = [Cognome e Nome]
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Dim rs As DAO.Recordset
    Set rs = DBEngine(0)(0).OpenRecordset("elenchi", dbReadOnly)
    If Not (rs.EOF And rs.BOF) Then
    rs.MoveFirst
    Do Until rs.EOF
    
    Perc = "\\192.168.0.199\GESTIONALE_VA\ALUNNI\GESTIONE ATTIVITA\GESTIONE ALUNNI\DOCUMENTI DIGITALI\ALUNNI\1.DOCUMENTI DA IMPORTARE\"
        NewPerc = "\\192.168.0.199\GESTIONALE_VA\ALUNNI\GESTIONE ATTIVITA\GESTIONE ALUNNI\DOCUMENTI DIGITALI\ALUNNI\" & CN & "\"
    FSO.MoveFile Perc & "*" & CN & ".*", NewPerc
    DoEvents
    rs.MoveNext
    Loop
    End If
    rs.Close
    Set rs = Nothing
    End Sub
    solo che rimane sempre sul primo record e non scorre ai successivi...
  • Re: Spostare un file (con parte di nome preso da un campo)da una directory ad un'altra

    È ovvio che

    CN = [Cognome e Nome]

    va nel cicli dato che cambia ad ogni giro. Subito dopo la Do Until...
Devi accedere o registrarti per scrivere nel forum
20 risposte