Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA检查工作簿是否已打开,如果未打开则打开_Vba_Excel - Fatal编程技术网

Excel VBA检查工作簿是否已打开,如果未打开则打开

Excel VBA检查工作簿是否已打开,如果未打开则打开,vba,excel,Vba,Excel,我放在下面的代码工作不正常。尝试运行宏时出现错误400。你能回顾一下这段代码吗?我不确定问题是否与我所指的函数变量无关 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 = ThisWorkboo

我放在下面的代码工作不正常。尝试运行宏时出现错误400。你能回顾一下这段代码吗?我不确定问题是否与我所指的函数变量无关

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

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

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

它在哪一行出错?我猜错误出现在Workbooks.Open的那一行。在那里设置断点,并检查路径是否正确,它是否引用了现有文件。@z32a7ul是的,关于错误行,您是对的。我检查了一条路径,它是正确的。设置断点不是一个问题,但我可以用它实现什么?它在哪一行出错?我猜错误出现在Workbooks.Open的那一行。在那里设置断点,并检查路径是否正确,它是否引用了现有文件。@z32a7ul是的,关于错误行,您是对的。我检查了一条路径,它是正确的。设置断点不是问题,但我能用它实现什么?@Thomsa Inzina非常感谢这段代码!我喜欢你做这件事的方式,不管怎样,你指的是未声明的第二册。但增加两条线解决了一个问题。根据IsOpen函数,变量strWKbNm也应该放在my Sub()中才能正常工作?@Thomsa Inzina非常感谢这段代码!我喜欢你做这件事的方式,不管怎样,你指的是未声明的第二册。但增加两条线解决了一个问题。根据IsOpen函数,变量strWKbNm也应该放在my Sub()中才能正常工作?