Zum Inhalt springen

So übertragen Sie Benutzerdaten zwischen Updates mit VBA

Wenn Sie Ihre geschützte Arbeitsmappe aktualisieren und eine neue EXE verteilen, kann es schwierig sein, die korrekte Übertragung der Daten Ihrer Benutzer sicherzustellen, insbesondere wenn Sie den Full Save-Modus verwenden. Dieser Modus erstellt eine vollständige Momentaufnahme der Arbeitsmappe zum Zeitpunkt des Speicherns. Wenn ein Benutzer also seine alte Speicherdatei (.xlsc) mit der neuen Anwendung öffnet, sieht er seine alten Daten in der alten Arbeitsmappenstruktur und profitiert nicht von Ihren neuesten Updates (etwa neuen Funktionen oder Fehlerbehebungen in Ihrem VBA-Code).

Dieses Thema erläutert, wie Sie ein VBA-basiertes Export-/Importsystem verwenden, um Ihren Benutzern zu helfen, ihre Daten von einer alten Version Ihrer Anwendung in eine neue zu migrieren.

Dieser Vorgang umfasst zwei Hauptschritte: das Exportieren der Daten aus der alten Version und das Importieren in die neue.

1. Benutzerdaten in eine Excel-Datei exportieren

Section titled “1. Benutzerdaten in eine Excel-Datei exportieren”

Das nachstehende Makro erzeugt eine normale .xlsx-Excel-Datei mit den Daten des Benutzers. Sie sollten dieses Makro in Ihre alte Anwendung einbinden und mit einer Schaltfläche verknüpfen, damit Benutzer ihre Daten vor dem Upgrade exportieren können.

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. Die Daten in die neue EXE-Datei hochladen.

Section titled “2. Die Daten in die neue EXE-Datei hochladen.”

Der Benutzer muss die neue EXE öffnen und das nachstehende dritte Makro ausführen, um die Daten hochzuladen (verknüpfen Sie das Makro mit einer Schaltfläche). Sobald der Benutzer das Makro ausführt, wird er aufgefordert, die Datei auszuwählen (erstes Makro), und die Daten werden übertragen (zweites Makro). Das dritte Makro führt beide Makros aus, und genau dieses Makro muss mit der Schaltfläche verknüpft werden. Auch hier müssen Sie die Zellen und Tabellenblattnamen im zweiten Makro ändern, und Sie können außerdem den Titel im ersten Makro ändern:

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

👉 Siehe auch: