Creare una cartella e spostare files

Anonimo
2015-12-31T07:21:36+00:00

Salve a tutti

in una maschera ho due controlli:

  • nome file (txtfile)
  • nome percorso (txtpath)

che vengono popolati attraverso il caricamento dei files ad esempio percorso C:\Users\Desktop\ ed il nome file prova.doc

e fin qui tutto ok in quanto i files sono posizionati inizialmente su Desktop

adesso vorrei:

creare una cartella attraverso il valore di un altro controllo (Testo01) quindi C:\Users\Desktop\Testo01 e spostarci i files

Se la cartella è già presente spostare direttamente il file senza creare ogni volta le cartelle

Grazie a voi tutti...

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2016-01-10T11:44:14+00:00

ciao NebbiaDB,

[...]

povero a me che mi sono avventurato in questo mondo... speriamo l'impegno almeno possa premiarmi...

[...]

io mi diverto sempre un sacco.... :-DDDDD

[...]

pertanto su copia file dovrebbe essere:

-Percorso (txtPercorsoFisso) - che resta sempre fisso, (Hard Disk: B)

-Categoria (txtCategoria) = nome della cartella

          -Sottocategoria/Scheda (txtSottocategoria) = nome sottocartella

                       -Nome File (txtFile) = nome singolo file

[...]

se ho capito bene vuoi costruire in un path fisso, la struttura cartella+sottcartella e copiare li il file.

quindi cartella e sottocartella possono cambiare MA sempre all'interno di un path Fisso nel tuo HD.

Se è così è un mix tra la prima e la seconda soluzione ipotizzate nel post precedente.

Non serve impostare un altro controllo nella form in cui mostrare il percorso finale di copia a meno che tu non lo voglia, una costate nel codice è sufficiente, prova a vedere se ci siamo.

Personalizza la costante che ti evidenzio in grassetto con il path reale del tuo scenario :

Private Sub cmdCopyFiles3_Click()

Const myPath As String = "c:\allfiles" ' <----- personalizza il path!!

If Not folderExists(myPath) Then MkDir myPath

If Not FileExists(Me.txtFile) Then VBA.MsgBox "il file non esiste", vbCritical, "warning": Exit Sub

Dim strFile     As String

Dim i           As Integer

Dim strFileName As String

strFile = justFileName(Me.txtFile)

If Not folderExists(myPath & Me.txtCategoria) Then

    MkDir myPath & Me.txtCategoria

End If

If Not folderExists(myPath & Me.txtCategoria & "" & Me.txtSottocategoria) Then

    MkDir myPath & Me.txtCategoria & "" & Me.txtSottocategoria

End If

strFileName = myPath & Me.txtCategoria & "" & Me.txtSottocategoria & "" & strFile

i = 1

Do While Len(Dir(strFileName)) > 0

    strFileName = "copia di (" & i & ") " & strFile

    i = i + 1

    strFileName = myPath & Me.txtCategoria & "" & Me.txtSottocategoria & "" & strFileName

Loop

strFile = strFileName

FileCopy Me.txtFile, strFile

If FileExists(strFile) Then VBA.MsgBox "file copiato con successo", vbInformation, "Info"

End Sub

Grazie ancora carissimo Sandro...

prego e facci sapere!

ciao, Sandro.

La risposta è stata utile?

0 commenti Nessun commento

10 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-01-03T20:32:50+00:00

    ciao NebbiaDb,

    vedi se ti piace con il seguente modo, se il file esiste lo rinomini lo copi e mantieni anche il precendente e i precedenti se ce né più di uno :

    Private Sub cmdMakeFolder_Click()

    If Not FileExists(Me.ffPath) Then VBA.MsgBox "il file non esiste", vbCritical, "warning": Exit Sub

    Dim strFile     As String

    Dim i           As Integer

    Dim strFileName As String

    strFile = justFileName(Me.ffPath)

    If Not folderExists(Me.cartella) Then

        MkDir Me.cartella

    End If

    strFileName = Me.cartella & "" & strFile

    i = 1

    Do While Len(Dir(strFileName)) > 0

        strFileName = "copia di (" & i & ") " & strFile

        i = i + 1

        strFileName = Me.cartella & "" & strFileName

    Loop

    strFile = strFileName

    FileCopy Me.ffPath, strFile

    If FileExists(strFile) Then VBA.MsgBox "file copiato con successo", vbInformation, "Info"

    End Sub

    ciaol, Sandro-

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-01-03T19:54:03+00:00

    ciao Sandro,

    dopo diverse prove effettuate se copio un file già esistente non succede nulla.

    E' normale oppure dovrebbe essere logico far uscire un messaggio che chiede "file gia esistente? vuoi sostituire?

    Infine, sperando di non chiedere troppo, se al posto di copiare è possibilie spostare il file nella nuova cartella creata?

    Grazie ancora

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-12-31T11:19:30+00:00

    ...carissimo Sandro...

    è sempre un piacere risentirti :-)

    colgo per augurari tanti cari auguri a te alle persone tue care per l'nno 2016

    quanto codice!!!

    proverò...

    grazie ancora

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-12-31T10:08:26+00:00

    ciao NebbiaDb,

    supponendo ffPAth il nome del controllo che contiene il file nella tua form;

    cartella il nome della cartella da creare sempre nella tua Form;

    questo in un modulo standard:

    Option Compare Database

    Option Explicit

    Public Function justFileName(ByVal strFullPath As String) As String

         Dim s() As String

         s = Split(strFullPath, "")

         justFileName = s(UBound(s))

     End Function

    Public Function justFolderName(ByVal FullPathName As String) As String

        Dim lngSlashPos As Long

        Dim revPath     As String

        revPath = StrReverse(FullPathName)

        lngSlashPos = InStr(1, revPath, "")

         If lngSlashPos = 0 Then Exit Function

         justFolderName = Left(FullPathName, Len(FullPathName) - lngSlashPos + 1)

     End Function

    Public Function folderExists(strPath As String) As Boolean

        On Error Resume Next

        folderExists = ((GetAttr(strPath) And vbDirectory) = vbDirectory)

    End Function

    Public Function FileExists(strPathFile As String) As Boolean

         On Error Resume Next

         FileExists = ((GetAttr(strPathFile) And vbDirectory) = 0)

     End Function

     e questo nel commandButton della form di cui sopra per copiare il file:

    Private Sub cmdMakeFolder_Click()

    If Not FileExists(Me.ffPath) Then VBA.MsgBox "il file non esiste", vbCritical, "warning": Exit Sub

    Dim strFile As String

    strFile = justFileName(Me.ffPath)

    If Not folderExists(Me.cartella) Then

        MkDir Me.cartella

    End If

    FileCopy Me.ffPath, Me.cartella & "" & strFile

    If FileExists(Me.cartella & "" & strFile) Then VBA.MsgBox "file copiato con successo", vbInformation, "Info"

    End Sub

    HTH.

    Ciao, Sandro.

    ps. come la mettiamo se nella cartella di destinazione esiste già un file con lo stesso nome...?

    La risposta è stata utile?

    0 commenti Nessun commento