大家使用任意一款浏览器(例如:Chrome、Edge)下载文件时,如果【另存为】对话框选择C:\Download
,那么下次再次使用【另存为】功能,对话框默认显示C:\Download
,而不是根目录。
在VBA开发中调用目录选择器并不复杂,但是这个目录选择器有些不方便,并不具备Windows目录选择器的“记忆”功能。其实通过一些变通方法也可以实现相同的效果。
示例代码。
Sub SelectFolder()
Dim objFolder As FileDialog
Dim strSelectedPath As String
Set objFolder = Application.FileDialog(msoFileDialogFolderPicker)
objFolder.InitialFileName = GetSetting("MyApp", "LastFolder", "Path", "C:\")
objFolder.Show
If objFolder.SelectedItems.Count = 1 Then
strSelectedPath = objFolder.SelectedItems(1)
SaveSetting "MyApp", "LastFolder", "Path", strSelectedPath
MsgBox "已选择目录: " & strSelectedPath, vbInformation
Else
MsgBox "未选中任何文件夹!", vbCritical
End If
Set objFolder = Nothing
End Sub
【代码解析】
第4行代码创建FileDialog
对象。
第5行代码设置目录选择器默认加载的目录,GetSetting
函数读取注册表中的键值,如果找不到的话,设置初始目录为C:\
。
第6行代码显示目录选择器。
第7行代码判断用户选中的单个目录。
第8行代码读取用户选中的第一个目录。
第9行代码将用户选择的目录保存在注册表中。
第10行代码显示提示消息框。
第14行代码释放对象变量占用的系统资源。
用户最后一次选择的目录被保存在注册表中,再次调用目录选择器时,将默认加载上次选择的目录,也就实现“记忆”功能。
貌似不可实现的功能,其实也可以变通实现。