我有一个宏,它打开一个ppt模板文件,并将幻灯片填充到ppt表的内容中,将这些内容粘贴为增强的元数据--非常直接地使用一个条件、复制范围、粘贴特殊的DataType:=2来执行任务过滤枢轴。
问题是,我已经将这个过程作为一个循环来处理,它可以打开ppt模板,用这些图像填充幻灯片,并将其作为副本保存10次(生成10个文件),然后随机得到以下错误:
“运行时错误”-2147188160 (80048240)':
Shapes.PasteSpecial :无效请求。剪贴板是空的,或者包含可能不粘贴在这里的数据。“
现在,这个错误的问题是它不是真的,因为我所要做的就是单击RUN,然后宏就没有问题,而不需要更改任何东西。而且它可以运行几次,没有问题,然后随机抛出一个错误-循环迭代,复制的枢轴表范围和幻灯片数都不一致。
我假设的问题是内存,因此我的问题-是否有更好的方法复制excel范围和粘贴图像到ppt文件?
我现在的代码非常简单:
ws.PivotTables("pivot").TableRange2.Copy
MySlide.Shapes.PasteSpecial DataType:=2也许这种方法效率低下?更改DataType会有帮助吗?(我认为不是,因为问题在于剪贴板)不幸的是,很难通过excel vba找到控制ppt的材料
发布于 2020-10-07 13:35:58
粘贴时,将对象复制到剪贴板的过程很可能尚未完成。所以它不适合粘贴。
处理这一问题的一种方法可能是设置两个简单的单独例程。一个例程进行复制,另一个例程进行粘贴。
这样做,可能会迫使VBA等到一个进程完成后再转到下一个进程。
这是复制范围的例行程序。
Sub CopyPivotTableRangeToClipboard(ByVal target As Range)
target.Copy
End Sub下面是将范围粘贴到幻灯片中的例程..。
Sub PasteRangeIntoSlide(ByVal theSlide As Object)
theSlide.Shapes.PasteSpecial DataType:=2
End Sub然后你会按下面的方式调用这些程序。
CopyPivotTableRangeToClipboard ws.PivotTables("pivot").TableRange2
PasteRangeIntoSlide MySlide编辑
如果将复制和粘贴处理分离到两个单独的过程没有帮助,那么您还可以尝试在每个进程之后暂停宏1、2或3秒,同时调用DoEvents。为此,我们可以使用以下步骤..。
Sub PauseMacro(ByVal seconds_to_wait As Integer)
Dim start_time As Single
start_time = Timer
Do
DoEvents
Loop Until Timer - start_time > seconds_to_wait
End Sub现在你的代码如下..。
CopyPivotTableRangeToClipboard ws.PivotTables("pivot").TableRange2
PauseMacro 3 'seconds to wait (change as desired)
PasteRangeIntoSlide MySlide
PauseMacro 3 'seconds to wait (change as desired)https://stackoverflow.com/questions/64242496
复制相似问题