- Office VBA開發經典:中級進階卷
- 劉永富 劉行
- 1352字
- 2019-11-22 18:29:05
2.2 內置注冊表函數
注冊表是Windows系統中的一個系統數據庫,主要存儲硬件配置、軟件設置等信息。注冊表的操作主要有創建注冊表項、刪除注冊表項、修改注冊表項、讀取注冊表項等。
在實際編程過程中,可以把開發的程序中的一些變量的值存儲在注冊表中,也可以從注冊表中讀取內容,讓程序加以利用。因此注冊表操作很有必要學習和研究。
VBA操作注冊表的方式有多種,本節介紹VBA、VB6的幾個內置函數。
GetSetting:根據指定的路徑獲取注冊表項的值。
GetSettings:與GetSetting類似,返回一個數組。
SaveSetting:保存內容到注冊表中。
DeleteSetting:刪除一個注冊表項。
需要注意的是,上述4個內置函數的操作范圍只限于HKEY_CURRENT_USER\Software\VB and VBA Program Setting這個鍵值內部。
按下快捷鍵【Windows +R】,輸入regedit,按回車鍵即可彈出注冊表編輯器。然后依次單擊節點HKEY_CURRENT_USER\Software\VB and VBA Program Setting,就可以進入該文件夾中,如圖2-19所示。

圖2-19 VB、VBA專用的注冊表項
以上四個內置函數的參數幾乎都包含AppName、Section、Key三個層級。
以圖中所選的節點為例,AppName、Section、Key依次是CnChessQipu、DataBase、FileName。
2.2.1 GetSetting
GetSetting的作用是從指定的層級獲取Key的屬性值,返回一個字符串。

運行上述過程,對話框中返回注冊表中FileName的屬性值,如圖2-20所示。
與注冊表中對比,完全一致,如圖2-21所示。

圖2-20 獲取注冊表信息

圖2-21 核對獲取的結果
需要注意的是,如果GetSetting函數的三個參數中的任何一個寫錯,都將造成找不到注冊表項,不會出現運行錯誤,而是返回一個空字符串。
2.2.2 SaveSetting
在使用SaveSetting函數的過程中,如果指定的層級存在,就修改現有層級的屬性值;如果層級不存在,則會自動創建層級路徑。
SaveSetting是對注冊表的修改,沒有返回值,因此后面的參數不需要括號。
運行下面的過程,修改FileName這個Key的屬性值。

刷新一下注冊表,看到屬性值已修改,如圖2-22所示。

圖2-22 修改注冊表信息
在編程開發過程中,經常需要在一個Section下面建立多個Key,此時會對應多個屬性值。下面以世界各國信息為例,說明一下注冊表項的存取過程,如表2-3所示。
表2-3 世界各國基本信息表

假設要把表2-3中的內容保存到注冊表中,那么“國家”這一列就相當于Section,而首都、國土面積和人口都是Key,要分別保存。以上所有項目都位于“世界大國”這個AppName下面。

運行上述過程,刷新注冊表,可以看到注冊表中已存在相關信息,如圖2-23所示。

圖2-23 批量存入注冊表
2.2.3 DeleteSetting
DeleteSetting用于刪除一個注冊表節點,這里的節點可以是AppName、Section、Key中的任何一個。
DeleteSetting需要指定的參數也是三個,但是根據需要,可以更改參數個數。規定的參數越少,刪除的層級越高,刪除的內容也越多。
DeleteSetting "世界大國", "加拿大", "國土面積"
表示刪除加拿大的國土面積這個Key和屬性。
DeleteSetting "世界大國", "加拿大"
表示刪除加拿大這個Section,也就是刪除加拿大這個文件夾。
DeleteSetting "世界大國"
將會刪除整個AppName根節點。
2.2.4 GetAllSettings
獲取注冊表的方法,除了前面講過的GetSetting函數以外,還可以用GetAllSettings函數一次性獲取一個Section下面的所有Key及其屬性值。獲取到的內容是一個多行2列的二維數組。
下面的代碼把“中國”這個Section的所有屬性裝載到字符串數組v()中。

單步執行上述過程,可以在本地窗口看到v()是一個3行2列的二維數組,如圖2-24所示。

圖2-24 一次性獲取全部注冊表信息
為了把數組放到Excel單元格中,采用Range的Resize方法根據數組大小自動擴展區域。運行上述過程后,表格單元格的結果如圖2-25所示。
以上內容的源代碼文件為“實例文檔07.xlsm”。
以上四個注冊表操作函數一般用于產品開發時存取程序信息,如果要操作其他場所的注冊表項,需要用到2.3節講述的WshShell對象。

圖2-25 將注冊表信息發送到單元格
- Instant Testing with CasperJS
- Monkey Game Development:Beginner's Guide
- Web交互界面設計與制作(微課版)
- Flink SQL與DataStream入門、進階與實戰
- 青少年軟件編程基礎與實戰(圖形化編程三級)
- 精通API架構:設計、運維與演進
- Windows Server 2012 Unified Remote Access Planning and Deployment
- Mastering Google App Engine
- Visual FoxPro程序設計習題集及實驗指導(第四版)
- R語言與網絡輿情處理
- PHP從入門到精通(第4版)(軟件開發視頻大講堂)
- Kotlin極簡教程
- Scratch從入門到精通
- Python+Office:輕松實現Python辦公自動化
- Arduino Electronics Blueprints