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-01-20T11:15:10+00:00

    ciao NebbiaDB,

    nel seguente modo rinomini il file selezionato mantenendo lo stesso percorso.

    Modifica il modulo di classe della form in questo modo, in testata:

    Option Compare Database

    Option Explicit

    Dim bool As Boolean

    consiglio nuovamente SEMPRE l'option explicit.

    modifica la routine di richiesta file in questo modo, ti lascio dei commenti a tal proposito :

    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)

    'Me.Recalc  non serve

    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

          'Exit Sub non serve

    'Case Else  non serve

    End Select

    bool = True

    End Sub

    inserisci questo evento su before update del controllo txtNuovoNomeFile :

    Private Sub txtNuovoNomeFile_BeforeUpdate(Cancel As Integer)

    If bool Then

        If FileExists(Me.txtPath & Me.txtNuovoNomeFile) Then

             VBA.MsgBox Me.txtPath & Me.txtNuovoNomeFile & vbNewLine & _

                        " esiste già assegna un altro nome!", vbCritical, "Warning"

            Cancel = True

        Else

            Name Me.txtPath & Me.txtFile As Me.txtPath & Me.txtNuovoNomeFile

            Me.txtNuovoNomeFile.BackColor = vbWhite

            VBA.MsgBox "Ho rinominato :" & vbNewLine & _

                        Me.txtPath & Me.txtFile & vbNewLine & _

                        " così:" & vbNewLine & _

                        Me.txtPath & Me.txtNuovoNomeFile, vbInformation

            bool = False

        End If

    End If

    End Sub

    effettua qualche tentativo e vedi se il file viene rinominato correttamente ed il comportamento della form è quello voluto.

    nel rinominare il file per ora scrivi anche l'estensione...per scrivere solo il nome del file ed in seguito rinominarlo anche con l'estensione è un attimo...

    vedi se intanto ci siamo....

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-01-20T09:33:12+00:00

    Ciao carissimo Sandro,

    provo a ripostare il file in quanto mi sto incartando alla grande, con la speranza di uscirne fuori :-) http://1drv.ms/1SwgZXy

    Cerco di ricapitolare cercando salvezza :-)))

    Come postato in precedenza i files vengono caricati da un pulsante cmdFile inserendo il nome del percorso in txtPAth ed il nome del file in txtFile e fin qui tutto ok

    ho inserito una msgbox che chiede se voler modificare il nome del file.

    Se si: setfocus su txtNuovoNomeFile e scrivo il nuovo nome

    se No: copia il txtFile nel controllo txtNuovoNomeFile

    ho creato un altro controllo txtNuovoPercoso dove viene riportato il nuovo percorso, su click cmdCopyFiles3, andando appunto a crearlo con myPath & Me.txtCategoria & "" & Me.txtSottocategoria & ""

    Grazie ancora

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-01-19T21:33:10+00:00

    ciao NebbiaDB,

    [...]

    che fatica povero me dove sono finito... non posso arrendermi adesso...

    [...]

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

    [...]

     in fase di inserimento se il file è gia presente esce un errore runtime 58 file già esistente

    [...]

    certo era una domanda retorica...il messaggio velato era...cosa fai...? ipotizzo...chiedo il nuovo nome fino a che non un nome non esistente.

    se così :

    nel modulo di classe della tua form appena sotto option compare database scrivi :

    Dim justExtention As String

    rivedi la funzione per l'estrazione della sola estensione in questo modo :

    Public Function justExtentionFileName(ByVal strFullPath As String) As String

    justExtentionFileName = Mid$(strFullPath, InStrRev(strFullPath, "."), Len(strFullPath))

    End Function

    rivedi la gestione della copia via command button in questo modo :

    private Sub cmdCopyFiles3_Click()

    If Not FileExists(Me.txtPath & Me.txtFile) Then

        VBA.MsgBox Me.txtPath & Me.txtFile & vbNewLine & _

                    "File inesistente!", vbCritical, "warning"

        Exit Sub

    End If

    Me.txtNuovoNomeFile = Me.txtNuovoNomeFile & justExtention

    Name Me.txtPath & Me.txtFile As Me.txtPath & Me.txtNuovoNomeFile

    If FileExists(Me.txtPath & Me.txtNuovoNomeFile) Then

         VBA.MsgBox "file rinominato correttamente", vbInformation, "Info"

     Else

         VBA.MsgBox "file non rinominato correttamente", vbCritical, "Attenzione"

     End If

    End Sub

    ed inserisci nell'evento before update del controllo in cui scrivi il nuovo nome del file questo :

    Private Sub txtNuovoNomeFile_BeforeUpdate(Cancel As Integer)

    justExtention = justExtentionFileName(Me.txtPath & Me.txtFile)

    If FileExists(Me.txtPath & Me.txtNuovoNomeFile & justExtention) Then

        VBA.MsgBox Me.txtPath & Me.txtNuovoNomeFile & vbNewLine & _

                   " esiste già assegna un altro nome!", vbCritical, "Warning"

        Cancel = True

    End If   

    End Sub

    [...]

    Grazie ancora

    [...]

    prego.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-01-19T19:32:23+00:00

    ciao Sandro

    che fatica povero me dove sono finito... non posso arrendermi adesso...

    ho provato e va quasi tutto bene:

    • nel txtNuovoNomeFile  però non viene riportata l'estensione, utile successivamente per aprire i files attravero il pulsante

    Private Sub CmdApriFile_Click()

    On Error Resume Next

    Application.FollowHyperlink Me.txtNuovoPercorso & Me.txtFile

    If Err > 0 Then

       MsgBox "File non presente negli archivi", vbCritical

    End If

    On Error GoTo 0

    End Sub

    • in fase di inserimento se il file è gia presente esce un errore runtime 58 file già esistente

    Grazie ancora

    La risposta è stata utile?

    0 commenti Nessun commento