ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4648|回复: 3

[求助] 利用SaveSetting将应用程序初始化文件中的信息保存或建立应用程序项目写入注册表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-6-14 15:41 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:注册表
一、写入注册表的路径
VBA允许读写下列注册表路径中的注册表设置:
\HKEY_CURRENT_USER\Software\VB and VBA Program Settings\{子键}
二、使用的命令
1、SaveSetting(AppName,Section,Key,Setting),用于设置注册表值
参数:(1)参数AppName必需,String类型,指定VB and VBA Program Settings键的子键;
      (2)参数Section必需,String类型,在参数AppName中指定的键的子键;
      (3)参数Key必需,String类型,在参数Section中指定的键的值;
      (4)参数Setting必需,String类型或数值型,存储在参数Key指定的值中的一块数据。
说明:(1)参数Section可以是一个嵌套子键的路径,每个子键与其父键之间使用反斜杠隔开。例如,如果参数    Section的值为Settings\Coordinates,则表明从HKEY_CURRENT_USER\Software\VB and VBA Program Settings\[AppName]\Settings\Coordinates中检索值。
      (2)SaveSetting函数不允许改变注册表项的缺省值,否则会产生运行时错误。

2、GetSetting(AppName,Section,Key[,Default]),读取注册表项设置及其相应值
参数:(1)参数AppName必需,String类型,指定VB and VBA Program Settings键的子键;
      (2)参数Section必需,String类型,在参数AppName中指定的键的子键;
      (3)参数Key必需,String类型,在参数Section中指定的键的值;
      (4)参数default可选,String类型,指定当参数Key中没有设置值时返回的数据。

说明:(1)如果忽略GetSetting函数中的参数Default,则认为是一个零长字符串("")。
3、GetAllSettings(appname, section),读取应用程序项目的所有注册表项设置及其相应值
参数:(1)参数AppName必需,String类型,指定VB and VBA Program Settings键的子键;
      (2)参数Section必需,String类型,在参数AppName中指定的键的子键。

注意:(1)GetAllSettings 返回 Variant,其内容为字符串的二维数组,该二维数组包含指定区域中的所有注册表项设置及其对应值;
      (2)如果 appname 或 section 不存在,则 GetAllSettings 返回未初始化的 Variant。

4、
DeleteSetting(AppName[,Section[,Key]]),
删除子键或值

参数:(1)参数AppName必需,String类型,指定VB and VBA Program Settings键的子键;
      (2)参数Section必需,String类型,在参数AppName中指定的键的子键;
      (3)参数Key必需,String类型,在参数Section中指定的键的值。

注意:
(1)DeleteSetting(AppName),直接删除了子键;

       (2)DeleteSetting(AppName,
Section
),删除了
指定的键的子键

       (3)DeleteSetting(AppName,Section,Key),
删除了
指定的键的子键的值;
      (4)不能使用DeleteSetting函数从注册表的主键里删除那些不是HKEY_CURRENT_USER\Software\VB and VBA Program Settings的子键的项;
      (5)如果提供了参数Key,那么只有名为Key的项及其关联的值被删除;如果忽略了参数Key,那么参数Section指定的子键将被删除;如果忽略了参数Section,那么参数AppName的键将被全部删除;
      (6)DeleteSetting函数不能删除属于任何键的缺省值。

三、举例

1、举例1
Sub TestRegistryFunctions()
    '创建带有两个值的子键
    SaveSetting AppName:="MyApp", Section:="MySection", Key:="MyKey", Setting:="MySetting"
    SaveSetting AppName:="MyApp", Section:="MySection", Key:="MyKey2", Setting:="MySetting2"
    '显示"MySetting"和"MySetting2"
    MsgBox Prompt:=GetSetting(AppName:="MyApp", Section:="MySection", Key:="MyKey")
    MsgBox Prompt:=GetSetting(AppName:="MyApp", Section:="MySection", Key:="MyKey2")
    '删除子键
    DeleteSetting AppName:="MyApp"
    '显示空字符串
    MsgBox Prompt:=GetSetting(AppName:="MyApp", Section:="MySection", Key:="MyKey")
    MsgBox Prompt:=GetSetting(AppName:="MyApp", Section:="MySection", Key:="MyKey2")
End Sub

2、举例2
Sub ExperimentWithRegistry()
    Dim vaKeys As Variant
    '创建新的注册表项
    SaveSetting "XLTest", "General", "App_Name", "XLTest"
    SaveSetting "XLTest", "General", "App_Version", "1.0.0"
    SaveSetting "XLTest", "General", "App_Date", "10/11/2003"
    PrintRegistrySettings
    '更新设置
    SaveSetting "XLTest", "General", "App_Version", "1.0.1"
    PrintRegistrySettings
    '获取所有的设置
    vaKeys = GetAllSettings("XLTest", "General")
    PrintAllSettings vaKeys
    '删除设置
    DeleteSetting "XLTest", "General", "App_Name"
    DeleteSetting "XLTest", "General", "App_Version"
    DeleteSetting "XLTest", "General", "App_Date"
    PrintRegistrySettings
End Sub

Sub PrintRegistrySettings()
    On Error Resume Next
    Debug.Print "应用程序名:" & GetSetting("XLTest", "General", "App_Name")
    Debug.Print "应用程序版本:" & GetSetting("XLTest", "General", "App_Version")
    Debug.Print "应用程序日期:" & GetSetting("XLTest", "General", "App_Date")
    Debug.Print "------------------------------"
End Sub

Sub PrintAllSettings(vaSettings As Variant)
    Dim nItem As Integer
    If IsArray(vaSettings) Then
        For nItem = 0 To UBound(vaSettings)
            Debug.Print vaSettings(nItem, 0) & ": " & vaSettings(nItem, 1)
        Next
    End If
    Debug.Print "------------------------------"
End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2012-6-14 15:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-1-18 21:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
做個記號以後學習

謝謝版主

TA的精华主题

TA的得分主题

发表于 2014-9-25 17:36 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 18:30 , Processed in 0.038783 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表