Ir al contenido

Cómo transferir datos de usuario entre actualizaciones con VBA

Cuando actualiza su libro protegido y distribuye un nuevo EXE, podría afrontar dificultades para garantizar que los datos de sus usuarios se transfieran correctamente, especialmente si utiliza el modo Full Save. Este modo crea una instantánea completa del libro en el momento de guardar. En consecuencia, cuando un usuario abre su antiguo archivo guardado (.xlsc) con la nueva aplicación, verá sus datos antiguos en la antigua estructura del libro y no se beneficiará de sus últimas actualizaciones (como nuevas funciones o correcciones de errores en su código VBA).

Este tema explica cómo utilizar un sistema de exportación/importación basado en VBA para ayudar a sus usuarios a migrar sus datos de una versión antigua de su aplicación a una nueva.

Este proceso consta de dos pasos principales: exportar los datos de la versión antigua e importarlos a la nueva.

1. Exportar los datos del usuario a un archivo de Excel

Section titled “1. Exportar los datos del usuario a un archivo de Excel”

La macro siguiente generará un archivo de Excel .xlsx normal que contiene los datos del usuario. Debe incluir esta macro en su antigua aplicación, vinculada a un botón, para que los usuarios puedan exportar sus datos antes de actualizar.

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

2. Cargar los datos en el nuevo archivo EXE.

Section titled “2. Cargar los datos en el nuevo archivo EXE.”

El usuario debe abrir el nuevo EXE y ejecutar la 3.ª macro siguiente para cargar los datos (vincule la macro a un botón). Una vez que el usuario ejecute la macro, se le pedirá que seleccione el archivo (1.ª macro), y los datos se copiarán (2.ª macro). La tercera macro ejecutará ambas macros, y esa es la macro que debe vincularse al botón. De nuevo, tendrá que cambiar los nombres de las celdas y de las pestañas en la segunda macro, y también puede cambiar el título en la primera 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

👉 Vea también: