我是VBA的新手,但我过去做了一些事情。
我正在尝试将excel单元格(单元格A1至A66)中的文本复制到Word文档中。此操作的目的是允许用户复制它并将其作为TEXT粘贴到其他位置。如果用户直接从excel复制它,它将粘贴为表格。
这是我的代码:
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行以尝试减慢复制/粘贴的速度,但是并没有做太多。
您有什么秘诀可以使我的代码更可靠?
非常感谢, 路易斯
答案 0 :(得分:0)
如果要粘贴为文本,也许:
Sub CopyAsTextToWord()
Dim wordApp As New Word.Application
With wordApp
.Visible = True
.Documents.Add
Worksheets("Description2").Range("A1:A66").Copy
.Selection.PasteSpecial DataType:=wdPasteText
End With
End Sub
另一方面,如果您想一次一次粘贴每个单元格(不确定原始代码中的样子),也许是略有不同的方法,避免使用剪贴板。将范围读入数组,进行遍历,然后使用Selection.TypeText
依次“粘贴”每个元素。可能可以变得更强大。
Sub TransferAsText()
Dim wordApp As New Word.Application
With wordApp
.Visible = True
.Documents.Add
Dim arr()
arr = Worksheets("Description2").Range("A1:A66").Value
Dim i As Long
For i = LBound(arr, 1) To UBound(arr, 1)
.Selection.TypeText Text:=CStr(arr(i, 1))
Next i
End With
End Sub