判断指定的工作簿是否已打开

1 颗星2 颗星3 颗星4 颗星5 颗星 (目前还没有人投票)
Loading ... Loading ...

下面整理归纳了一些实用函数代码,其功能都是用来判断指定的工作簿是否打开,如果已打开则返回True,否则返回False。
实用代码1:

Function IsWorkbookOpen(wbk As String) As Boolean
    Dim wbT As Excel.Workbook
    Err.Clear
    On Error Resume Next
    Set wbT = Application.Workbooks(wbk)
    '如果工作簿已打开则wbT将包含该工作簿对象
    IsWorkbookOpen = Not wbT Is Nothing
    Err.Clear
    On Error GoTo 0
End Function

实用代码2:

Function WorkbookIsOpen(wbkName) As Boolean
    '如果所给工作簿已打开则返回True
    Dim wbk As Workbook
    On Error Resume Next
    Set wbk = Workbooks(wbkName)
    If Err = 0 Then
        WorkbookIsOpen = True
    Else
        WorkbookIsOpen = False
    End If
End Function

实用代码3:

Function WorkbookOpen(WorkBookName As String) As Boolean
    '如果该工作簿已打开则返回真
    WorkbookOpen = False
    On Error GoTo WorkBookNotOpen
    If Len(Application.Workbooks(WorkBookName).Name) > 0 Then
        WorkbookOpen = True
        MsgBox "该工作簿已打开"
        Exit Function
    End If
WorkBookNotOpen:
End Function

上面的三段函数代码只接受仅带有工作簿名称的参数。
实用代码4:

Function IsWorkbookOpen(sWorkbook As String) As Boolean
    Dim sName As String
    Dim sPath As String
    Dim sFullName As String
    On Error Resume Next
    IsWorkbookOpen = True
    '判断所给的工作簿名称是否带有路径名
    If InStr(1, sWorkbook, "\", vbTextCompare) > 0 Then
        '文件名带有路径,需要分解
        sFullName = sWorkbook
        BreakdownName sFullName, sName, sPath
        If StrComp(Workbooks(sName).FullName, sWorkbook, 1) <> 0 Then
            IsWorkbookOpen = False
        End If
    Else
        If StrComp(Workbooks(sWorkbook).Name, sWorkbook, 1) <> 0 Then
            IsWorkbookOpen = False
        End If
End Function
 
Sub BreakdownName(sFullName As String, _
                  ByRef sName As String, _
                  ByRef sPath As String)
    Dim nPos As Integer
    '找出文件名从哪里开始
    nPos = FileNamePosition(sFullName)
    If nPos > 0 Then
        sName = Right(sFullName, Len(sFullName) - nPos)
        sPath = Left(sFullName, nPos - 1)
    Else
        '无效的文件名
    End If
End Sub
 
'返回提供的完整文件名中文件名的位置或首字符索引值
'完整文件名包括路径和文件名
'例如:FileNamePosition("C:\Testing\Test.xlsx")=11
Function FileNamePosition(sFullName As String) As Integer
    Dim bFound As Boolean
    Dim nPosition As Integer
    bFound = False
    nPosition = Len(sFullName)
    Do While bFound = False
        '确保不是零长度字符串
        If nPosition = 0 Then Exit Do
        '从右开始查找第一个"\"
        If Mid(sFullName, nPosition, 1) = "\" Then
            bFound = True
        Else
            '从右至左
            nPosition = nPosition - 1
        End If
    Loop
    If bFound = False Then
        FileNamePosition = 0
    Else
        FileNamePosition = nPosition
    End If
End Function

上面的函数不仅可以只接受工作簿名称,而且也可以接受带有完整路径的工作簿名称。

相关文章

发表评论