我使用广泛的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”未打开,并提供中止选择。
答案 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