使用VBA-Excel在Powerpoint幻灯片中粘贴多个形状

时间:2018-07-06 12:03:03

标签: excel vba powerpoint shapes

我创建了一个Excel宏,该宏处理excel中的一些数据(每个迭代两个值),将数据引入一个范围(每个迭代两个单元格),并将该范围作为图像(形状)复制/粘贴到给定的PowerPoint中在给定的最高/最低值处滑动。

宏可以按预期工作,但是随着粘贴形状的数量增加,跳过随机形状的机会也会增加(没有错误消息)。我已经尝试过几次代码,但从未经历过相同的结果:有时会丢失两个或三个形状,有时会丢失八个,有时甚至都不见...

我在每次粘贴之后都使用DoEvents,并且(以防万一它有帮助)将睡眠函数定义为:“公共声明子睡眠库“ kernel32”(ByVal dwMilliseconds只要长)”

我有一种方法可以将所有粘贴的图像从Excel的每张幻灯片组合成一个大图像吗?有人还有其他建议吗?

以下代码摘自该宏,为简单起见,我省略了其余代码。这段代码放在两个嵌套的For循环中。

'Variable calculations
LastRow = .Cells(.rows.Count, .Range("statusCol").Column).End(xlUp).Row
LastCol = .Cells(61, .Columns.Count).End(xlToLeft).Column
Set rng = .Range(.Cells(61, .Range("statusCol").Column), .Cells(LastRow, LastCol))

rng.Copy

If ExcelApp.ClipboardFormats(1) Then    ' Check clipboard contents

    mySlide.Shapes.PasteSpecial DataType:=2  
    DoEvents

    ' Changing the pasted cell's position and size
    Set myShape = mySlide.Shapes(mySlide.Shapes.Count)
    With myShape
        .LockAspectRatio = msoTrue
        .Left = TableLeft
        .Top = TableTop
        .Height = 20 * rng.rows.Count                  
    End With
End If

1 个答案:

答案 0 :(得分:0)

我想到了一个足够简单的解决方案,显然可以解决问题:

oldCount = mySlide.Shapes.Count
' Pasting and verifying that it was done successfully
While (mySlide.Shapes.Count <= oldCount)
    mySlide.Shapes.PasteSpecial DataType:=2  
    DoEvents
Wend

至此,仅检查形状数量是否已解决就可以解决问题。