简体   繁体   English

使用VBA将范围从Excel复制到现有PowerPoint表

[英]Copy ranges from Excel to existing PowerPoint table using VBA

I want to copy a selection of columns from an excel table to an existing PowerPoint table. 我想将选择的列从excel表复制到现有的PowerPoint表。

This is the code I used and tried to modify to my needs but it didn't work. 这是我使用过的代码,试图根据自己的需要进行修改,但是没有用。 The code copies the tables to PP but keeps the excel format. 该代码将表复制到PP,但保留excel格式。

`Sub PasteMultipleSlides()

'PURPOSE: Copy Excel Ranges and Paste them into the Active PowerPoint presentation slides
'SOURCE: www.TheSpreadsheetGuru.com

Dim myPresentation As Object
Dim mySlide As Object
Dim PowerPointApp As Object
Dim shp As Object
Dim MySlideArray As Variant
Dim MyRangeArray As Variant
Dim x As Long

'Create an Instance of PowerPoint
  On Error Resume Next

    'Is PowerPoint already opened?
      Set PowerPointApp = GetObject(class:="PowerPoint.Application")

    'Clear the error between errors
      Err.Clear

    'If PowerPoint is not already open then Exit
      If PowerPointApp Is Nothing Then
        MsgBox "PowerPoint Presentation is not open, aborting."
        Exit Sub
      End If

    'Handle if the PowerPoint Application is not found
      If Err.Number = 429 Then
        MsgBox "PowerPoint could not be found, aborting."
        Exit Sub
      End If

  On Error GoTo 0

'Make PowerPoint Visible and Active
  PowerPointApp.ActiveWindow.Panes(2).Activate

'Create a New Presentation
  Set myPresentation = PowerPointApp.ActivePresentation

'List of PPT Slides to Paste to
  MySlideArray = Array(2, 3)

'List of Excel Ranges to Copy from
    MyRangeArray = Array(Sheets("Tabelle1").Range("Tabelle1[#All]"), Sheets("Tabelle6").Range("Tabelle14[#All]"))

'Loop through Array data
  For x = LBound(MySlideArray) To UBound(MySlideArray)
    'Copy Excel Range
        MyRangeArray(x).Copy

    'Paste to PowerPoint and position
      On Error Resume Next
        Set shp = myPresentation.Slides(MySlideArray(x)).Shapes.PasteSpecial(DataType:=2) 'Excel 2007-2010
        Set shp = PowerPointApp.ActiveWindow.Selection.ShapeRange 'Excel 2013
      On Error GoTo 0

    'Center Object
      With myPresentation.PageSetup
        shp.Left = (.SlideWidth \ 2) - (shp.Width \ 2)
        shp.Top = (.SlideHeight \ 2) - (shp.Height \ 2)
      End With

  Next x

'Transfer Complete
  Application.CutCopyMode = False
  ThisWorkbook.Activate
  MsgBox "Complete!"

End Sub

These are the columns I would like to copy to a table on slide 2 in PP: 这些是我想复制到PP中幻灯片2上的表格中的列:

Sheets("Tabelle6")
    Range("Tabelle14[[company ]]").Select
    Range("Tabelle14[customer number]").Select
    Range("Tabelle14[order number]").Select
    Range("Tabelle14[order value]").Select

And these are the columns I would like to copy to a table on slide 3 in PP: 这些是我想复制到PP中幻灯片3上的表格中的列:

Sheets("Tabelle1")
    Range("Tabelle1[[company ]]").Select
    Range("Tabelle1[customer number]").Select
    Range("Tabelle1[order number]").Select
    Range("Tabelle1[order value]").Select

I hope you can help me! 我希望你能帮帮我! Thanks! 谢谢!

When it comes to bringing data from Excel to Powerpoint you need to iterate across all cells as dwirony explained. 将数据从Excel导入到Powerpoint时,您需要按照dwirony的说明遍历所有单元格。 But instead of working only on Excel ranges, you can address the Excel table column ranges via (eg) 但是,您不仅可以使用Excel范围,还可以通过(例如)解决Excel表列范围

activesheet.listobjects(i).listcolumns(j).range

A good thing to simplify this task would be to prepare the Powerpoint table data in Excel in such a way that you have a kind of staging area. 简化此任务的一件好事是在Excel中以某种临时区域的方式准备Powerpoint表数据。 This could be a range next to your table which contains only the desired columns for Powerpoint (formulas would be simple referencing, eg "=A3"). 这可能是表格旁边的范围,该表格仅包含Powerpoint所需的列(公式很容易引用,例如“ = A3”)。 Then you could apply a simpler VBA algorithm as it would be just Excel range to Powerpoint table as a whole without thinking of the column mapping instead) 然后,您可以应用更简单的VBA算法,因为它只是整个Powerpoint表的Excel范围,而无需考虑列映射)

In case you would like to have it more comfortable without coding, you could also try SlideFab ( https://slidefab.com ) which can link Excel tables to Powerpoint and updates the data automatically. 如果您希望不用编码就更舒适,也可以尝试SlideFab( https://slidefab.com ),它可以将Excel表链接到Powerpoint并自动更新数据。 Disclaimer: It's my software. 免责声明:这是我的软件。

Cheers 干杯

Jens 詹斯

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM