ActiveDocument.SaveAs2 не работает в Excel 2000, но хорошо в 2010 и 2016 годах

Я использовал модифицированную версию кода, предоставленную Jtchase08 в другом потоке, и она отлично работает в Excel 2010 и 2016, когда я изменяю библиотеку объектов на соответствующую версию Microsoft Word, однако, пытаясь заставить то же самое работать в 2000 году, я получаю

Ошибка времени выполнения "438": объект не поддерживает это свойство или метод

Отладка приводит меня сюда

Скриншот

Полный код, который я использую, приведен ниже, и если кто-то может помочь изменить его, чтобы он работал в 2000 году, это было бы очень полезно.

Sub ExportToHTML()

      Dim DocPath As String
      Dim MsgBoxCompleted
      Worksheets("Final Code").Activate
      Worksheets("Final Code").Range("A1:A322").Select

      Dim AppWord As Object
      Set AppWord = CreateObject("Word.Application")

      AppWord.Visible = False

      Selection.Copy

      DocPath = CurDir & Application.PathSeparator & Range("U15")

      'Create and save txt file
      AppWord.Documents.Add
      AppWord.Selection.Paste
      AppWord.ActiveDocument.SaveAs2 Filename:=DocPath, FileFormat:=wdFormatText

      Application.CutCopyMode = False
      AppWord.Quit (wdDoNotSaveChanges)
      Set AppWord = Nothing

      MsgBoxCompleted = MsgBox("Process complete.", vbOKOnly, "Process complete")
      Worksheets("User Input").Activate
End Sub

1 ответ

Решение

Я думаю, что лучшим решением будет

If Val(Application.Version) < 14 Then
    AppWord.ActiveDocument.SaveAs Filename:=DocPath, FileFormat:=wdFormatText
Else
    AppWord.ActiveDocument.SaveAs2 Filename:=DocPath, FileFormat:=wdFormatText
End If

Так что для версий до Office 2010 старая функцияSaveAs используется. А для Office 2010 и новее новая функцияSaveAs2 используется.

Информация
SaveAs2 Функция была введена в Office 2010.
Как я знаю, единственная разница в том, что SaveAs2 функция принимает дополнительный (последний) аргумент CompatibilityMode (см. перечисление WdCompatibilityMode).

Так старый SaveAs может работать и в новых версиях, потому что это все еще реализовано по причинам совместимости. Но мы никогда не знаем, будет ли он удален в каких-либо будущих версиях, поэтому с помощью вышеприведенного решения вы получите совместимость с будущими версиями в случае, если старые SaveAs удаляется из VBA.

Другие вопросы по тегам