Salta ai contenuti

Salvare e ripristinare valori personalizzati a livello programmatico con VBA

Quando si utilizza la modalità Save defined cell values only (salva solo i valori di cella definiti), XLS Padlock consente di salvare e ripristinare valori personalizzati oltre ai valori di cella predefiniti. Ciò è utile per salvare variabili, impostazioni o dati che non sono memorizzati direttamente in una cella.

Questa funzionalità si basa su due eventi VBA e due funzioni dell’API VBA. Il codice viene inserito nelle subroutine di evento per leggere o scrivere i dati personalizzati quando l’utente carica o salva il proprio lavoro.

Le due subroutine di evento seguenti devono essere inserite in un modulo della cartella di lavoro Excel. XLS Padlock le richiamerà automaticamente durante il processo di salvataggio e caricamento.

' 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): scrive un singolo valore stringa associato a un identificatore univoco.
  • ReadCustomCellValue(UniqueID, DefaultValue): legge un singolo valore stringa per un dato identificatore. Se l’identificatore non viene trovato, la funzione restituisce DefaultValue.

Ecco come scrivere un singolo valore:

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

Ed ecco come rileggerlo:

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

È inoltre possibile leggere tutti i valori personalizzati salvati in una sola volta passando una stringa vuota come identificatore a ReadCustomCellValue. Ciò restituisce un oggetto Scripting.Dictionary.

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

Esempio completo: salvataggio/ripristino di una colonna

Section titled “Esempio completo: salvataggio/ripristino di una colonna”

Questa funzione di supporto genera una stringa separata da virgole a partire dai valori di un dato intervallo di celle.

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

Questo evento viene richiamato quando l’utente salva il proprio lavoro. Utilizza la funzione di supporto per convertire l’intero intervallo utilizzato della colonna A in un’unica stringa e la salva.

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

Questo evento viene richiamato quando l’utente carica un file di salvataggio. Legge la stringa e ripristina i valori nella colonna A.

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
## See Also
- [How to migrate user data from a previous version](excel-vba-migrate-user-data-updates)