分享

VB 操作WORD函数实例

 Vb技巧 2013-01-03

VB  操作WORD函数实例

    说明,用VB操作WORD,以下源码第一次操作完全正常,正常打开,正常替换,正常退出。进程中并没有留下windword的进程,但第二次继续操作时就出问题,运行到ReplaceWord()就出现462错误,关闭程序重新开始又正常。
'=============打开word==============
Dim wordApp As Word.Application
Dim wordDoc As Word.Document
Function OpenWord(FileName) '打开指定word文档
     Set wordApp =New Word.Application
    Set wordDoc = wordApp.Documents.Open(FileName)
    wordApp.Visible = False
    Set wordDoc = wordApp.Documents.Open(FileName)
End Function

‘============替换关键字===========
Function ReplaceWord(SearchStr, ReplaceStr) '全部替换函数
    wordApp.Selection.Find.ClearFormatting
    wordApp.Selection.Find.Replacement.ClearFormatting
    With wordApp.Selection.Find
        .Text = SearchStr
        .Replacement.Text = ReplaceStr
        .Forward = True
        .Wrap = wdFindContinue
       .Format = False
       .MatchCase = False
       .MatchWholeWord = False
       .MatchByte = True
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
    End With
    wordApp.Selection.Find.Execute Replace:=wdReplaceAll
End Function

'==================另存为===================

Function SaveAsWord(DiskStr, NameStr)
      ChangeFileOpenDirectory DiskStr
      ActiveDocument.SaveAs FileName:=NameStr, FileFormat:=wdFormatDocument , LockComments:=False, _
            Password:="", AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False,_
            EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData:=False,_
            SaveAsAOCELetter:= False
      Application.Documents.Close
      Application.Quit
End Function

'===================清除对象============
Function CloseWord()
      Set wordDoc = Nothing '清除文件实例
      Set wordApp = Nothing '清除WORD实例
End Function

使用 Nothing 关键字将对象变量从实际对象中分离开来,但这并不意味着实际对象的消失。举一个例子 ,新建两个窗体,在 Form1 上放一个按钮,再在其 Click 事件中写入:
Form2.Show
'在这里,VB 默认创建了一个 Form2 的实例,就像调用了
'Set Form2 = New Form2
Set Form2 = Nothing

运行后,点击 Form1 上的按钮,你会看到,Form2 好端端的在那里摆着,并没有消失,但是,如果你再点一次,会发现,又出现了一个 Form2
原因是,VB 会自动创建 Form2 的实例,而由于调用了 Set Form2 = Nothing, 所以下次调用时,VB 会自动创建一个 Form2 的实例,以前那个打开的 Form2 是无法在其他模块中调用的.

再回到你的代码,同理,
Set wordDoc = Nothing '清除文件实例
Set wordApp = Nothing '清除WORD实例
并没有关闭 Word,你可以把
wordApp.Visible = False
改成wordApp.Visible = True
再试试你的代码,会发现,调用OpenWord后,出现了一个Word窗口
调用CloseWord后,Word 并未发生变化
但是,如果此时你调用SaveAsWord或ReplaceWord,会发生错误, 原因是 WordDoc 与 WordApp 现在已经没有指向已经打开的那个 Word 文档 与 Word 程序.

但是,如果此时你再调用 OpenWord,你就可以看到为什么调用SaveAsWord或ReplaceWord,会发生错误,此时是因为文档已经被打开了,为了关闭 Word,你可以使用下面的代码:
wordDoc.Close '关闭 Word 文档
wordApp.Quit '退出 Word

但由于你的 WordApp 是隐藏的,所以最好使用下面的代码
wordDoc.Close True '关闭 Word 文档并保存更改
wordApp.Quit '退出 Word

如果你在 Word 程序 中同时打开数个 Word 文档,那么可以使用
wordApp.Quit True '退出 Word 并保存所有打开文档的更改

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多