Zum Inhalt springen

Benutzerdefinierte Werte programmgesteuert speichern und wiederherstellen mit VBA

Im Modus Save defined cell values only können Sie mit XLS Padlock zusätzlich zu den vordefinierten Zellwerten auch benutzerdefinierte Werte speichern und wiederherstellen. Dies ist nützlich, um Variablen, Einstellungen oder Daten zu speichern, die nicht direkt in einer Zelle abgelegt sind.

Diese Funktionalität beruht auf zwei VBA-Ereignissen und zwei VBA-API-Funktionen. Sie platzieren Code in den Ereignis-Unterroutinen, um Ihre benutzerdefinierten Daten zu lesen oder zu schreiben, wenn der Benutzer seine Arbeit lädt oder speichert.

Die folgenden beiden Ereignis-Unterroutinen müssen in einem Modul Ihrer Excel-Arbeitsmappe platziert werden. XLS Padlock ruft sie während des Speicher- und Ladevorgangs automatisch auf.

' Called when a user loads a save file.
Sub XLSPadlock_RestoreCustomValues()
' Your code to read values goes here.
MsgBox ("Restoring custom values...")
End Sub
' Called when a user saves their work.
Sub XLSPadlock_SaveCustomValues()
' Your code to write values goes here.
MsgBox ("Saving custom values...")
End Sub
  • WriteCustomCellValue(UniqueID, Value): Schreibt einen einzelnen Zeichenfolgenwert, der einer eindeutigen ID zugeordnet ist.
  • ReadCustomCellValue(UniqueID, DefaultValue): Liest einen einzelnen Zeichenfolgenwert für eine bestimmte ID. Wird die ID nicht gefunden, gibt die Funktion den DefaultValue zurück.

So schreiben Sie einen einzelnen Wert:

Sub XLSPadlock_SaveCustomValues()
Dim XLSPadlock1 As Object
On Error Resume Next
Set XLSPadlock1 = Application.COMAddIns("GXLS.GXLSPLock").Object
XLSPadlock1.WriteCustomCellValue "MySetting", "MyValue"
End Sub

Und so lesen Sie ihn wieder ein:

Sub XLSPadlock_RestoreCustomValues()
Dim XLSPadlock1 As Object
On Error Resume Next
Set XLSPadlock1 = Application.COMAddIns("GXLS.GXLSPLock").Object
Dim MySettingValue As String
MySettingValue = XLSPadlock1.ReadCustomCellValue("MySetting", "Default")
End Sub

Sie können auch alle gespeicherten benutzerdefinierten Werte auf einmal lesen, indem Sie eine leere Zeichenfolge als ID an ReadCustomCellValue übergeben. Dies gibt ein Scripting.Dictionary-Objekt zurück.

Sub XLSPadlock_RestoreCustomValues()
Dim XLSPadlock1 As Object
On Error Resume Next
Set XLSPadlock1 = Application.COMAddIns("GXLS.GXLSPLock").Object
Dim Dict As Object ' Scripting.Dictionary
Set Dict = XLSPadlock1.ReadCustomCellValue("", "")
If Not Dict Is Nothing Then
For Each Key In Dict.Keys
MsgBox "Key: " & Key & ", Value: " & Dict(Key)
Next Key
End If
End Sub

Vollständiges Beispiel: Speichern/Wiederherstellen einer Spalte

Section titled “Vollständiges Beispiel: Speichern/Wiederherstellen einer Spalte”

Diese Hilfsfunktion erzeugt aus den Werten eines bestimmten Zellbereichs eine durch Kommas getrennte Zeichenfolge.

Function CsvRange(myRange As Range) As String
Dim csvRangeOutput As String
Dim entry As Variant
For Each entry In myRange
If Not IsEmpty(entry.Value) Then
csvRangeOutput = csvRangeOutput & entry.Value & ","
End If
Next
If Len(csvRangeOutput) > 0 Then
CsvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End If
End Function

Dieses Ereignis wird aufgerufen, wenn der Benutzer seine Arbeit speichert. Es verwendet die Hilfsfunktion, um den gesamten verwendeten Bereich der Spalte A in eine einzige Zeichenfolge umzuwandeln und diese zu speichern.

Sub XLSPadlock_SaveCustomValues()
Dim XLSPadlock1 As Object
On Error Resume Next
Set XLSPadlock1 = Application.COMAddIns("GXLS.GXLSPLock").Object
Dim rng As Range
Set rng = ThisWorkbook.Worksheets(2).Range("A1").CurrentRegion
Dim myString As String
myString = CsvRange(rng)
XLSPadlock1.WriteCustomCellValue "MyEntireColumnA", myString
End Sub

Dieses Ereignis wird aufgerufen, wenn der Benutzer eine Speicherdatei lädt. Es liest die Zeichenfolge und stellt die Werte in Spalte A wieder her.

Sub XLSPadlock_RestoreCustomValues()
Dim XLSPadlock1 As Object
On Error Resume Next
Set XLSPadlock1 = Application.COMAddIns("GXLS.GXLSPLock").Object
Dim Val As String
Val = XLSPadlock1.ReadCustomCellValue("MyEntireColumnA", "")
If Val <> "" Then
Dim r As Range, i As Long, ar
Set r = ThisWorkbook.Worksheets(2).Range("A:A")
r.ClearContents
ar = Split(Val, ",")
For i = 0 To UBound(ar)
r.Cells(i + 1, 1).Value = ar(i)
Next
End If
End Sub
## Siehe auch
- [Wie Sie Benutzerdaten aus einer früheren Version migrieren](excel-vba-migrate-user-data-updates)