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.
Ejemplo de código
Section titled “Ejemplo de código”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 FalseEnd Sub2. 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 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👉 Vea también: