Закрытие документа после сохранения в формате wdFormatDocument - PullRequest
0 голосов
/ 21 мая 2019

У меня более длинный код, и в заключительной части есть кнопка ActiveX для сохранения и закрытия файла. Также для эффективности я добавил команду vbYesNo для создания нового документа на основе используемого шаблона.

Код:

Sub macrosave ()
Dim doc As Document
Dim strDosar As String
Dim Ret As Variant
Set doc = Application.ActiveDocument
strDosar = Range.Paragraphs(1).Range.Text
Ret = MsgBox("Do you want to create a new document?", vbYesNo)
    If Ret = vbYes Then
    Documents.Add Template:=ActiveDocument.AttachedTemplate.Path & Application.PathSeparator & ActiveDocument.AttachedTemplate.Name
     End If
doc.SaveAs "\\server\Public\" & strDosar & ".doc", FileFormat:=wdFormatDocument = 0
doc.Close
End Sub

Если я нажимаю «Да», создается новый документ, последний сохраняется и закрывается впоследствии.
Если я нажимаю «нет», активный документ сохраняется, но впоследствии он не закрывается.

Я подозреваю, что это как-то связано с форматом файла (wdFormatDocument), потому что таким образом он устраняет все коды VBA.

Формат файла необходим, потому что я хочу избавиться от всех элементов управления содержимым после сохранения файла.
Почему doc.Close не выполняется во втором случае и какие у меня есть варианты для достижения цели?

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Я полагаю, что проблема возникает из-за несоответствия между расширением файла - doc и указанным форматом файла wdFormatDocument.

Начиная с Word 2007, формат файла по умолчанию (wdFormatDocument) относится к формату файла Word Open XML, docx. Для сохранения в формате doc необходимо использовать wdFormatDocument97. Причина, по которой он мог работать с перерывами, заключается в том, что числовое значение этого перечисления равно 0.

Попробуйте

doc.SaveAs "\\server\Public\" & strDosar & ".doc", FileFormat:=wdFormatDocument97

Или изменить расширение на docx

doc.SaveAs "\\server\Public\" & strDosar & ".docx", FileFormat:=wdFormatDocument

Однако docx не удалит элементы управления содержимым при следующем открытии документа. (Формат doc будет, потому что элементы управления содержимым были введены одновременно с новым форматом файла, поэтому они не поддерживаются в старом формате.)

Если дополнительной целью является «устранение всех кодов VBA», то имеет смысл изменить прикрепленный шаблон перед закрытием документа на Normal.dotm. Это удаляет ссылку на прикрепленный шаблон и имеет дополнительное преимущество, заключающееся в том, что документ «найдет» свой шаблон, независимо от того, кто его откроет, позже. (Если прикрепленный шаблон отсутствует, при некоторых обстоятельствах он может задержать открытие на значительное время.)

doc.AttachedTemplate = NormalTemplate

Обратите внимание, что это также облегчит выбор пути к файлу, используя FullName poperty шаблона:

Documents.Add Template:=ActiveDocument.AttachedTemplate.FullName
0 голосов
/ 21 мая 2019

Этот аргумент недопустим: FileFormat: = wdFormatDocument = 0

Возможно:

Sub macrosave()
Dim doc As Document, strDosar As String, Ret As Variant
Set doc = ActiveDocument
strDosar = Split(doc.Range.Paragraphs(1).Range.Text, vbCr)(0)
Ret = MsgBox("Do you want to create a new document?", vbYesNo)
If Ret = vbYes Then Documents.Add Template:=doc.AttachedTemplate.FullName
doc.SaveAs "\\server\Public\" & strDosar & ".doc", FileFormat:=wdFormatDocument
doc.Close False
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...