Risolto backup vba con scelta della destinazione che cambia ogni volta

thunderlotte

Utente junior
8 Luglio 2016
70
8
NAPOLI
2019
2
Buongiorno,
mi scuso per l'apertura d questo post chiuso in precedenza, ma anche se il backup viene fatto regolarmente mi sono accorto che aprendo il backup il file è di 584kb mentre l'originale è di 8mb e all'interno mi riporta solo le tabelle, quindi nel codice ce qualcosa che non va,potreste aiutarmi? grazie!!
 

thunderlotte

Utente junior
8 Luglio 2016
70
8
NAPOLI
2019
2
Salve a tutti,
ho riaperto questo post poichè come spiegavo in precedenza il backup viene fatto regolarmente ma mi sono accorto che aprendo il backup il file è di 584kb mentre l'originale è di 8mb e all'interno mi riporta solo le tabelle, quindi nel codice ce qualcosa che non va, e mi da errore, potreste supportarmi nel risolvere questo problemino? grazie!!
 

giulianovac

Access/VBA Expert
Staff
9 Giugno 2018
5.349
245
Italy
2019
422
allego un file di esempio.
Dal codice che usi mi pare eloquente il problema.
1. La copia andrebbe fatta con l'istruzione: FileCopy sorgente, destinazione
mentre tu usi SaveAsText che ovviamente fa tutt'altro (lo si capisce pure dal nome).

2. Il problema è che non puoi usare FileCopy perché il file è in uso quindi l'istruzione restituisce Autorizzazione negata.
quindi il codice va eseguito in chiusura.

Vedi questo tutorial:
 

thunderlotte

Utente junior
8 Luglio 2016
70
8
NAPOLI
2019
2
Ciao giulianovac @giulianovac ,
ho eseguito il codice come da te consigliato, mi apre la cartella di destinazione e una volta fatto ok non scarica il file ne nella posizione scelta nè da nessun altra parte, ti posto il codice:


Visual Basic:
Private Sub Comando142_Click()
Dim fDialog As Office.FileDialog
Dim OldFile As String, NewFile As String, varName As String

'nome file corrente
varName = CurrentProject.Name

Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
With fDialog
   ' Imposta il titolo dialog box.
   .Title = "Seleziona una cartella"

   ' Verifica lartella selezionata
   If .Show = True Then
         NewFile = .SelectedItems(1) & "\" & Format(Now, "dd_mm_yy_hh_mm") & " " & varName
     Else
         MsgBox "Non hai selezionato alcuna cartella"
     End If
End With
Dim Iniziale As String
Dim Finale As String
Dim copiafile As Integer
Dim objfile As Object
Dim Path As String
Dim NomeFile As String
Path = CurrentProject.Path 'percorso della cartella corrente che contiene il file di database di Access
Iniziale = CurrentDb.Name  'percorso completo con il file corrente
NomeFile = Right(CurrentDb.Name, Len(CurrentDb.Name) - InStrRev(CurrentDb.Name, "\")) 'nome del file
Finale = Path & "\" & Format(Now(), "dd-mm") & " " & NomeFile ' nuovo nome e indirizzo file

copiafile = 0
Set objfile = CreateObject("Scripting.FileSystemObject")  ' crea un nuovo file
copiafile = objfile.CopyFile(Iniziale, Finale, True) ' Copia il file (source) nella posizione (Target)
Set objfile = Nothing
End Sub
Tutto è stato inserito nell'evento click, attendo tue.
 

thunderlotte

Utente junior
8 Luglio 2016
70
8
NAPOLI
2019
2
Ciao Giulanovac,
ho guardato parecchie volte il video, e spiega chiaramente che il backup lo fa alla chiusura della maschera. Poi spiega anche come fare il backup sull'evento click (ed è proprio il mio caso), avendo raggruppato i due codici in un solo pulsante sull'evento click mi fa procedere come il video,si apre la finestra di explorer,scelgo la cartella di destinazione ma poi non copia niente, e credimi ho fatto 1000 prove ma proprio non riesco a capire dove sta l'errore,eppure il codice che ho allegato in precedenza e come quello del video.
 

muni

VBA Expert
Expert
25 Novembre 2018
977
45
Roma
2019
75
thunderlotte @thunderlotte ... per capire dove legge e dove scrive inserisci prima di

copiafile = 0

le linee

MsgBox(Iniziale)
MsgBox(Finale)

Inoltre non si capisce che fine faccia la variabile NewFile in cui c'è la scelta che fai e che viene completamente ignorata.
Anche la variabile copiafile andrebbe controllata, altrimenti che senso ha?
 

thunderlotte

Utente junior
8 Luglio 2016
70
8
NAPOLI
2019
2
Ciao muni non sono un esperto in materia, quindi volevo capire cosa fare: per quanto riguarda i msgbox da te indicati iniziale e finale sono due msg veri e propri o devo copiare le stringhe così come da te indicato, per le altre 2 variabili il newfile è il nuovo file che andrei a salvare nella nuova destinazione per poi effettuare la copia, ma ciò non avviene, sarei disposto anche a modificare il codice con le giuste indicazioni, poiché le indicazioni date da giulianovac mi lascia un pò perplesso anche se ha ragione poiché guardando il video è come dice lui, ma altri software salvano tranquillamente, lo stesso access salva se si passa per la ribbon anziché per la maschera, attendo cmq un vostro aiuto per uscirne da questo tunnel, grazie a tutti.
 

muni

VBA Expert
Expert
25 Novembre 2018
977
45
Roma
2019
75
Le MsgBox sono due linee inserite in quel modo solo per mostrarti, dopo il click, quali sono i percorsi e i nomi dei file iniziale e finale. Servono solo a farti capire cosa succede, poi li puoi eliminare dal codice.

La variabile NewFile non la usi proprio nel codice per salvare, quindi, come vuoi che il file venga salvato correttamente?

Non è questione di essere esperto, sono modifiche banali. Prima di chiedere la scrittura del codice, prova a fare quanto ti ho detto e ti rendi conto.

Comunque, attualmente, quel codice salva il file di backup sempre nella stessa cartella in cui si trova l'originale.

Ad esempio, se il file si chiama Esempio1.accdb, il file di backup si chiamerà 25-09 Esempio1.accdb e lo troverai nella stessa cartella.
 
Ultima modifica:

thunderlotte

Utente junior
8 Luglio 2016
70
8
NAPOLI
2019
2
hai ragione, con quelle 2 stringhe mi dice il file originale dove si trova, e poi mi dice come lo chiama,ma lo mette sempre nella stessa cartella, quindi come posso fare in modo da salvare dove voglio?
 

muni

VBA Expert
Expert
25 Novembre 2018
977
45
Roma
2019
75
Quindi, tanto per cominciare, non è vero che non trovi la copia. La copia è stata fatta e sta nella cartella originale.

In secondo luogo, come ti ho già detto, devi usare la variabile NewFile perché è in quella variabile che il tuo codice inserisce la nuova locazione e il nome file.

Dai un'occhiata al suo contenuto con

MsgBox (NewFile)

e poi ragiona su dove usare NewFile nel resto del codice
 

thunderlotte

Utente junior
8 Luglio 2016
70
8
NAPOLI
2019
2
Esaminando il codice noto che il backup viene effettuato nella stessa cartella poichè nel codice e così indicato:

Visual Basic:
Path = CurrentProject.Path
quindi credo sia questa la stringa che cambiandola mi consente di scegliere un percorso diverso, attendo vostre.
 

thunderlotte

Utente junior
8 Luglio 2016
70
8
NAPOLI
2019
2
Ciao muni,infatti mettendo il msgbox mi dice che lo salva nella destinazione da me scelta,ma poi vado a vedere e non ce,quindi questac parte di codice deve essere inserita in un altro punto?
 

muni

VBA Expert
Expert
25 Novembre 2018
977
45
Roma
2019
75
Perdonami ma anche se non sai molto di VBA, ad intuito, hai capito quale istruzione effettua la copia? E cosa passi a quell'istruzione?
 

thunderlotte

Utente junior
8 Luglio 2016
70
8
NAPOLI
2019
2
si, la copia la fa questa parte del codice:

Visual Basic:
copiafile = 0
Set objfile = CreateObject("Scripting.FileSystemObject")  ' crea un nuovo file
copiafile = objfile.CopyFile(Iniziale, Finale, True) ' Copia il file (source) nella posizione (Target)
Set objfile = Nothing
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!