我正在与三个Word Documents
合作。
在开始时,只打开Rough
文档。我需要将数据从Rough转移到CEEMEA & LATAM
并使用Ticker Graveyard
来匹配一些查询,所以CEEMEA & LATAM
Ticker Graveyard
都应该已经打开了。
为此我检查其他文件是否已经打开。如果没有,那么我需要使用Documents.Open
打开特定文档。因为我正在做更新代码:
sub ErrHandling()
On Error GoTo PROBLEM
Windows("CEEMEA & LATAM").Activate ''''' Here checking CEEMEA & LATAM status
'''' after checking STATUS do some work on CEEMEA & LATAM '''''
Set doc = Application.Windows("Ticker Graveyard").Document ''''' Here checking Ticker Graveyard status
'''' after checking do some work on Ticker Graveyard '''''
Exit Sub
PROBLEM:
If Err.Number = 5941 Then
Documents.Open FileName:="C:\Users\dell\Desktop\EMEA CEEMEA\CEEMEA & LATAM.docx" --- handling only CEEMEA & LATAM document
'''''' These lines handle Date in document while opening document''''
Selection.MoveDown Unit:=wdLine, Count:=2
Selection.EndKey Unit:=wdLine
Selection.MoveUp Unit:=wdParagraph, Count:=1, Extend:=wdExtend
Selection.TypeText Format(Date, "MMMM dd, yyyy")
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Else
MsgBox "UNEXPECTED ERROR = " & Err.Number
Exit Sub
End If
Resume Next
End Sub
但问题是因为两个检查点触发相同的Error Number
我无法使用简单的on error goto
语句区分它们。
现在我的问题是如何区分这两个错误?我该如何单独处理它们?如果有另一种方式来处理这种情况,请分享。
有许多策略用于处理代码需要引用可能存在或可能不存在的特定对象的情况。哪种方法“最好”在某种程度上是一种哲学思考。基本方法是:
根据问题中的代码,下面概述了两种方法的策略。
错误处理
可以在过程中使用多个“标签”(跳转到错误处理程序的目标),因此可以为每个单独的文档设置“标签”。因此,对于每个文档,可以使用不同的错误处理程序,它具有自己的代码“分支”。
On Error GoTo PROBLEM_CEEMA
Windows("CEEMEA & LATAM").Activate ''''' Here checking CEEMEA & LATAM status
On Error GoTo General
'''' after checking STATUS do some work on CEEMEA & LATAM '''''
On Error GoTo PROBLEM_TICKER
Set doc = Application.Windows("Ticker Graveyard").Document ''''' Here checking Ticker Graveyard status
On Error GoTo General
'''' after checking do some work on Ticker Graveyard '''''
Exit Sub
PROBLEM_CEEMA:
If Err.Number = 5941 Then
Documents.Open FileName:="C:\Users\dell\Desktop\EMEA CEEMEA\Ticker Graveyard.docx" --- handling only Ticker document
Else
MsgBox "UNEXPECTED ERROR = " & Err.Number
Exit Sub
End If
Resume Next
PROBLEM_TICKER:
If Err.Number = 5941 Then
Documents.Open FileName:="C:\Users\dell\Desktop\EMEA CEEMEA\CEEMEA & LATAM.docx" --- handling only CEEMEA & LATAM document
Else
MsgBox "UNEXPECTED ERROR = " & Err.Number
Exit Sub
End If
Resume Next
PROBLEM_General:
'General, non-document-related error handling
End Sub
迭代Documents集合
Word应用程序在Documents
集合中保存已打开文档的运行列表。可以使用For...Each
(或For
)循环来运行集合并比较文档名称。这可以在单独的函数中完成,因此代码不需要重复。
Sub Test
Dim doc1 as Document, file1 as String
Dim doc2 as Document, file2 as String
file1 = "C:\Users\dell\Desktop\EMEA CEEMEA\CEEMEA & LATAM.docx"
file2 = "C:\Users\dell\Desktop\EMEA CEEMEA\Ticker Graveyard.docx"
If not IsDocumentOpen(file1) Then
Set doc1 = Documents.Open(FileName:=file1)
End If
If not IsDocumentOpen(file2) Then
Set doc2 = Documents.Open(FileName:=file2)
End If
End Sub
Function IsDocumentOpen(fileName as String) as Boolean
Dim doc as Word.Document
Dim isOpen as Boolean
isOpen = false
For Each doc in Documents
IF doc.Name = fileName Then
isOpen = true
End If
Next
IsDocumentOpen = isOpen
End Function