VBA:为什么我将 table 复制到 power point 时得到 "Shapes (unknown member): Invalid request"

VBA: why do I get "Shapes (unknown member): Invalid request" when copying table to power point

所以出现此错误的原因有很多,但是 none 其他解决方案似乎解决了我面临的问题。我有一个来自 excel 的脚本 运行,它可以将 table 复制到 powerpoint 幻灯片,但我不断收到 "Shapes (unknown member): Invalid request".

不是的原因:

代码:
请记住,我省略了路径和不相关的代码段...

Dim PPT As PowerPoint.Application
Set PPT = New PowerPoint.Application
PPT.Visible = True
PPT.Presentations.Open Filename:= "#######################"

Set curWS = Worksheets("###############")
curWS.Select
Set pt = curWS.PivotTables(1)
Set ptRg = pt.TableRange1
Set ptRg = Range(curWS.Cells(ptRg.Row - 1, ptRg.Column), _
                 curWS.Cells(ptRg.Row + ptRg.Rows.Count - 1, ptRg.Columns.Count + ptRg.Column - 1))
ptRg.Select
Selection.Copy
DoEvents
PPT.ActivePresentation.Application.ActiveWindow.Panes(2).Activate
PPT.ActivePresentation.Application.ActivePresentation.Slides(2).Select
PPT.ActivePresentation.Application.ActivePresentation.Slides(2).Shapes.PasteSpecial ppPastePNG, msoFalse

尝试将您的 ppPastePNG 更改为 ppPasteEnhancedMetafile

例如 PPT.ActivePresentation.Slides(2).Shapes.PasteSpecial ppPasteEnhancedMetafile, msoFalse

使用下面的代码修改代码中的最后几行(使用 myShape 对象,将允许您稍后修改图片参数方便)

Dim myShape                             As Object

PPT.ActivePresentation.Application.ActiveWindow.Panes(2).Activate

ptRg.Select
Selection.Copy

Set myShape = PPT.ActivePresentation.Slides(2).Shapes.PasteSpecial(ppPastePNG, msoFalse)

貌似有时候复制不对,然后到粘贴的地方就什么都没有了...

我设法通过在选择和复制命令前放置 Application.CutCopyMode = False

来解决这个问题

示例:

Application.CutCopyMode = False

'Selecting and copying

Range("ExportTable").Copy

' Pasting and giving format

With PPSlide.Shapes.PasteSpecial(DataType:=2)

                .Align msoAlignLefts, msoTrue

                .Align msoAlignCenters, True

                .Align msoAlignMiddles, True

                .IncrementTop (dist_top)

                .Top = 70

                .Left = 15

                .LockAspectRatio = msoFalse

                .Height = 90

                .Width = 690

End With