使用 VBA-Excel 在 Powerpoint 幻灯片中粘贴多个形状
Pasting multiple shapes in a Powerpoint Slide using VBA-Excel
我创建了一个 Excel 宏,它处理 excel 中的一些数据(每次迭代两个值),将该数据引入一个范围(每次迭代两个单元格)和 Copy/Pastes该范围作为给定 Top/Left 值的给定 PowerPoint 幻灯片中的图像(形状)。
宏按预期工作,但随着粘贴形状数量的增加,跳过随机形状的机会也会增加(没有错误消息)。我已经多次尝试该代码,但从未遇到过相同的结果:有时缺少两个或三个形状,有时缺少八个,有时 none...
我在每次粘贴后使用 DoEvents 和(以防万一)定义为睡眠函数:"Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)"
我有办法将 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
我想到了一个足够简单的解决方案,显然已经成功了:
oldCount = mySlide.Shapes.Count
' Pasting and verifying that it was done successfully
While (mySlide.Shapes.Count <= oldCount)
mySlide.Shapes.PasteSpecial DataType:=2
DoEvents
Wend
至此只要检查形状数量是否增加就解决了问题。
我创建了一个 Excel 宏,它处理 excel 中的一些数据(每次迭代两个值),将该数据引入一个范围(每次迭代两个单元格)和 Copy/Pastes该范围作为给定 Top/Left 值的给定 PowerPoint 幻灯片中的图像(形状)。
宏按预期工作,但随着粘贴形状数量的增加,跳过随机形状的机会也会增加(没有错误消息)。我已经多次尝试该代码,但从未遇到过相同的结果:有时缺少两个或三个形状,有时缺少八个,有时 none...
我在每次粘贴后使用 DoEvents 和(以防万一)定义为睡眠函数:"Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)"
我有办法将 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
我想到了一个足够简单的解决方案,显然已经成功了:
oldCount = mySlide.Shapes.Count
' Pasting and verifying that it was done successfully
While (mySlide.Shapes.Count <= oldCount)
mySlide.Shapes.PasteSpecial DataType:=2
DoEvents
Wend
至此只要检查形状数量是否增加就解决了问题。