项目场景:
Word VBA
问题描述:
最近在学习wordVBA时遇到以下问题:运行时错误'4198':应用程序定义或对象定义错误
这是我写的一段Excel VBA操作Word的代码,作用是打开已存在的word文档,向其中输入内容后保存退出
Sub test2()
Dim wordapp As New Word.Application '建立word对象
wordapp.Documents.Open ("D:\2021\我的文件\VBA\练习\test.docx") '打开word文档
wordapp.Visible = ture
wordap.Selection.EndKey unit:=wdStory '光标移动到文章末尾
wordapp.Selection.TypeText Text:="我的博客" '输入内容"
wordapp.ActiveDocument.Save '保存
wordapp.ActiveDocument.Close '关闭
wordapp.Quit '退出word对象
Set wordapp = Nothing '释放对象
End Sub
该代码中有一句错误,第五句我把对象变量wordapp误写成了wordap,第一次运行时出现如下问题:运行时错误‘424’:要求对象
第二次运行时再次出现问题,运行过程缓慢,按住win+tab键后发现这个窗口:
***.docx 被“***”锁定,无法编辑。请选择:打开只读副本;创建本地副本,稍后合并更改;在原始副本可用时接收通知
点击取消后报错:运行时错误'4198':应用程序定义或对象定义错误
使用WPS打开word文档时,发现:文档已被“***”锁定,是否以只读模式打开?
原因分析:
猜想如下:
在第一次运行时,程序可以正常打开word文档,但在执行到第五句错误语句时,程序自动退出运行,没有继续往下执行,因此该文件没有被保存,但是被word锁定成了只读模式保护起来。
第二次运行时,因为程序不能正常打开该文档,所以会出现“文件正在使用”的弹窗提示,而且该文档有些时候没有办法编辑、保存以及删除,只有在任务管理器中结束word后台运行才能删除掉。
解决方案:
为了防止调试程序过程中再出现以上问题,可以在程序中加入一个错误转移语句
程序中出现错误后会自动转到skip后面的语句运行,以上问题得到完美解决。
Sub test2()
Dim wordapp As New Word.Application '建立word对象
On Error GoTo skip
wordapp.Documents.Open ("D:\2021\我的文件\VBA\练习\test.docx") '打开word文档
wordapp.Visible = ture
wordap.Selection.EndKey unit:=wdStory '光标移动到文章末尾
wordapp.Selection.TypeText Text:="我的博客" '输入内容"
skip:
wordapp.ActiveDocument.Save '保存
wordapp.ActiveDocument.Close '关闭
wordapp.Quit '退出word对象
Set wordapp = Nothing '释放对象
End Sub