AFAIK 没有纯 VBA 解决方案来覆盖原始行为。您可以使用 Robert Mearns 答案中的替代方法,但它不显示 windows 窗体,因此它的可定制性较低。
如果您想达到确切的效果 - FileOpenDialog,请遵循此答案。
您可以使用 Environ$() 函数打印所有环境变量。这不会显示任何直接指向MyComputer的变量,因此您不能将其传递给.InitialFileName
属性。
MyComputer不是您可以通过cmd访问的物理位置。我认为它是一个抽象接口,很难解释 VBA 和使用字符串如何访问位置。.InitialFileName
好吧,我能想到的唯一解决方法是使用可以访问MyComputer的外部库,例如 C# 编写的。
这比听起来容易!
按照以下步骤创建自定义 OpenFileDialog。
你需要一个Visual Studio Express For Desktop——它可以免费下载和使用。
安装后 - 运行为Administrator
!(图书馆需要注册)
选择File
和New Project
。将其重命名为CustomOFD
and 并点击OK
.
在解决方案资源管理器中右键单击CustomOFD
项目并选择Add References
添加对System.Windows.Forms
如下图的img的引用
右键单击Class1.cs
解决方案资源管理器并将其重命名为CustomOFD.cs
.
双击您的CustomOFD
并将代码替换为下面的代码
using System;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CustomOpenFileDialog
{
[InterfaceType(ComInterfaceType.InterfaceIsDual),
Guid("541EDD34-4CDC-4991-82E9-6FC23F904B5B")]
public interface ICustomOFD
{
DialogResult ShowDialog();
string FileName();
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("E33102F0-B3C0-441C-8E7A-B9D4155A0D91")]
public class CustomOFD : ICustomOFD
{
private OpenFileDialog box = new OpenFileDialog();
public CustomOFD()
{
box.Multiselect = false;
box.Title = "Select file";
box.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}";
}
public DialogResult ShowDialog()
{
return box.ShowDialog();
}
public string FileName()
{
return box.FileName;
}
}
}
Tools
注意:您可以使用=>为您自己的类生成一个新的 GUID,Create GUID
并用您自己的 GUID 替换它,如果您想...
在解决方案资源管理器中右键单击CustomFileOpenDialog
并选择Properties
在“属性”窗口中,转到“应用程序”选项卡,然后单击Assembly Info
并勾选该Make COM-Visible
框
然后转到Build
选项卡并勾选注册 COM 互操作
右键单击项目并Build
从菜单中选择
现在查看“输出”选项卡,因为它显示了库编译到的位置
通常它的
c:\users\administrator\documents\visual studio 2012\Projects\CustomOpenFileDialog\CustomOpenFileDialog\bin\Debug\CustomOpenFileDialog.dll
好的。现在保存并关闭 VS。
打开 Excel 并进入 VBE ALT+F11并插入一个标准模块
单击Tools
菜单栏并选择References
单击Browse
按钮并导航到CustomOpenFileDialog.tlb
文件并单击确定添加到参考列表
复制粘贴模块的代码
Option Explicit
Sub Main()
Dim ofd As New CustomOFD
Set ofd = New CustomOFD
ofd.ShowDialog
Debug.Print ofd.Filename
End Sub
最后,运行 sub 并享受计算机作为自定义 OpenFileDialog 对话框的默认位置!