Excel VBA检查工作簿是否打开,如果不是,打开它

Excel VBA检查工作簿是否打开,如果不是,打开它

问题描述:

下面的代码工作不正常。尝试运行宏时遇到错误400。你可以稍微回顾一下这段代码吗?我不确定问题是否与我引用的函数变量不同。Excel VBA检查工作簿是否打开,如果不是,打开它

Sub AutoFinal()  
    Dim final_wb As Workbook, shop_stat_wb As Workbook 
    Dim book2 As String 
    book2 = "Workbook_I_need.xlsx" 
    Dim book2path As String 
    book2path = ThisWorkbook.Path & "\" & book2 
    Set final_wb = ThisWorkbook 
    If IsOpen(book2) = False Then Workbooks.Open (book2path) 
    Set shop_stat_wb = Workbooks(book2)  
End Sub 

Function IsOpen(strWkbNm As String) As Boolean  
    On Error Resume Next 

    Dim wBook As Workbook 
    Set wBook = Workbooks(strWkbNm) 

    If wBook Is Nothing Then 'Not open 
     IsOpen = False 
     Set wBook = Nothing 
     On Error GoTo 0 
    Else 
     IsOpen = True 
     Set wBook = Nothing 
     On Error GoTo 0 
    End If  
End Function 
+0

它错误在哪一行? – Zerk

+0

我想这个错误出现在Workbooks.Open的行上。在那里设置一个断点,并检查Path是否正确,并且指向一个现有的文件。 – z32a7ul

+0

@ z32a7ul是的,您对错误行是正确的。我检查了一条路径是正确的。设置断点不是一个问题,但我可以用这个来实现吗? – RafMil

IsOpen可以简化为:

Function IsOpen(strWkbNm As String) As Boolean 
    Dim wb As Workbook 
    On Error Resume Next 
    Set wb = Workbooks(strWkbNm) 
    IsOpen = Err.Number = 0 
    On Error GoTo 0 
End Function 

这里是我会怎么写呢:

Sub AutoFinal2() 
    Dim final_wb As Workbook, shop_stat_wb As Workbook 
    Dim WorkbookFullName As String 

    WorkbookFullName = ThisWorkbook.Path & "\" & book2 
    Set final_wb = ThisWorkbook 
    Set shop_stat_wb = getWorkbook(WorkbookFullName) 

    If shop_stat_wb Is Nothing Then 
     MsgBox "File not found:" & vbCrLf & WorkbookFullName, vbCritical, "AutoFinal2 Cancelled" 
     Exit Sub 
    End If 
End Sub 

Function getWorkbook(WorkbookFullName As String) As Workbook 
    Dim wb As Workbook 
    For Each wb In Workbooks 
     If wb.FullName = WorkbookFullName Then Exit For 
    Next 

    If wb Is Nothing Then 
     If Len(Dir(WorkbookFullName)) > 0 Then 
      Set wb = Workbooks.Open(WorkbookFullName) 
     End If 
    End If 
    Set getWorkbook = wb 
End Function 
+0

@Thomsa Inzina非常感谢这段代码!我喜欢他们这样做,无论如何,你指的是book2没有宣布。但是增加2条线解决了一个问题。根据IsOpen函数,变量strWKbNm也应该放在我的Sub()中才能正常工作? – RafMil