我正尝试将Excel单元格(单元格A1到A66)中的文本复制到Word文档中。此操作的目标是将其复制并粘贴为TEXT。如果直接从Excel复制,则将其粘贴为TABLE。
Private Sub Bouton1_Click()
Dim objWord As New Word.Application
With objWord
.Documents.Add
Application.Wait (Now + TimeValue("0:00:01") / 2)
Worksheets("Description2").Cells(1, 1).Copy
Application.Wait (Now + TimeValue("0:00:01") / 2)
.Selection.PasteSpecial xlPasteValues
.Visible = True
End With
Dim i As Integer
For i = 2 To 66
If Worksheets("Description2").Cells(i, 1) = Worksheets("Description2").Cells(i + 1, 1) Then Exit For
With objWord
Application.Wait (Now + TimeValue("0:00:01") / 2)
Worksheets("Description2").Cells(i, 1).Copy
Application.Wait (Now + TimeValue("0:00:01") / 2)
.Selection.PasteSpecial xlPasteValues
.Visible = True
End With
Next i
objWord.Application.Activate
objWord.Application.WindowState = wdWindowStateMaximize
End Sub
这段代码在70%的情况下都能正常工作,如果不能正常工作,我会收到以下错误(或者是一个变体,但总是与剪贴板有关):
运行时错误“4605”:此方法或属性不可用
因为剪贴板为空或无效。
此外,有时会打开随机OneDrive窗口。
我已经添加了Application.Wait
行,试图减慢复制/粘贴速度,但效果不太好。
如何使我的代码更可靠?
2条答案
按热度按时间1tuwyuhd1#
如果要粘贴为文本,可能需要:
另一方面,如果你想一次粘贴一个单元格(这是你的原始代码,不确定),也许有一个稍微不同的方法,避免剪贴板。读取范围到一个数组,迭代通过它,然后使用
Selection.TypeText
“粘贴”每个元素顺序。也许可以使更强大。xzv2uavs2#
编写单独的函数并从Excel中捕获所有数据
一旦数据被收集,那么它就独立于应用程序,可以在word应用程序内部使用。
数组也可用于通过使用范围来收集数据。