我正在制作一个宏是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设置为路径导致的工作簿而不打开它的方法。
答案 0 :(得分:2)
我只需要引用该工作簿,以便稍后可以从其单元格中检索一些数据。我不能将工作簿对象存储在Wb中,这是该路径导致的工作簿吗?
不。在文件在Excel中打开之前,它不是一本工作簿,即使你和它在一起。我可能认为它 一个工作簿,但它不是。它只是一个文件。但是你可以从封闭的工作簿中获取数据。
通常有一些方法(可能还有其他方法):
ExecuteExcel4Macro
方法。ADO
查询工作簿。我将介绍最简单的方法,即在新的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