codice vba per modificare il nome del file

Anonimo
2016-01-16T13:24:08+00:00

salve a tutti

in una maschera carico, attraverso un cmdFile, i file provenienti da qualsiasi directory e popolo due txtbox di nome txtFile e txtPath

Da un altro comando cmdcopyfile3 "riesco" a copiare il file in un percorso predefinito e creare contemporaneamente una cartella, in base al valore riportato nella txtCategoria e una sottocartella in base al valore txtSottocategoria.

Ho inserito una nuova cmdRinominaFIle, da dover utilizzare in caso di voler rinominare il file presente nel txtFile, e al click il setfocus va su txtFile da modificare e successivamente su pulsante cmdCopy inserisci il file rinominato

Per fare tuttociò occorre inserire una nuova txtNuovoNomeFile per gestire meglio?

In pratica vorrei far si che se il nome del file caricato è corretto di procedere o in alternativa modificarlo

Il codice attuale:

Private Sub cmdCopyFiles3_Click()

'Const myPath  As String = "B:\Documenti" ' <----- 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 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-02-03T06:53:51+00:00

ciao NebbiaDB,

per la formattazione della data prova a studiare la funzione nativa format$.

Ragiona su questo...

se vuoi anteporre ai files che carichi la data o qualsiasi altra cosa e fare in modo che il file acquisisca anche la data nel suo nome, il file deve essere comunque rinominato, e per comunque intendo dire SEMPRE.

quindi qui :

[....]

 Ad esempio dopo caricato il file e rinominato oppure no,

[...]

Grazie ancora infinite Sandro

Oppure no...mmm....ci sta poco...

Se si tratta, ma non credo, di inserire all'interno del nome anche la data SOLO nel tuo db con format$ risolvi.

Se invece come penso vuoi che anche il file fisico salvato su disco assuma questa modifica, devo procedere con la rinomina sistematica.

[...]

Grazie ancora infinite Sandro

[...]

ciao, Sandro

ps. apri un altro 3d qui sfioriamo il teraByte ormai ed è diventato un sguazzabuglio di issues....

La risposta è stata utile?

0 commenti Nessun commento

43 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-02-03T10:33:39+00:00

    ciao Sandro e grazi e ancora

    Se invece come penso vuoi che anche il file fisico salvato su disco assuma questa modifica, devo procedere con la rinomina sistematica.

    penso sia abbastanza interessante, apro un nuovo 3d

    Per chiudere definitivamente questo 3d sto provando solo ad anteporre la data nel txtNuovoNomeFile

    Ho visto la funzione nativa e dovrebbe essere forse qualcosa del genere, ma mi resta, difficile ad inserirla nel tutto...

    Format$("check_data_documento","yyyy/mm/dd")

    Oppure no...mmm....ci sta poco...

    nel senso che quando carico il file sia se lo rinomino che non, attraverso la msgbox si o no, dovrebbe inserire la data nel txtNuovoNomeFile

    ho provato in diverse parti di codice ma non va... pensi che dovrebbe inserirsi in questa parte?

    Private Sub cmdFile_Click()

    Dim lngSlashPos As Long

    Dim fullPath    As String

    fullPath = cmdFileDialog

    If Len(fullPath & vbNullString) = 0 Then Exit Sub

    lngSlashPos = InStrRev(fullPath, "")

    Me.txtPath = Mid$(fullPath, 1, lngSlashPos)

    Me.txtFile = justFileName(fullPath)   

    Dim iRisposta As Integer

    iRisposta = MsgBox("Vuoi modificare il nome del file ???", vbYesNoCancel)

    Select Case iRisposta  'impostiamo il Select Case con riferimento al messaggio restituito dalla variabile iRisposta

    Case vbYes                'se risponderemo "Si" :

         Me.txtNuovoNomeFile = vbNullString  ' aggiunta

         Me.txtNuovoNomeFile.SetFocus

         Me.txtNuovoNomeFile.BackColor = vbRed

    Case vbNo                  'se sceglieremo "No":

          Me.txtNuovoNomeFile = Me.txtFile

    End Select

    bool = True

    Me.cmdCopyFiles3.Enabled = True

    End Sub

    Grazie ancora

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-02-02T20:25:50+00:00

    Ciao carissimo Sandro,

    continuo a testare e sembra tutto davvero funzionare... spero a breve di iniziare a caricare i dati...

    sto provando ad inserire la data del documento in formato (anno-mese-giorno) davanti al txtNuovoNomeFile al fine di avere i file ordinati nelle cartelle.

    Ad esempio dopo caricato il file e rinominato oppure no, viene popolato il txtNuovoNomeFile. subito dopo inserendo la data del documento, dopo aggiornamento, dovrebbe andare ad anteporsi nel valore di txtNuovoNomeFile.

    Ad esempio: txtNuovoNomefile = sandro.txt datadocumento = 02/02/2016

    su aggiornamento datadocumento

    txtNuovoNomeFile = 2016-02-02 sandro.txt

    e poi copiarlo

    provato ma niente da fare...

    PS: se comporta fiume di codici, va bene cosi, inserisco manualmente :-))

    Grazie ancora infinite Sandro

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-01-29T22:28:07+00:00

    ciao NebbiaDb,

    in tutti ci casi che  citi il file oggetto di copia viene cancellato post copia che venga rinominato oppure no.

    il codice suggerito nel post precedente esegue quanto richiedi.

    in ogni caso, qui :

    se file non presente in C:/report/cartella/sottocartella/

    1 carico il file C:/file/sandro.txt

    lo rinomino in C:/file/nebbia.txt

       su CopiaFIle:

       cancella C:/file/sandro.txt e copia C:/report/cartella/sottocartella/nebbia.txt

    qualsiasi file tu scelga nel momento in cui lo rinomini non lo puoi cancellare perché non esiste più in quanto rinominato.

    nel senso:

    1)carico il file C:/file/sandro.txt

    2)lo rinomino in C:/file/nebbia.txt

    3) su CopiaFIle cancella C:/file/sandro.txt ----> no semmai cancelli C:/file/nebbia.txt cosa che viene effettuta applicando quanto suggerito nel post precedente.

    in ogni caso il file oggetto di copia viene - post copia - cancellato nel caso che citi C:/file/nebbia.txt  post copia non esite più.

    Grazie ancora

    prego.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento