Windows注冊表用于存儲與計算機相關的各種設置,VBA中的GetSetting函數和SaveSetting函數能夠讀寫Windows注冊表,這樣,我們不僅能夠獲取應用程序和硬件的信息,也可以將應用程序中的信息存儲在注冊表中以供使用。
SaveSetting
SaveSetting語句在Windows注冊表中創建或保存一個應用程序項。其語法為:
SaveSetting appname, section,key, setting
其中:
1.參數appname,必需,字符串類型,指定應用程序的名稱。
2.參數section,必需,字符串類型,指定區段名稱,在該區段保存注冊表項設置。
3.參數key,必需,字符串類型,指定要保存的注冊表項名稱。
4.參數setting,必需,字符串類型或數值類型,指定key的設置值。
說明:
1.該函數將值寫入注冊表中的HKEY_CURRENT_USER\Software\VBand VBA Program Settings鍵的子鍵。
2.如果在注冊表中沒有找到appname或者section子鍵,則會自動創建它們。
3.VB把setting作為字符串值寫入注冊表中。如果setting不是字符串,則會試圖把它改成字符串以便寫入注冊表。
4.如果不能保存設置,則會導致運行時錯誤。
5.SaveSetting不允許改變注冊表項的缺省值。
GetSetting
GetSetting函數從注冊表中的應用程序項返回注冊表項的設置值。其語法為:
GetSetting(appname, section,key[,default])
其中:
1.參數appname,必需,字符串類型,指定應用程序的名稱,該應用程序有注冊表項設置。
2.參數section,必需,字符串類型,指定區段名稱,在該區段有注冊表項設置。
3.參數key,必需,字符串類型,返回注冊表項設置的名稱。
4.參數default,可選,如果注冊表項設置中沒有設置值,則返回該缺省值。如果省略該參數,則其值是一個零長字符串(””)。
說明:
1.該函數從注冊表中的HKEY_CURRENT_USER\Software\VBand VBA Program Settings鍵的子鍵中檢索值。
2.該函數返回字符串值。因此,在使用從注冊表返回的數值型值之前,應該使用合適的轉換函數將返回值轉換為數值數據類型。
3.GetSetting不能檢索注冊表項的缺省值。
GetAllSetting
GetAllSetting語句返回應用程序的注冊表項及其相應的值,是一個Variant型的二維字符串數組。其語法為:
GetAllSetting(appname, section)
其中:
1.參數appname,必需,字符串類型,指定應用程序的名稱。
2.參數section,必需,字符串類型,指定區段名稱,在該區段有注冊表項設置。
說明:
1.該函數從注冊表中的HKEY_CURRENT_USER\Software\VBand VBA Program Settings鍵的子鍵中檢索值。
2.該函數返回的數組中的第一維元素為項名,第二維元素為各個項的值。
3.該函數返回的二維數組的下標從0開始。因此,第一個注冊表項名可以通過引用元素(0,0)獲取。
4.該函數只能返回屬于section指定的最終注冊表主鍵的注冊表項名和數據。如果主鍵含有一個或多個子鍵,則不能用這個函數讀取它們的數據。
DeleteSetting
DeleteSetting語句刪除應用程序子鍵或數值項。其語法為:
DeleteSetting appname[, section[, key]]
其中:
1.參數appname,必需,字符串類型,指定應用程序的名稱。
2.參數section,可選,字符串類型,指定區段名稱,可以是一個鍵或用反斜杠分開的注冊表路徑。
3.參數key,可選,字符串類型,要刪除數值的注冊表設置項名稱。
說明:
1.該函數從注冊表中的HKEY_CURRENT_USER\Software\VBand VBA Program Settings鍵的子鍵中刪除值。
2.如果指定了參數key,那么只有名為key的數值項及其相關聯的值被刪除;如果忽略參數key,那么名為section的子鍵將被刪除;如果忽略參數section,那么名為appname的應用程序子鍵將被刪除。
3.DeleteSetting不能刪除注冊表項的缺省值。
4.除非確定好了,否則不要隨便刪除注冊表項設置,以免誤刪除導致嚴重的后果。
示例
1.下面的代碼將應用程序設置項寫入注冊表:
Sub TestControlReg()
SaveSetting “完美Excel”, _
“excelperfect\VBADev\MyPro”,_
“TestKey”, “100”
MsgBox “可以查看注冊表了!”
End Sub
此時,打開注冊表編輯器,導航到HKEY_CURRENT_USER\Software\VBand VBA Program Settings鍵下,會發現新增子鍵,如下圖1所示。
圖1
2.下面的代碼從注冊表中獲取指定注冊表項值:
Sub TestControlReg1()
Dim val As Long
val = GetSetting(“完美Excel”, _
“excelperfect\VBADev\MyPro”,_
“TestKey”)
MsgBox val
End Sub
運行代碼后的結果如下圖2所示。
圖2
3.下面的代碼刪除指定鍵的注冊表設置項名稱:
Sub testCotrolReg2()
DeleteSetting “完美Excel”, _
“excelperfect\VBADev\MyPro”, _
“TestKey”
MsgBox “看看注冊表!”
End Sub
4.下面是一段綜合示例代碼,演示了創建注冊表項、更新注冊表項、打印注冊表項、打印所有注冊表項、刪除注冊表項等操作。
Sub testReg()
Dim vKeys As Variant
‘創建注冊表項
SaveSetting “MyAppTest”,”General”, “MyApp_Name”, “完美Excel”
SaveSetting “MyAppTest”,”General”, “MyApp_Ver”, “1.0”
SaveSetting “MyAppTest”,”General”, “MyApp_Date”, “2019/10/17”
‘打印注冊表項值
PrintRegSettings
‘更新注冊表項
SaveSetting “MyAppTest”,”General”, “MyApp_Ver”, “1.1”
SaveSetting “MyAppTest”,”General”, “MyApp_Date”, “2019/10/20”
‘打印注冊表項值
PrintRegSettings
‘獲取并打印所有注冊表項值
vKeys =GetAllSettings(“MyAppTest”, “General”)
PrintAllSettings vKeys
‘刪除所有注冊表項
DeleteSetting “MyAppTest”,”General”, “MyApp_Name”
DeleteSetting “MyAppTest”,”General”, “MyApp_Ver”
DeleteSetting “MyAppTest”,”General”, “MyApp_Date”
PrintRegSettings
End Sub
Sub PrintRegSettings()
Dim str As String
On Error Resume Next
str = “應用程序名稱:” & _
GetSetting(“MyAppTest”,”General”, “MyApp_Name”) & _
vbCrLf & “應用程序版本:” &_
GetSetting(“MyAppTest”,”General”, “MyApp_Ver”) & _
vbCrLf & “更新日期:” &_
GetSetting(“MyAppTest”,”General”, “MyApp_Date”)
MsgBox str
End Sub
Sub PrintAllSettings(vSettings As Variant)
Dim i As Integer
If IsArray(vSettings) Then
For i = 0 To UBound(vSettings)
Debug.Print vSettings(i, 0) &”: ” & _
vSettings(i, 1)
Next i
End If
End Sub
有興趣的朋友可以自已動手實踐一下上述測試程序,以此來熟悉VBA中的這幾個操控注冊表的函數。