【问题标题】:Vba reference workbook via Path通过路径的 Vba 参考工作簿
【发布时间】:2016-08-12 11:40:19
【问题描述】:

我正在制作一个宏是 Excel 2016,并且想通过它的路径引用工作簿而不打开它。

这就是我目前所做的

Dim Wb As Workbook
Dim Path As String
Dim Fd As FileDialog

Set Fd = Application.FileDialog(msoFileDialogOpen)
Fd.AllowMultiSelect = False
Fd.Show

Path = Fd.SelectedItems(1)

Set Wb = Workbooks.Open(Path)

但是,最后一行打开了文件。

我想知道如何将 Wb 设置为路径指向的工作簿而不打开它。

【问题讨论】:

  • 你不能。 WB 是一个工作簿对象。此外,您已经已经通过Path 变量获得了对路径本身的引用。如果你能描述更多关于你想要完成的事情?
  • 我不能将工作簿对象存储在路径指向的工作簿Wb 中吗?我只需要引用该工作簿,以便稍后从其单元格中检索一些数据。 @大卫泽门斯
  • 不,它只是不能这样工作,因为Workbook 必须打开才能成为工作簿!但是,您可以从已关闭的工作簿中检索数据,如果这是您所追求的。或者,您可以在单独的 Excel 实例中以不可见的方式打开它们,然后以这种方式检索数据。
  • 啊,我明白了。如果工作簿打开,这并不是什么大问题,但如果不打开它看起来会更好。感谢您的帮助@DavidZemens。
  • 我同意@DavidZemens。如果您想从已关闭的工作簿中检索值,请参阅 This

标签: vba excel


【解决方案1】:

我只需要引用该工作簿,以便稍后从其单元格中检索一些数据。我不能将工作簿对象存储在路径指向的工作簿的 Wb 中吗?

不。在 Excel 中打开文件之前,它不是工作簿,即使您和我可能认为作为工作簿,但它不是。这只是一个文件。但是您可以从已关闭的工作簿中获取数据。

这通常有几种方法(可能还有其他方法):

  1. 对于少量数据,使用ExecuteExcel4Macro方法。
  2. 对于大量数据,使用ADO查询工作簿。
  3. 对于简单的解决方案,只需打开文件并使其不可见。

我将介绍最简单的方法,即在新的 Excel 实例中以不可见的方式打开它。这仅比在同一个 Excel 实例中可见打开它稍微复杂一些。您只需创建一个新的 Excel 实例,将其 .Visible 属性设置为 False,然后在 那个 实例中打开文件。

Dim Wb As Workbook
Dim xlApp as Excel.Application 
Dim Path As String
Dim Fd As FileDialog

Set Fd = Application.FileDialog(msoFileDialogOpen)
Fd.AllowMultiSelect = False
Fd.Show

If Fd.SelectedItems > 0 Then
    Path = Fd.SelectedItems(1)
Else
    MsgBox "Nothing selected!"
    Exit Sub
End If

'## Create new instance of excel, and make it invisible
Set xlApp = New Excel.Application
xlApp.Visible = False
'## Open your workbook in this new instance
'   I use ReadOnly:=True to prevent conflict if the file is already open elsewhere
Set Wb = xlApp.Workbooks.Open(Path, ReadOnly:=True)

确保在程序结束时执行此操作,以关闭工作簿并退出新的/不可见的 Excel 实例:

Wb.Close 
xlApp.Quit

【讨论】:

  • 我会试试的。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多