我正在构建将链接图像转换为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
方法来完全占据剪贴板。假设是这种情况,我可以以某种方式监视剪贴板并等到剪贴板数据已满吗?
答案 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)
),然后循环播放直到剪贴板准备就绪。
半秒应该是足够的时间,尽管理想情况下,您应该在粘贴后从另一端触发过程,而不是主动地触发。