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ù recente
  1. Anonimo
    2016-01-23T16:46:21+00:00

    Ciao carissimo Sandro,

    grazie in anticipo per la tua disponibilità :-)

    *bisogna ripensare a tutto,*nooo :--((((

    come hai impostato il tutto penso vada bene...

    ho effettuato delle modifiche che troverai nel db e penso risponda meglio

    Dalle prove effettuate lo scenario è il seguente:

    1.       nella cartella/sottocartella non è presente nessun file e pertanto carico il file ed è tutto ok

    2.       nella cartella/sottocartella sono presenti i files caricati in passato

    a.     carico il file e mantengo lo stesso nome

    b.     copio il file e, se il file è già presente, esce il messaggio che viene copiato con percorso\copia di (i) nome file ... con il problema però che il txtNuovoNomeFile non viene aggiornato e pertanto nel record, in fase di inserimento, viene inserito il vecchio nome con problemi nella fase successiva di ricerca.

    Faccio un esempio:

    il file è già presente nella cartella/sottocartella

    nome file caricato: primo.txt

    voglio mantenere nome file (si)  e pertanto viene scritto in txtFileNuovoNome primo.txt

    copio il file: viene copiato con copia (1) primo.txt e pertanto successivamente al click inserimento viene inserito il txtNuovoNomeFile che non corrisponde a copia (1) primo.txt ma a primo.txt

    con problemi successivi in fase di ricerca

    Si potrebbe far uscire, invece che copiare direttamente, un msgbox in fase di copia, al posto di copiare e creare tanti file “copia (1)”:

    il nome del file esiste già nella cartella/sottocategoria!!!

    vuoi rinominarlo o sostituire?

    Se rinomina: dovrebbe uscire una piccola finestra ed inserire il nome del nuovo file e su ok scriverlo in txtFileNuovoNome e chiudere

    Se sostituire: lascia il nome inserito su txtNuovoNomeFile e sostituisce il file nella cartella/sottocartella presente

    Allego il mio file http://1drv.ms/1NrE2uB

    Ho provato ma la mia testa è in fumo

    Grazie davvero Sandro, speriamo di farcela

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-01-21T12:53:27+00:00

    ciao NebbiaDB,

    lo stato dell'arte è questo.

    carichi un file, ed in quella sede hai la possibilità di scegliere se rinominarlo o meno.

    Se si, la routine ti chiede il nome del file finchè non assegni un nome non già esistente.

    hai poi la possibilità di copiare il file in un percorso diverso. Se il file nel nuovo percorso esiste un messaggio te lo segnale anteponendo il prefisso copia di (n) + nome file e procedi con la copia.

    Ci siamo mossi finora in questa direzione, se non è corretto, bisogna ripensare a tutto.

    questo il db : http://1drv.ms/1S6SHlB  20012016-2.accdb.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-01-21T11:20:14+00:00

    mmm.... allora il file devo rinominarlo all'interno della finestra quando carico il file?

    e di conseguenza eliminare la msgbox

    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.SetFocus

         Me.txtNuovoNomeFile.BackColor = vbRed

    Case vbNo                  'se sceglieremo "No":

          Me.txtNuovoNomeFile = Me.txtFile

          Exit Sub

    Case Else

    End Select

    o meglio su cmdCopiafile dovrebbe copiare il txtNuovoNomeFile al posto di txtFIle?

    Grazie ancora

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-01-21T11:05:59+00:00

    ciao NebbiaDB,

    la richiesta di modifica del nome del file viene effettuata solamente nel momento il cui il file viene caricato nella maschera.

    Non abbiamo mai parlato di cmdButton di modifica ulteriore.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento