Pular para o conteúdo

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.

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

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 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

👉 Veja também: