我们将数据从Excel单元格复制到基于.docx模板文档的新Word文档中。Word文档中的位置是带有书签的。
VBA代码一直在工作,但是自从从2010年升级到MS Office 2016之后,我们就出现了错误:
运行时错误4605此方法或属性不可用,因为
剪贴板为空或无效。
然后我得到了
4605此方法或属性不可用,因为此命令是
不可读
我试了一下wdDoc.Bookmarks…
6124您不允许编辑此选择,因为它是
受保护
我检查了所有的保护,信任中心的设置,等等,所有看起来都是正确的。
"editProject“是一个单细胞标签。
Dim wdApp As Object
Dim wdDoc As Object
Set wdApp = CreateObject("Word.application")
Set wdDoc = wdApp.Documents.Open(Filename:=WdocT, ReadOnly:=True)
' Project NAME
wdDoc.Bookmarks("BOOKMARK1").Range.Select ' wdDoc.Bookmarks("CLIENT").Range.Select
xlData = Sheets("Data Input").Range("editProject") ' get the data
'THIS IS THE PROBLEM LINE
wdApp.Selection.TypeText Text:=xlData ' place in doc '8/10/19 FALLING OVER HERE我知道文档正在打开,并且找到了书签,我在下面输入以检查:
'temp TRY THIS
Dim tempRange As Word.Range
Dim tempStart As Long
Dim tempEnd As Long
' Set tempRange = wdDoc.Bookmarks("BOOKMARK1").Range
Set tempRange = wdDoc.Bookmarks("BOOKMARK2").Range ' THIS WORKS
tempStart = tempRange.Start
tempEnd = tempRange.End我尝试用以下方法清除剪贴板:
' 8/10/19 Bruce the following may help with clipboard error message 4605
wdDoc.UndoClear
Dim oData As New DataObject ' object to use the clipboard
oData.SetText Text:=Empty ' clear
oData.PutInClipboard ' take in the clipboard to empty it
'Application.Wait (Now + TimeValue("00:00:10")) ' this is required to stop clipboard overflow error
Application.CutCopyMode = False ' 8/10/19 Bruce - this should clear the clipboard
DoEvents ' test fixing error 4605
' DoEvents passes control to the operating system.
' Control is returned after the operating system has
' finished processing the events in its queue我在适当的地方尝试了以下几点,但没有什么区别:
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
wdApp.Visible = True我尝试了下面的一行,而不是复制,但同样的错误被抛出;
wdApp.Selection.MoveDown Unit:=wdLine, Count:=1发布于 2019-10-13 23:12:39
如果Excel设置“阅读视图中的打开电子邮件附件和其他不可编辑的文件”没有勾选,它似乎是工作的。
发布于 2020-08-21 14:31:40
在我的环境升级到2016年办公室后,我也遇到了类似的问题。在升级之前,我的代码运行得很好。
我后来注意到的一件事是,升级到Office 2016之后,以前使用的相同的VBA代码将在“读取模式”中打开一个Word doc。在这种模式下,不允许对文档进行编辑,无论是通过UI还是通过代码。这是神秘错误消息"4605此方法或属性不可用,因为此命令不可读“的意思。
为了解决这个问题,我添加了下面的一行,使Word切换回“打印布局视图”。
objWord.ActiveWindow.View.Type = wdPrintView其中objWord是由此处未列出的代码创建的单词对象。
然后,我可以使用像这样的旧代码通过VBA输入文本:
objWord.Selection.GoTo What:=wdGoToBookmark, Name:=bookmarkName
objWord.Selection.TypeText Text:=someText因此,如果您注意到您的VBA代码碰巧在“读取模式”中打开了一个Word doc,那么您可以尝试一下这个工作。
在这个链接中描述了类似的情况,我在发现自己的工作之后发现了这个情况:
https://blogs.msmvps.com/wordmeister/2013/02/22/word2013bug-not-available-for-reading/
https://stackoverflow.com/questions/58279104
复制相似问题