Skriva till och läsa från Windows register
I VBA har vi möjlighet att relativt enkelt skriva till och läsa från Windows register. Detta är en bra lösning då vi t ex kan spara inställningar som görs i tilläggsverktyg eller begränsa livslängden för en demoversion av en applikation o d.
De tre metoderna vi förfogar över är:
- SaveSetting - Skapar och sparar nycklar och värden.
- DeleteSetting - Tar bort nycklar och värden.
- GetSetting / GetAllSettings - Läser och hämtar nycklar och värden.
Den begräsning vi har att ta hänsyn till är att vi endast kan arbeta med sektionen HKEY_CURRENT_USER och undersektionen VB and VBA Program Settings.
Vill vi arbeta med andra delar av registret är vi hänvisade till Windows API, som har ca 25 funktioner för att arbeta med registret.
En viktigt sak att ha i åtanke är att textvärden under nedanstående operativsystem är begränsade till 255 tecken inklusive mellanslag:
- Windows 95 / 98
- Windows ME
Arbetar vi en blandad miljö, dvs olika språkversioner av Excel, ska vi undvika att använda oss av datatypen Boolean (Sant/Falskt - True / False). Detta då respektive språkversion inte kan läsa de andra språkversionernas värden. Svensk version av Excel kan inte läsa engelsk version av Excels angivna värden.
Att arbeta med registret kan vara äventyrligt så ta säkerhetskopior innan registerarbetet påbörjas.
Nedanstående procedurexempel får kopieras manuellt.
Option Explicit
Option Private Module
Private rnValue As Range
Private stString As String
Private i As Long
Sub Write_Settings()
'© 2003 Alla rättigheter XL-Dennis
On Error Resume Next
'Här tas det gamla projektet bort i registret.
DeleteSetting "SQLTester"
On Error GoTo 0
On Error GoTo Errorhandling
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Sheet1")
With wsSheet
Set rnValue = .Range("B2:D11")
End With
For i = 1 To 10
'Här skapas textsträngen där värden separeras mha komma-tecknet.
stString = rnValue(i, 1).Value
stString = stString & "," & rnValue(i, 2).Value
stString = stString & "," & rnValue(i, 3).Value
'Här skapas registerposten och textvärdet till nyckel läggs sist till.
SaveSetting "SQLTester", "Connections", "M" & CStr(i), stString
Next i
ExitHere:
Exit Sub
Errorhandling:
MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, "modSettings.Set_Settings"
Resume ExitHere
End Sub
Sub Read_AllSettings()
'© 2003 Alla rättigheter XL-Dennis
Dim vaString As Variant, vaTemp() As Variant, vaStatus As Variant
On Error GoTo Errorhandling
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Sheet1")
'Här hämtas alla poster in under subyckeln "Connections" i projektet SQLTester.
vaString = GetAllSettings("SQLTester", "Connections")
GetSetting
ReDim vaTemp(0 To UBound(vaString))
'Den första dimensionen av variant-matrisen består av nycklarnas namn, vilket vi ej behöver
'varför vi hämtas endast värdena i den andra dimensionen.
For i = LBound(vaString) To UBound(vaString)
vaTemp(i) = vaString(i, 1)
Next i
'Här tilldelas cellområdet värdena.
For i = LBound(vaTemp) To UBound(vaTemp)
wsSheet.Range("B" & 2 + i & ":D" & 2 + i).Value = Split(vaTemp(i), ",")
Next i
ExitHere:
Exit Sub
Errorhandling:
MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, "modSettings.Read_AllSettings"
Resume ExitHere
End Sub