复制并粘贴图表图像后 Excel 崩溃

问题描述 投票:0回答:1

我需要使用 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
excel vba crash paste excel-charts
1个回答
0
投票

看来我也遇到了同样的问题。我发现使用

Appearance
方法的
.CopyPicture
参数设置为
xlPrinter
值对我来说效果很好。也许这个方法也可以帮助你。以下是如何针对您的案例实施它:

'copy 
ChrtObj.CopyPicture Appearance:=xlPrinter

'paste
RangeToPasteOn(1, 1).PasteSpecial

但请确保自动屏幕更新设置为

True
。只需将其放在复制操作之前的某个位置即可:

Application.ScreenUpdating = True
© www.soinside.com 2019 - 2024. All rights reserved.