VBA:获取Excel FileDialogOpen默认指向“我的电脑”

我试图得到excels保存并打开对话框默认打开“我的电脑”,以便用户可以从那里select一个驱动器。

我有对话框打开到任何驱动器上的任何path或我的文件等,但似乎无法find一种方式,它打开到我的电脑。

这是我目前使用的代码,它对于已知的path工作正常:

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,") 

另外,我从这个网站find了这个。

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

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

它说它无法find目录或东西。 所以不知道是否有这个或什么东西的工作。

这也没有工作:

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

我想让对话框对计算机开放的原因是,我们将通过RemoteApp和远程桌面来访问windows服务器上的excel文档。 用户将无法访问(权限)的服务器驱动器和文件夹等,他们将只能访问自己的驱动器在本地计算机上,这将被映射,并显示在服务器“我的电脑”文件夹下缺乏更好的字。 服务器上的主文档使用VBA代码生成副本,然后保存到用户本地硬盘驱动器。

AFAIK没有纯粹的VBA解决scheme来覆盖原来的行为。 您可以使用Robert Mearns的替代scheme,但不会显示窗体,因此可以自定义。

按照这个答案,如果你想达到确切的效果 – FileOpenDialog。

您可以使用Environ $()函数打印所有的环境variables 。 这将不会显示任何直接指向MyComputer的variables,因此您无法将其传递给.InitialFileName属性。

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

那么,唯一的解决方法是我可以想到的问题是使用一个外部库,例如可以访问MyComputer的 C#。

这比听起来容易!

按照以下步骤创build您的自定义OpenFileDialog。

您需要一个Visual Studio Express的桌面 – 它是免费下载和使用。

安装后 – 以Administrator身份运行! ( 图书馆必须注册

selectFileNew Project 。 将其重命名为CustomOFD ,然后点击OK

在这里输入图像描述

右键单击解决scheme资源pipe理器中的CustomOFD项目,然后selectAdd References

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

在这里输入图像说明

用鼠标右键单击解决scheme资源pipe理器中的Class1.cs并将其重命名为CustomOFD.cs

双击您的CustomOFD并用下面的代码replace代码

 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,并用你自己的replace它,如果你想…

右键单击解决scheme资源pipe理器中的CustomFileOpenDialog ,然后selectProperties

在这里输入图像描述

在“属性”窗口中,转到“应用程序”选项卡,然后单击“ Assembly Info并勾选“ Make COM-Visible

在这里输入图像描述

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

在这里输入图像说明

右键单击该项目,然后从菜单中select“ Build

现在查看输出选项卡,因为它显示了库编译到的位置

通常是它的

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

好。 现在保存并closuresVS.

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

点击菜单栏上的Tools ,然后selectReferences

单击Browsebutton并导航到CustomOpenFileDialog.tlb文件,然后单击确定添加到引用列表

复制粘贴模块的代码

 Option Explicit Sub Main() Dim ofd As New CustomOFD Set ofd = New CustomOFD ofd.ShowDialog Debug.Print ofd.Filename End Sub 

在这里输入图像说明


最后,运行子,并享受电脑作为定制的OpenFileDialog框的默认位置!

在这里输入图像说明

我看不到使用GetSaveAsFilename或类似对话框计算机我的电脑上打开的方法。

可以提示用户使用VB脚本来select一个文件夹。 显示的根目录是“ 计算机” ,用户可以select一个文件夹。 该文件然后可以编程方式保存到选定的文件夹。

 Sub Test() MsgBox BrowseForFolder(MyComputer) End Sub 

http://technet.microsoft.com/library/ee176604.aspx

 Function MyComputer() As Variant Dim objShell As Object, objFolder As Object Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.Namespace(&H11&) MyComputer = objFolder.self.Path Set objShell = Nothing Set objFolder = Nothing End Function 

http://www.vbaexpress.com/kb/getarticle.php?kb_id=405

 Function BrowseForFolder(Optional OpenAt As Variant) As Variant Dim ShellApp As Object Set ShellApp = CreateObject("Shell.Application"). _ BrowseForFolder(0, "Please choose a folder", 0, OpenAt) On Error Resume Next BrowseForFolder = ShellApp.self.Path On Error GoTo 0 Set ShellApp = Nothing End Function 
 .InitialFileName = "Computer" 

适用于FileDialog(msoFileDialogFolderPicker)

在Windows Vista – Excel 2007上testing