打开工作簿,如果尚未打开,如果已经打开,则获取该引用

时间:2018-03-12 12:02:43

标签: vba excel-vba excel

我在另一个工作簿路径中对工作簿进行了一些更改。但问题是我需要检查工作簿是否已经打开。如果不是,我需要将该打开的实例转换为工作簿变量。

以下是用于检查工作簿是否打开的代码,然后是用于打开

的代码
example.com/job/details/software-engineer

因此,如果文件打开,我需要将该工作簿放入该wb变量。

4 个答案:

答案 0 :(得分:3)

我有一个解决方案

public void addMarker(LatLng latlng, final String title) {
    markerOptions.position(latlng);
    markerOptions.title(title);
    final String TimeNot = markerOptions.getTitle();

这是在循环中遍历所有工作簿,如果它在那里采用该引用..

答案 1 :(得分:1)

要将工作簿引用到工作簿集合,应将其打开 -

  

Workbook对象是Workbooks集合的成员。 Workbooks集合包含当前在Microsoft Excel中打开的所有Workbook对象。

MSDN Wrokbook Object

因此,如果您的工作簿位于同一个Excel实例中,请尝试这样:

Public Sub TestMe()        
    Dim wb As Workbook
    Set wb = Workbooks("12.xlsx")    
End Sub

如果它不在同一个实例中,则GetObject应该有效:

Public Sub TestMe()        
    Dim wb As Workbook
    Set wb = GetObject("C:\path\12.xlsx")    
    Debug.Print wb.Worksheets(1).Name
End Sub

GetObject MSDN

这是同一实例中的3个工作簿的样子:

enter image description here

这是2个工作簿在2个不同实例中的样子:

enter image description here

使用多个实例(Source answers.microsoft.com)的优点和缺点:

<强>赞成

  • 如果您有32位Excel,则每个实例最多可使用3 GB内存。如果您有一台功能强大的计算机,非常繁重的文件和32位Excel,则每个Excel实例都可以使用3 GB。所以用例如2个Excel.exe实例,你可以说Excel的总内存可以使用三元组。 (请注意,64位Excel不需要这样做,因为它不受每个实例3 GB内存的限制)

  • 如果你想拥有一个单独的Undo链,那么每个Undo只在当前活动的工作簿中撤消,那么单独的实例确实会实现这一点。

<强>缺点

  • 如果您希望所有打开文件共享一个共同的撤销链,那么使用多个实例将无法实现此目的。

  • 如果您希望能够例如按Ctrl + F6快速在打开的文件之间跳转,然后使用多个实例将无法实现此目的。

  • Paste Special在实例之间不起作用。有关详细信息,请参阅此内容。

  • 单击不能在单独运行的实例中创建2个文件之间的工作簿链接,并且不会实时更新。

代码看起来不错,只需使用Set关键字:

If fo = False Then set wb = Workbooks.Open(filename:=cf)

答案 2 :(得分:1)

我希望这个帮助

Dim dict As Dictionary

Function OpenFile(fileFullName As String) As Workbook


If (dict.Exists(fileFullName)) Then

OpenFile = dict.Item(fileFullName)

End If

dict.Add "fileFullName", Workbooks.Open(Filename:=fileFullName)

OpenFile = dict.Item(fileFullName)

End Function

Application.ActiveWorkbook = OpenFile(fileFullName)

答案 3 :(得分:0)

这是一个快速函数,如果它尚未打开,将打开工作簿:

Function GetWorkBook(ByVal sFullName As String, Optional ReadOnly As Boolean) As Workbook
    Dim sFile As String: sFile = Dir(sFullName)
    On Error Resume Next
        Set GetWorkBook = Workbooks(sFile)
        If GetWorkBook Is Nothing Then Set GetWorkBook = Workbooks.Open(sFullName, ReadOnly:=ReadOnly)
    On Error GoTo 0
End Function