gpt4 book ai didi

VBA:获取Excel FileDialogOpen默认指向 "My Computer"

转载 作者:行者123 更新时间:2023-12-02 14:13:11 24 4
gpt4 key购买 nike

我正在尝试让 Excel 保存和打开对话框默认打开到“我的电脑”,以便用户可以从那里选择一个驱动器。

我有可以打开任何驱动器或我的文档等上的任何路径的对话框,但似乎找不到打开我的计算机的方法。

这是我目前正在使用的代码,它对于已知路径运行良好:

MsgBox objFolders("desktop")
ChDrive objFolders("desktop")
ChDir objFolders("desktop")

strFileName = appRemoteApp.Workbooks("Export Template.xlsm").Application.GetSaveAsFilename(objFolders("desktop") & "\Replica Export " & UserName & " " & Format(Date, "yymmdd") & ".xlsm", FileFilter:="Excel Macro Enabled Workbook (*.xlsm), *.xlsm,")

另外,我从 this site 找到了这个.

如果您将 ::{20D04FE0-3AEA-1069-A2D8-08002B30309D} 粘贴到 Windows 资源管理器地址栏中,它会将您带到我的计算机,但如果我在 VBA 代码中使用它

ChDir "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"

它说找不到目录或其他东西。所以不确定是否有解决这个问题或其他问题的方法。

这也不起作用:

ChDir "C:\WINDOWS\explorer.exe /root,,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" 

我希望向计算机打开对话框的原因是我们将在 Windows 服务器上托管 Excel 文档,并通过 RemoteApp 和远程桌面进行访问。用户将无权访问(权限)服务器驱动器和文件夹等,他们只能访问本地计算机上自己的驱动器,这些驱动器将被映射并在服务器“我的电脑”文件夹下可见,因为缺乏更好的选择单词。服务器上的主文档使用VBA代码生成副本,然后保存到用户本地硬盘上。

最佳答案

据我所知,没有纯 VBA 解决方案可以覆盖原始行为。您可以使用 Robert Mearns 答案中的替代方案,但它不显示 Windows 窗体,因此可定制性较差。

如果您想达到确切的效果 - FileOpenDialog,请按照此答案进行操作。

您可以print all the environmental variables using the Environ$() function 。这不会显示任何直接指向 MyComputer 的变量,因此您无法将其传递给 .InitialFileName 属性。

MyComputer 不是您可以通过 cmd 访问的物理位置。我认为它是一个抽象接口(interface),很难解释 VBA 和 .InitialFileName 如何使用字符串来访问位置。

嗯,我能想到的唯一解决方法是使用用 C# 编写的外部库,该库可以访问 MyComputer

这比听起来容易!

按照以下步骤创建自定义 OpenFileDialog。

您需要一个Visual Studio Express For Desktop - 免费下载和使用。

安装后 - 以管理员身份运行! (库必须注册)

选择文件新建项目。将其重命名为 CustomOFD 并点击OK

enter image description here

在解决方案资源管理器中右键单击 CustomOFD 项目,然后选择添加引用

添加对 System.Windows.Forms 的引用,如下图所示

enter image description here

在解决方案资源管理器中右键单击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 => Create GUID为您自己的类生成一个新的GUID,并将其替换为您自己的GUID ...

右键单击解决方案资源管理器中的CustomFileOpenDialog,然后选择Properties

enter image description here

在“属性”窗口中,转到“应用程序”选项卡,然后单击“程序集信息”,然后勾选“使 COM 可见”框

enter image description here

然后转到Build 选项卡并勾选注册 COM 互操作

enter image description here

右键单击项目并从菜单中选择构建

现在查看“输出”选项卡,它会显示库的编译位置

通常是它

c:\users\administrator\documents\visual studio 2012\Projects\CustomOpenFileDialog\CustomOpenFileDialog\bin\Debug\CustomOpenFileDialog.dll

好的。现在保存并关闭 VS。

打开 Excel 并进入 VBE ALT+F11 并插入标准模块

点击菜单栏上的工具并选择引用

单击浏览按钮并导航到CustomOpenFileDialog.tlb文件,然后单击“确定”添加到引用列表

复制粘贴模块代码

Option Explicit

Sub Main()

Dim ofd As New CustomOFD
Set ofd = New CustomOFD

ofd.ShowDialog

Debug.Print ofd.Filename

End Sub

enter image description here

<小时/>

最后,运行子程序并享受计算机作为自定义 OpenFileDialog 框的默认位置!

enter image description here

关于VBA:获取Excel FileDialogOpen默认指向 "My Computer",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19927852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com