通过Path的Vba参考工作簿

时间:2016-08-12 03:03:33

标签: excel vba excel-vba

我正在制作一个宏是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设置为路径导致的工作簿而不打开它的方法。

1 个答案:

答案 0 :(得分:2)

  

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

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

通常有一些方法(可能还有其他方法):

  1. 对于少量数据,请使用ExecuteExcel4Macro方法。
  2. 对于大量数据,请使用ADO查询工作簿。
  3. 对于简单的解决方案,只需打开文件并使其不可见。
  4. 我将介绍最简单的方法,即在新的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