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