VBA ActiveDocument关注/替代方案?

时间:2014-06-06 13:11:54

标签: access-vba

我在访问中使用VBA打开受保护的Word模板,填写数据,然后重新保护它....这样,如果数据库系统出现故障,单词模板仍然可以在受保护的状态下手动使用。

我刚刚开始使用VBA并且在这一行:

If ActiveDocument.ProtectionType <> wdNoProtection Then
    ActiveDocument.Unprotect Password:=""
End If

我担心在访问中运行代码时,如果用户打开另一个word文档并使其成为焦点,那么它将被西方保护而不是另一个。如何将注意力集中在我写入的文档上......或者我是否需要使用WordApp.protect(或类似的工作方式)以某种方式引用我的文档

Private Sub Command0_Click()
Dim WordApp As Word.Application
Dim strDatabasePath As String
Dim strTemplatePath As String
Dim strTemplate As String
Dim strJobTitle As String
Dim strFile As String

strFile1 = "testcoc.dotx"
strFile2 = "testcoc-private.dotx"
strDatabasePath = CurrentProject.Path & "\"
strTemplatePath = "\templates\"
strTemplate = strDatabasePath & strTemplatePath & strFile2


On Error Resume Next
Set WordApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
    Set WordApp = CreateObject("Word.Application")
End If
On Error GoTo ErrHandler


WordApp.Visible = True
WordApp.WindowState = wdWindowStateMaximize
WordApp.Documents.Add Template:=strTemplate, NewTemplate:=True


'strJobTitle = DLookup("JobTitle", "Job", "JobNum = " & [JobType])
strJobTitle = DLookup("JobTitle", "Job", "JobNum = 'J0456'")

With WordApp.Selection

'Unprotect the file
If ActiveDocument.ProtectionType <> wdNoProtection Then
    ActiveDocument.Unprotect Password:=""
End If

    .Goto what:=wdGoToBookmark, Name:="bm_0_4"
    .TypeText strJobTitle


End With

'Reprotect the document.
'If ActiveDocument.ProtectionType = wdNoProtection Then
    'ActiveDocument.Protect _
    'Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=""
'End If


DoEvents
WordApp.Activate
Set WordApp = Nothing
Exit Sub


ErrHandler:
Set WordApp = Nothing
End Sub

谢谢

1 个答案:

答案 0 :(得分:3)

我还没有尝试过,但WordApp.Documents.Add Template:=strTemplate, NewTemplate:=True确实会返回新文档。所以我会做像

这样的事情
Dim doc as Word.Document
Set doc = WordApp.Documents.Add(Template:=strTemplate, NewTemplate:=True)

并在我的代码中引用doc而不是ActiveDocument。看起来这样做可以帮助你避免你所关注的特殊情况。