Как я могу удалить макросы из word-файла при сохранении с SaveAs2? - PullRequest
0 голосов
/ 08 февраля 2019

Итак, у меня есть Word-шаблон с макросами внутри.Чего я хочу достичь?

Когда файл сохраняется, я хочу сохранить файл Word как новый файл docx с новым именем и новым назначением.

Когда я нажимаю «Сохранить», теперь файл уже сохранен правильно с новым именем и новым местом назначения (также как файл * docx), но макрос все еще внутри, поэтому, когда я нажимаю «Сохранить», макрос все еще выполняется (это то, что я хочу удалить).

Так как я могу удалить при сохранении файла все макросы в новом файле?

Мой текущий код:

Sub FileSave()
'
' saveFile Macro
'
'
    DocDate = ActiveDocument.Tables(1).Cell(4, 2)
    GCCName = ActiveDocument.Tables(1).Cell(8, 1)
    FileExtension = ".docx"
    matchedStr = GCCName & " - " & DocDate & FileExtension

    matchedStr = Replace(matchedStr, "", "")
    matchedStr = Replace(matchedStr, Chr(13), "")

    ActiveDocument.Save
    ChangeFileOpenDirectory "########\"
    ActiveDocument.SaveAs2 FileName:= _
        matchedStr, FileFormat:= _
        wdFormatXMLDocument, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False, CompatibilityMode:=15
End Sub

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Альтернатива для файлов docm, взятая из моего проекта

NameNoExtension - это имя нового файла.Поместите свой путь, где SelectSaveDir () находится в моем коде.Код открывает копию файла, в котором находится код, удаляет все модули vba и сохраняет скопированный файл в формате docx.

Sub SaveCopyAsDocx(ByVal NameNoExtension As String)
    Dim NewDocument As Object
    Set NewDocument = Documents.Add(ThisDocument.FullName)

    Dim Modul As Object

    For Each Modul In NewDocument.VBProject.VBComponents
        If Modul.Name <> "ThisDocument" Then
            NewDocument.VBProject.VBComponents.Remove Modul
        End If
    Next

    NewDocument.SaveAs SelectSaveDir() & "\" & NameNoExtension & ".docx"

End Sub
0 голосов
/ 08 февраля 2019

Если у вас есть шаблон Word (точка), вы не должны открывать шаблон для создания документа: вы должны просто создать новый документ с самого начала.Если новый документ генерируется кодом, используйте Documents.Add вместо Documents.New.Новый документ будет содержать нет макросов и может быть сохранен как документ без проблем.

В наши дни можно сохранить файл шаблона в файл с расширением docx и в формате «документ без макросов» - это будет работать.(В более ранних версиях Word формат файла * .dot отсутствовал.)

ОДНАКО документ по-прежнему будет иметь ссылку на шаблон и иметь возможность «видеть»."макросы по этой ссылке.Возможно, поэтому вы думаете, что макросы сохраняются в документе docx.Если такой файл отправляется «из дома» (в место, где нет доступа к шаблону в папке, где он хранится), то макросы не будут отображаться или будут доступны.

Если вы хотите полностью отделить документ от его шаблона, присоедините его к другому шаблону (обычно Normal.dotm, поскольку он доступен во всех установках Word).Пример, основанный на коде в вопросе:

ActiveDocument.AttachedTemplate = NormalTemplate

Это должно быть в конце кода, поскольку оно отделит его от кода, выполняющего действие.

Подсказка длякод в вопросе: работа с ActiveDocument может быть ненадежной - нет уверенности, что это всегда будет документ, предназначенный (например, пользователь может активировать другой).Более надежный подход - работать с объектом Document.То же самое относится и к другим вещам, таким как таблицы.Например:

Dim doc as Word.Document
Dim tbl as Word.Table
Set doc = ActiveDocument
' do things with the document...
Set tbl = doc.Tables(1)
' do things with the table
DocDate = tbl.Cells(4,2).Range.Text
GCCName = tbl.Cell(8, 1).Range.Text
doc.Save
...