首页 > 解决方案 > Excel VBA - 生成新的 Word 文档并保护表单

问题描述

我有一个启用宏的 excel 文件(请注意,这是在使用 Office for Mac 的 Mac 上运行的),它有几个保存的宏,其中之一是:

  1. 从保存的 .dotx 模板文件创建一个新的 .docx 文档文件。
  2. 使用电子表格中的数据填充新 .docx 文件中的书签。
  3. 保护新文档只允许最终用户编辑表单域。
  4. 将新文档保存到特定文件夹。

我目前的代码除了第 3 点外,我已经使用 Document.Protect 方法来应用所需的保护,但似乎没有效果/不起作用。也没有显示错误消息。请参阅下面的当前代码:

Sub GenerateDocType(DocType As String)
    Dim form As Worksheet
    Dim db As Worksheet
    Dim WordApp As Object
    Dim WordDoc As Object
    Dim InPath As String
    Dim OutPath As String
    Dim OutFile As String
    Dim temp As String
    
        Set form = Worksheets("Bookings")
        Set db = Worksheets("Database")
    
        On Error Resume Next
        Set WordApp = GetObject(, "Word.application")
        If Err = 429 Then
            Set WordApp = CreateObject("Word.application")
            Err.Clear
            Application.Wait (Now + TimeValue("0:00:03"))
        End If
        On Error GoTo 0
        Set WordApp = GetObject(, "Word.application")
        WordApp.Visible = True

        f = form.Range("Booking_Ref").Value
        With db.Range("G2", "G" & i)
            Set r = .Find(What:=f)
        End With
    
        InPath = ThisWorkbook.path & Application.PathSeparator & "Templates" & Application.PathSeparator & "Booking Form.dotx"
        Set WordDoc = WordApp.Documents.Add(InPath)
        
        With WordDoc.Bookmarks
             .Item("BookingRef").Range.InsertAfter CStr(db.Cells(r.Row, 7).Value)
             'Have removed other bookmark inserts as these are not relevant to issue, they are similar to above line
        End With
        
        OutPath = ThisWorkbook.path & Application.PathSeparator & "Bookings" & Application.PathSeparator
        OutFile = "Booking Form - " & Replace(form.Range("Booking_Ref").Value, "/", "") & ".docx"

        WordDoc.SaveAs2 OutPath & OutFile
        WordApp.ActiveDocument.Protect Type:=wdAllowOnlyFormFields, noreset:=True, Password:="password"
        'Above line seems to have no effect on new document created
        WordDoc.Save
        WordApp.Quit
End Sub

有关如何更正保护新的 .docx 文件的任何帮助都将得到应用,不确定是否在 Mac 上执行此操作可能是原因。

谢谢。

标签: excelvbamacosms-word

解决方案


看起来好像您正在使用后期绑定,这意味着您不能使用 Word 对象库中的常量和枚举,例如wdAllowOnlyFormFields. 所以你的代码应该是:

WordDoc.Protect Type:=2, noreset:=True, Password:="password"

推荐阅读