2017-04-11 145 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

相关问题