Como transferir dados do usuário entre atualizações com VBA
Ao atualizar sua planilha protegida e distribuir um novo EXE, você pode enfrentar dificuldades para garantir que os dados de seus usuários sejam transferidos corretamente, especialmente se você usar o modo Full Save. Esse modo cria um instantâneo completo da planilha no momento de salvar. Por consequência, quando um usuário abre seu antigo arquivo salvo (.xlsc) com o novo aplicativo, ele verá seus dados antigos na antiga estrutura da planilha e não se beneficiará de suas últimas atualizações (como novos recursos ou correções de erros em seu código VBA).
Este tópico explica como usar um sistema de exportação/importação baseado em VBA para ajudar seus usuários a migrar seus dados de uma versão antiga de seu aplicativo para uma nova.
Exemplo de código
Section titled “Exemplo de código”Esse processo envolve duas etapas principais: exportar os dados da versão antiga e importá-los para a nova.
1. Exportar os dados do usuário para um arquivo do Excel
Section titled “1. Exportar os dados do usuário para um arquivo do Excel”A macro abaixo gerará um arquivo do Excel .xlsx normal contendo os dados do usuário. Você deve incluir essa macro em seu antigo aplicativo, vinculada a um botão, para que os usuários possam exportar seus dados antes de atualizar.
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. Carregar os dados no novo arquivo EXE.
Section titled “2. Carregar os dados no novo arquivo EXE.”O usuário precisa abrir o novo EXE e executar a 3ª macro abaixo para carregar os dados (vincule a macro a um botão). Assim que o usuário executar a macro, será solicitado que ele selecione o arquivo (1ª macro), e os dados serão copiados (2ª macro). A terceira macro executará ambas as macros, e essa é a macro que precisa ser vinculada ao botão. Novamente, você precisará alterar os nomes das células e das abas na segunda macro, e também pode alterar o título na primeira 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👉 Veja também: