非连续范围复制/粘贴到PowerPoint幻灯片中

时间:2019-07-31 21:45:57

标签: vba powerpoint

我最近注意到,从Excel工作表中复制非连续范围(例如,通过Union())并将其粘贴到PowerPoint Slide.Shapes.Table对象会导致不良结果,而不是粘贴联合范围(或选择),将粘贴从最早的单元格到最远的单元格的范围。尽管我为自己的项目设计了一个临时解决方法(在粘贴扩展范围后删除了不需要的行),但我还是希望您知道如何在将来的项目中避免此问题。

我已经在Excel环境中测试了复制/粘贴方法,在该环境中,我在联合中复制了范围并将其粘贴到新的工作表中。一切都按预期工作。但是,我能够在基本的PowerPoint幻灯片中复制该问题。我搜索了可能遇到类似问题或解决方案的人,但是似乎没人遇到/研究过此问题。

下面是显示其在Excel环境中工作的示例代码:

Sub excelOnly()
    Dim a As Range, b As Range, c  As Range, d  As Range
    Dim lRow As Integer, lColumn As Integer
    lRow = Cells(1, 1).End(xlDown).Row
    lColumn = Cells(1, 1).End(xlToRight).Column
    Set a = Range(Cells(1, 1), Cells(1, lColumn))
    Set b = Range(Cells(3, 1), Cells(5, lColumn))
    Set c = Range(Cells(9, 1), Cells(lRow, lColumn)) 'make sure sample data has more than 9 rows
    Set d = Union(a, b, c)
    d.Select
    Selection.Copy     'not necessary to select, can directly copy from range
    Sheets(2).Paste    'sample Workbook should have 2 sheets
End Sub

下面是示例代码,显示了它在PowerPoint环境中如何失败:

Sub powerPointEnv()   'PS: I am referencing Microsoft PowerPoint 16.0 Object Library
    Dim newPPT As New PowerPoint.Application, pptpres As PowerPoint.Presentation, newSlide As Slide
    Dim a As Range, b As Range, c  As Range, d  As Range
    Dim lRow As Integer, lColumn As Integer
    Set pptpres = newPPT.Presentations.Add
    Set newSlide = pptpres.Slides.Add(1, 12)
    lRow = Cells(1, 1).End(xlDown).Row
    lColumn = Cells(1, 1).End(xlToRight).Column
    Set a = Range(Cells(1, 1), Cells(1, lColumn))
    Set b = Range(Cells(3, 1), Cells(5, lColumn))
    Set c = Range(Cells(9, 1), Cells(lRow, lColumn))
    Set d = Union(a, b, c)
    d.Select
    Selection.Copy    'again, it is possible to copy directly from the range, the issue remains the same
    newSlide.Shapes.Paste
End Sub

请注意,PowerPoint环境中的粘贴范围超出了并集范围,特别是从所选范围中最早的单元格地址到最远的范围。

我希望有人可以对此问题提供解释/解决方案;同时,我建议在粘贴扩展范围后,从表格中删除不需要的范围。

0 个答案:

没有答案