检查特定Excel文件是否已打开

时间:2015-02-28 13:58:05

标签: excel vba ms-word word-vba

我使用广泛的Excel-Word链接,使用VBA代码手动更新。如果Excel文件未打开,Word会尝试打开它,警告再次打开它是一个麻烦,需要一个对话框应答,然后转到下一个链接并重新开始。由于通常有100个链接,这是一个很大的问题。

我发现简单的VBA代码调用函数来检查Excel是否正在运行。

    Dim sApp As String
    sApp = "Excel.Application"
    If IsAppRunning(sApp) = True Then
        MsgBox "Excel is Running, continue" & SourceFileName
    Else
        MsgBox "Excel is NOT Running, abort"
        Exit Sub
    End If

我想检查RIGHT Excel文件是否已打开。 “right”文件将与Word文件同名,例如,MyDocSample.doc将链接到MyDocSample.xls。

如果MyDocSample.xls已打开,则继续,如果没有,则应发布警告,说明“MyDocSample.xls”未打开,并提供中止选择。

3 个答案:

答案 0 :(得分:0)

答案将出现在IsAppRunning子功能中。您需要在Excel应用程序对象中标识每个窗口的.Caption,并将其与列表进行比较。

Function IsAppRunning(ByVal sAppName) As Boolean
    Dim w As Long, oApp As Object
    On Error Resume Next
    Set oApp = GetObject(, sAppName)
    If Not oApp Is Nothing Then
        For w = 1 To oApp.Windows.Count
            Debug.Print w & oApp.Windows(w).Caption
        Next w
        Set oApp = Nothing
        IsAppRunning = True
    End If
End Function

您正在使用的这种基本功能取决于您一次只能打开一个实例(可能有多个工作簿)的Excel。我不相信它会在应用程序实例中循环。

答案 1 :(得分:0)

如果您知道文件名,可以使用GetObject函数返回工作簿。

Sub foo()

Dim s As String
Dim wb As Object 'Excel.Workbook

s = replace(ActiveDocument.Name, ".doc", ".xls") 'Modify if needed

Set wb = GetExcelFile(s)

If wb Is Nothing Then
    MsgBox "File is not open!"
    Exit Sub
End If


End Sub

Function GetExcelFile(filename As String)
Dim obj As Object 'Excel.Workbook

On Error Resume Next
Set obj = GetObject(, "Excel.Application").Workbooks(filename)
On Error GoTo 0

Set GetExcelFile = obj

End Function

答案 2 :(得分:0)

为什么不循环遍历excel应用程序中的所有工作簿?

Sub Open_Book()
    Dim varSheets As Variant
    Dim booMatch As Boolean
    Dim strFilePath As String
    strFilePath = "C:\FullFilePath"
    booMatch = False
    For Each varSheets In Application.Workbooks
        If varSheets.Name = "FileName.xls" Then
            booMatch = True
            Exit For
        End If
    Next varSheets
    If booMatch = False Then
       Workbooks.Open strFilePath 
    End If
End Sub