Come trasferire i dati utente tra gli aggiornamenti con VBA
Quando si aggiorna la cartella di lavoro protetta e si distribuisce un nuovo EXE, si possono incontrare difficoltà nel garantire il corretto trasferimento dei dati degli utenti, soprattutto se si utilizza la modalità Full Save. Questa modalità crea un’istantanea completa della cartella di lavoro al momento del salvataggio. Di conseguenza, quando un utente apre il proprio vecchio file di salvataggio (.xlsc) con la nuova applicazione, vedrà i propri vecchi dati nella vecchia struttura della cartella di lavoro e non beneficerà dei vostri ultimi aggiornamenti (come nuove funzionalità o correzioni di bug nel vostro codice VBA).
Questo argomento spiega come utilizzare un sistema di esportazione/importazione basato su VBA per aiutare gli utenti a migrare i propri dati da una vecchia versione dell’applicazione a una nuova.
Esempio di codice
Section titled “Esempio di codice”Questo processo comporta due passaggi principali: esportare i dati dalla vecchia versione e importarli nella nuova.
1. Esportare i dati utente in un file Excel
Section titled “1. Esportare i dati utente in un file Excel”La macro seguente genera un normale file Excel .xlsx contenente i dati dell’utente. È necessario includere questa macro nella vecchia applicazione, associata a un pulsante, in modo che gli utenti possano esportare i propri dati prima di eseguire l’aggiornamento.
Sub GenerateData() Dim savePath As String 'New workbook with 3 sheets Workbooks.Add xlWBATWorksheet ActiveSheet.Name = "SheetA" Sheets.Add(After:=Sheets(1)).Name = "SheetB" Sheets.Add(After:=Sheets(2)).Name = "SheetC" ActiveWorkbook.Sheets("SheetA").Range("A1:C3").Value = ThisWorkbook.Sheets("SheetA").Range("A1:C3").Value ActiveWorkbook.Sheets("SheetB").Range("B3").Value = ThisWorkbook.Sheets("SheetB").Range("B3").Value ActiveWorkbook.Sheets("SheetC").Range("B1:C3").Value = ThisWorkbook.Sheets("SheetC").Range("B1:C3").Value savePath = Application.GetSaveAsFilename("", "Excel workbook (*.xlsx),*.xlsx", 1, "Export User Data") If savePath <> "False" Then ActiveWorkbook.SaveAs savePath, FileFormat:=51 ActiveWorkbook.Close FalseEnd Sub2. Caricare i dati nel nuovo file EXE.
Section titled “2. Caricare i dati nel nuovo file EXE.”L’utente deve aprire il nuovo EXE ed eseguire la 3ª macro seguente per caricare i dati (associate la macro a un pulsante). Una volta che l’utente esegue la macro, gli verrà chiesto di selezionare il file (1ª macro) e i dati verranno copiati (2ª macro). La terza macro esegue entrambe le macro, ed è questa la macro che deve essere associata al pulsante. Anche in questo caso, sarà necessario modificare le celle e i nomi delle schede nella seconda macro, ed è possibile modificare anche il titolo nella prima macro:
************* 1st macro:Sub Open_Workbook_Dialog()Dim my_FileName As Variantmy_FileName = Application.GetOpenFilename( _FileFilter:="Excel Files,.xl;.xm", _FilterIndex:=3, _Title:="Select the old version of your file, where you will pull the data from", _MultiSelect:=False)If my_FileName <> False ThenWorkbooks.Open Filename:=my_FileNameEnd IfEnd Sub
**************** 2nd macro:Sub TransferData()If Workbooks.Count > 1 ThenWorkbooks(1).Sheets("SheetA").Range("A1:C3").Value = Workbooks(2).Sheets("SheetA").Range("A1:C3").ValueWorkbooks(1).Sheets("SheetB").Range("B3").Value = Workbooks(2).Sheets("SheetB").Range("B3").ValueWorkbooks(1).Sheets("SheetC").Range("B1:C3").Value = Workbooks(2).Sheets("SheetC").Range("B1:C3").ValueWorkbooks(2).Close savechanges:=FalseElseMsgBox "The data hasn’t been transferred.", vbExclamation, "Error"End IfEnd Sub
************ 3rd macro:Sub TheTransfer()Call Open_Workbook_DialogCall TransferDataEnd Sub👉 Vedere anche: