等待剪贴板包含数据

时间:2018-08-08 23:18:38

标签: vba

我正在构建将链接图像转换为Excel中嵌入式图像的过程:

for ws in wb.sheets
    count = ws.shapes.count
    for 1 to count
        'Get first shape from collection
        set shp = ws.shapes(1)

        'Store shape's position/size
        '...

        'Break link if it exists
        shp.CopyPicture
        ws.Paste
        shp.delete
        set newShp = ws.shapes(count)

        'Assign newShp, shp's old position/size
        '...
    next shp
next ws

有时,代码将在以下内容的第二行出现错误:

shp.CopyPicture
ws.Paste

,显示错误“无法执行方法粘贴...”。当我用DoEvents隔开复制和粘贴方法时,也会发生这种情况:

shp.CopyPicture
DoEvents
ws.Paste
DoEvents

但是,在单击调试后,等待一两秒钟,然后再次按下播放,一切将继续正常进行。

我怀疑Excel没有足够长时间等待CopyPicture方法来完全占据剪贴板。假设是这种情况,我可以以某种方式监视剪贴板并等到剪贴板数据已满吗?

1 个答案:

答案 0 :(得分:0)

我认为您可能只需要添加一个停顿时间,以便在尝试访问剪贴板之前给剪贴板一些时间来填充它。

我使用了一个暂停程序,例如:

Sub Pause(sec as Single) 
    Dim startTime as Single 
    StartTime=Timer 
    Do 
        DoEvents
    Loop While StartTime + sec > Timer 
End Sub

我可能会先暂停一刻或四分之一秒(即Pause (0.25)),然后循环播放直到剪贴板准备就绪。

半秒应该是足够的时间,尽管理想情况下,您应该在粘贴后从另一端触发过程,而不是主动地触发。