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.
Codebeispiel
Section titled “Codebeispiel”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 FalseEnd Sub2. 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 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👉 Siehe auch: