我有一个用户表单,用于选择目录路径。该路径存储在变量中。问题是,每次启动宏时,我都必须重新选择目录的路径。应该声明路径变量,以便在宏关闭或excel文件关闭后保持其值?
答案 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文件初始化上将数据存储到相应变量的问题。非常感谢那些想要解决方案的人!