VBA复制粘贴时出现“类Worksheet的Paste方法无效”错误

原创文章,欢迎转载:http://miao.blog/article/vba-paste-error

VBA中进行copy和paste的时候,无规律的出现 “类Worksheet的Paste方法无效”错误
怀疑是电脑太快,copy操作还没有完成,就直接运行paste,导致paste出错。
所以在copy操作后,sleep一小段时间,结果真的解决了问题。

代码如下:

由于vba的wait方法只能是秒为单位,所以使用windows的api来自定义一个sleep函数:

' windows api
Private Declare Function timeGetTime Lib "winmm.dll" () As Long

' sleep(毫秒)
Sub sleep(T As Long)
    Dim time1 As Long
    time1 = timeGetTime
    Do
        DoEvents
    Loop While timeGetTime - time1 < T
End Sub

然后在copy和paste的中间 sleep(100),具体sleep多少毫秒,可以调试下

    With old_layout_sheet
        .Shapes.Range(getPictureShapeNames(old_layout_sheet)).Select
        Selection.Copy
        
        sleep 100
        layout_doc.Activate
        With layout_doc.Sheets("sheet1")
            .Activate
            .Range("B6").Select
            .Paste
            Application.CutCopyMode = False
        End With
    End With

当然, 粘贴之后最好写上Application.CutCopyMode = False用来清空剪贴板,避免剪贴板里边存放太多内容

推荐阅读
使用VBA调用Outlook发送邮件
评论