我需要使用 Excel vba 复制另一个工作簿 (WbO) 中的图表图片/图像,并将该图片粘贴到该工作簿 (TWb) 的工作表中。 我想出了一个简单的代码来做到这一点。 好处是代码可以工作。逐行浏览代码,一切都完美完成。
但是,如果我运行代码(无步进),它也会运行到最后,没有任何错误并完成作业。但是,到最后 Excel 崩溃没有任何错误消息,重新启动并重新打开工作簿。 (所有工作都丢失了)。 最奇怪的是,运行结束后 3 到 5 秒就崩溃了。 3 到 5 秒对于计算来说是一个巨大的时间长度。这段时间在做什么??
为了测试,我添加了“Msgbox“Completed”,vbokonly”作为最后一个代码行。这使得 vba 停止并显示消息,并且当消息在屏幕上时不会崩溃。单击“确定”,宏运行到最后,然后几秒钟后......崩溃。
在网上搜索类似问题,发现一些旧帖子提到与复制/粘贴相关的错误,但没有像这样完全崩溃。
在不同的电脑上尝试了相同的文件/代码,两者都具有最新的 Office 365,但更新渠道不同(不是相同的版本)。结果完全一样。
尝试将 .CopyPicture 语句更改为普通的 Copy,然后使用 PasteSpecial 作为图片。相同的结果。
甚至尝试将复制/粘贴指令移动到不同的子目录(2018 年帖子的建议),并在两者之间插入 DoEvents ..但没有任何运气。
有人知道为什么会发生这种情况吗? 如何克服这个问题?
欢迎帮助
示例代码如下:
Application.EnableEvents= False
Set WbO = /Workbooks.Open("WbOFileName",0)
Set ChrtObj= Worksheets("MyCharts").ChartObjects(1) 'Set handle to the Chart obj
TWb.Activate ' Activate destination Workbook = The Wb which contains the macro
ChrtObj.CopyPicture
RangeToPasteOn(1,1).Select ' Select Top-Left cell to paste the Chart on
ActiveSheet.paste ' Paste the Chart
' ... here Code to ajust Size and position to fit destination range
Application.CutCopyMode = False
Set ChartObj = Nothing 'Release handle
WbO.Close
Set WbO = Nothing
Application.EnableEvents= True
看来我也遇到了同样的问题。我发现使用
Appearance
方法的 .CopyPicture
参数设置为 xlPrinter
值对我来说效果很好。也许这个方法也可以帮助你。以下是如何针对您的案例实施它:
'copy
ChrtObj.CopyPicture Appearance:=xlPrinter
'paste
RangeToPasteOn(1, 1).PasteSpecial
但请确保自动屏幕更新设置为
True
。只需将其放在复制操作之前的某个位置即可:
Application.ScreenUpdating = True