Salta ai contenuti

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.

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 False
End Sub

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 Variant
my_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 Then
Workbooks.Open Filename:=my_FileName
End If
End Sub
**************** 2nd macro:
Sub TransferData()
If Workbooks.Count > 1 Then
Workbooks(1).Sheets("SheetA").Range("A1:C3").Value = Workbooks(2).Sheets("SheetA").Range("A1:C3").Value
Workbooks(1).Sheets("SheetB").Range("B3").Value = Workbooks(2).Sheets("SheetB").Range("B3").Value
Workbooks(1).Sheets("SheetC").Range("B1:C3").Value = Workbooks(2).Sheets("SheetC").Range("B1:C3").Value
Workbooks(2).Close savechanges:=False
Else
MsgBox "The data hasn’t been transferred.", vbExclamation, "Error"
End If
End Sub
************ 3rd macro:
Sub TheTransfer()
Call Open_Workbook_Dialog
Call TransferData
End Sub

👉 Vedere anche: