#excel #vba #macos #ms-word
#excel #vba #macos #ms-word
Вопрос:
У меня есть файл Excel с поддержкой макросов (обратите внимание, что он запущен на Mac с использованием Office для Mac), в котором есть несколько сохраненных макросов, один из которых для:
- Создайте новый файл документа .docx из сохраненного файла шаблона .dotx.
- Заполните закладки в новом файле .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" amp; i)
Set r = .Find(What:=f)
End With
InPath = ThisWorkbook.path amp; Application.PathSeparator amp; "Templates" amp; Application.PathSeparator amp; "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 amp; Application.PathSeparator amp; "Bookings" amp; Application.PathSeparator
OutFile = "Booking Form - " amp; Replace(form.Range("Booking_Ref").Value, "/", "") amp; ".docx"
WordDoc.SaveAs2 OutPath amp; 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.
Спасибо.
Ответ №1:
Похоже, что вы используете позднюю привязку, что означает, что вы не можете использовать константы и перечисления из библиотеки объектов Word, например wdAllowOnlyFormFields
. Поэтому ваш код должен быть:
WordDoc.Protect Type:=2, noreset:=True, Password:="password"