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:

 

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:


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