VBA 打开一个 Excel 文件 - 对话框更改
Posted
技术标签:
【中文标题】VBA 打开一个 Excel 文件 - 对话框更改【英文标题】:VBA Open an Excel file - Dialog box changes 【发布时间】:2017-04-25 23:04:31 【问题描述】:我正在运行一个 excel vba 脚本,我试图打开一个对话框来选择一个 excel 文件并打开该 excel 文件。我尝试给出文件夹的路径,以便最终用户可以直接进入该文件夹并选择他想要的文件。
但是,它第一次运行良好,但是当它下次运行时,它会打开最终用户上次选择文件的文件夹。
这是我的代码,
thisYear = Year(Date)
'change the display name of the open file dialog
Application.FileDialog(msoFileDialogOpen).Title = _
"Select Input Report"
'Remove all other filters
Application.FileDialog(msoFileDialogOpen).Filters.Clear
'Add a custom filter
Call Application.FileDialog(msoFileDialogOpen).Filters.Add( _
"Excel Files Only", "*.xls*")
'Select the start folder
Application.FileDialog(msoFileDialogOpen _
).InitialFileName = "\\driveA\Reports\" & thisYear & ""
file = Application.FileDialog(msoFileDialogOpen).Show
Application.FileDialog(msoFileDialogOpen).Execute
如何解决这个问题?
【问题讨论】:
根据msdn.microsoft.com/en-us/library/office/ff862446.aspx,你需要使用.show来显示对话框,如果你使用msoFileDialogOpen,你应该使用.execute来打开文件。也许这可以解释你的问题。 @RichHolton 谢谢先生 :) @RichHolton 我已经更新了我的代码。你能告诉我哪里出错了。 还是不行?我再挠挠头…… @RichHolton Ya,谢谢,如果我也找到任何答案,我会更新。 【参考方案1】:最好使用对象变量而不是重复调用Application.FileDialog
,因为每次调用Application.FileDialog
都可能被视为该类的新实例,这可能解释了您的问题。这是一个我还没有测试过的假设,我不是 100%,但它似乎是合理的。
试试吧:
Dim fdlg as FileDialog
Set fdlg = Application.FileDialog(msoFileDialogOpen)
'change the display name of the open file dialog
fdlg.Title = "Select Input Report"
'Remove all other filters
fdlg.Filters.Clear
'Add a custom filter
fdlg.Filters.Add "Excel Files Only", "*.xls*"
'Select the start folder
fdlg.InitialFileName = "\\driveA\Reports\" & thisYear & ""
'Display to user:
fdlg.Show
'Ensure selection:
If fdlg.SelectedItems.Count <> 0 Then
'Captures the filename chosen:
file = fdlg.SelectedItems(1)
'Then, you probably want to open it:
Set wb = Workbooks.Open(file)
Else
'no file is selected, add error-handling or inform user, exit sub early, etc.
End If
【讨论】:
你的代码对我有用。我的意思是,当我第一次运行宏时,它会选择代码中提到的路径并进入特定的文件夹。让我们将此文件夹称为文件夹 A。在文件夹 A 内,用户有三个文件夹:文件夹 1、文件夹 2 和文件夹 3。如果用户从文件夹 2 中提取文件以及下次运行此宏的时间。它将最终用户直接带到文件夹 2 而不是文件夹 A,并允许他选择他想要的文件夹。 好的,感谢您的澄清。这绝对听起来很奇怪和出乎意料! 没问题,谢谢:)以上是关于VBA 打开一个 Excel 文件 - 对话框更改的主要内容,如果未能解决你的问题,请参考以下文章