excel - Excel VBA - 生成新的 Word 文档并保护表单
问题描述
我有一个启用宏的 excel 文件(请注意,这是在使用 Office for Mac 的 Mac 上运行的),它有几个保存的宏,其中之一是:
- 从保存的 .dotx 模板文件创建一个新的 .docx 文档文件。
- 使用电子表格中的数据填充新 .docx 文件中的书签。
- 保护新文档只允许最终用户编辑表单域。
- 将新文档保存到特定文件夹。
我目前的代码除了第 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 上执行此操作可能是原因。
谢谢。
解决方案
看起来好像您正在使用后期绑定,这意味着您不能使用 Word 对象库中的常量和枚举,例如wdAllowOnlyFormFields
. 所以你的代码应该是:
WordDoc.Protect Type:=2, noreset:=True, Password:="password"
推荐阅读
- python - 由于用完所有 RAM,将大型 Pandas df 文本数据保存到磁盘会使 Colab 崩溃。有解决方法吗?
- windows - 为什么函数 LdrRegisterDllNotification 的第一个参数必须为零?
- swift - 如何在swift中保持自定义单元格中记录/记录停止按钮的行为一致?
- css - 自动展开所有 PrimeNG Accordion 面板以进行打印
- ethereum - 这种逻辑在以太坊中可行吗?
- regex - 用于传递标点符号的正则表达式
- php - Salesforce的BULK API2.0通过CSV上传到api时不更新记录
- c++ - 浮点计算能否用于任何可靠的功能,尤其是容器和算法?
- node.js - NodeJS:模块没有自注册
- python - 从 Tkinter 组合框中检索值