2017-04-11 383 views
3

我在另一個線程中使用Jtchase08提供的代碼的修改版本,並且在Excel 2010和2016中正常工作時,將對象庫更改爲相關的Microsoft文字版本,但是在試圖使在2000年同樣的事情,我的工作得到ActiveDocument.SaveAs2不能在Excel 2000中工作,但在2010和2016可以使用

運行時錯誤「438」:對象不支持

調試帶我到這個屬性或方法這裏

Screenshot

我正在使用的完整代碼如下,如果有人可以幫助修改這個工作在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 
+0

很可能2000使用早期版本的VBA,這就是爲什麼它不起作用。有可能使用另一個可以在2000年完成相同工作的子程序。很好的問題。 – cybermonkey

+1

它可能是你需要在vba – user1

+0

@ mo.h中添加一個對字對象庫的引用請花些時間來閱讀這個問題,OP已經這樣做了:'當我將對象庫改爲相關的Microsoft字version'。 – cybermonkey

回答

3

我認爲最好的解決辦法是

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的old function SaveAs使用之前的版本。而對於Office 2010和更新版本,則使用new function SaveAs2

信息
SaveAs2功能在Office 2010中
引進據我所知,唯一的區別是,SaveAs2功能需要額外的(最後一個)參數CompatibilityMode(見WdCompatibilityMode枚舉)。

所以舊的SaveAs也可能在新版本中工作,因爲它仍然是爲兼容性原因而實現的。但我們永遠不知道它是否會在未來的版本中被刪除,所以如果從VBA中刪除舊的SaveAs,以上解決方案可以兼容未來的版本。

+0

非常感謝Peh這是我需要的解決方案。 – Parky

相關問題