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 文件 - 对话框更改的主要内容,如果未能解决你的问题,请参考以下文章

从 Access 2010 VBA 打开 Excel 2010 文件

VB弹出打开对话框,选择文件excel文件

Excel VBA操作word文件

更改VBA代码以打开工作簿

excel vba 运行时错误

excel文件打开时 vba满足条件弹窗提醒?