【发布时间】:2019-03-30 03:46:25
【问题描述】:
我有以下代码用于检查文件是否打开。如果文件是打开的,那么它应该什么都不做,但如果文件没有打开,那么它应该显示一条消息,说明文件没有打开并退出子。
但是,无论文件是否打开,它总是退出。
Sub Update_Folder()
Dim str As String
Dim openPos As Integer
Dim closePos As Integer
Dim midBit As String
'Creates file string name
str = Range("H6").Value
openPos = InStr(str, "[")
closePos = InStr(str, "]")
midBit = Mid(str, openPos + 1, closePos - openPos - 1)
If Range("B2").Value = "Yes" Or Range("B4").Value = "Yes" Or Range("B5").Value = "Yes" Or Range("B6").Value = "Yes" Or Range("B9").Value = "Yes" Or Range("B12").Value = "Yes" Or Range("B13").Value = "Yes" Then
On Error Resume Next
Set WB = Workbooks(midBit)
If Err Then MsgBox ("Please open the following file(s): " & str)
'Exit Sub
On Error GoTo 0
End If
Call Folder_Creation
END SUB
检查文件是否打开的正确语法是什么,如果打开,则什么都不做,但如果文件未打开,则显示msgbox并退出子?单元格H6 是C:\Users\User1\Documents\[TestFile.xlsx]。
我尝试了以下链接中的解决方案,但是 Detect whether Excel workbook is already open
它对我不起作用。也许是因为我根据单元格中的文件路径设置路径?运行时出现文件未找到错误。 debug 屏幕将我带到Case Else: Error ErrNo 行。
更新:
以下代码对我有用。我不得不更改Error GoTo 语法,然后将error handler 移动到脚本的末尾。因此,如果发生错误,它会跳到脚本的底部
Sub Update_Folder()
Dim str As String
Dim openPos As Integer
Dim closePos As Integer
Dim midBit As String
'Creates file string name
str = Range("H6").Value
openPos = InStr(str, "[")
closePos = InStr(str, "]")
midBit = Mid(str, openPos + 1, closePos - openPos - 1)
If Range("B2").Value = "Yes" Or Range("B4").Value = "Yes" Or Range("B5").Value = "Yes" Or Range("B6").Value = "Yes" Or Range("B9").Value = "Yes" Or Range("B12").Value = "Yes" Or Range("B13").Value = "Yes" Then
On Error goto ErrorHandler1:
Set WB = Workbooks(midBit)
If Err Then MsgBox ("Please open the following file(s): " & str)
'Exit Sub
Call Folder_Creation
ErrorHandler1:
MsgBox ("Please open the following file(s): " & str)
Exit Sub
END SUB
【问题讨论】:
-
什么样的文件?工作簿?
-
正确,工作簿。
-
midbit 返回什么字符串?可以在这里展示一下吗?
标签: excel vba error-handling