关闭excel文件后的VBA Excel变量值

时间:2014-08-06 07:59:37

标签: vba excel-vba excel

我有一个用户表单,用于选择目录路径。该路径存储在变量中。问题是,每次启动宏时,我都必须重新选择目录的路径。应该声明路径变量,以便在宏关闭或excel文件关闭后保持其值?

4 个答案:

答案 0 :(得分:3)

在调用宏之间保持数据更简单;在包含宏的.bas模块中使用模块范围的变量。

保存保存数据更加困难。您可以写入注册表,但这很棘手,您需要使用各种Windows API函数。

最简单的方法是将数据写入工作簿上的某个位置。

答案 1 :(得分:2)

VBA中的注册表很简单。它非常有限并且使用ini文件概念。

其中一些如(来自VBA编辑器中的对象浏览器[F2])

Function GetAllSettings(AppName As String, Section As String)
    Member of VBA.Interaction

Sub SaveSetting(AppName As String, Section As String, Key As String, Setting As String)
    Member of VBA.Interaction

Sub DeleteSetting(AppName As String, [Section], [Key])
    Member of VBA.Interaction

Function GetSetting(AppName As String, Section As String, Key As String, [Default]) As String
    Member of VBA.Interaction

此外,较新的Windows Scripting Host Shell对象也使注册表访问变得容易。

object.RegDelete(strName)

object.RegRead(strName) 

object.RegWrite(strName, anyValue [,strType])

WMI也可以访问注册表。与上述两种方法不同,它可以枚举,因此您可以在不必提前知道的情况下查看其中的内容。

Dim proglist()
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
ret = oReg.EnumKey(&H80000002, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", proglist)
If err.num =0 then
   For each prog in proglist
        msgbox prog
   Next
Else
    Msgbox err.num & " " & err.description & " " & err.source
    err.clear
End If

它还可以检查安全性并监控密钥的更改。

答案 2 :(得分:2)

我会使用名称,可以与工作簿一起保存。

 ThisWorkbook.Names.Add Name:="SavedPath", RefersTo:= someString

另一个简单的替代方法是将该值放在单元格中,最终放在隐藏的工作表中,或者隐藏在任何合适工作表中的行/列中。

第三种解决方案是将其添加到文件属性中。

注册表技巧很复杂,如果您更换机器或用户没有足够的权利,则无法正常工作。

答案 3 :(得分:0)

我已经解决了在单元格上存储数据然后在excel文件初始化上将数据存储到相应变量的问题。非常感谢那些想要解决方案的人!