【问题标题】:Pasting a large table into separate slides by Excel VBA通过 Excel VBA 将大表格粘贴到单独的幻灯片中
【发布时间】:2023-03-14 10:35:01
【问题描述】:

我想使用 VBA 将表格从 excel 粘贴到 power point。但是,由于我有动态范围,因此我想创建 15 行的幻灯片,以便更好地可视化。例如,它将第 1 行到第 15 行粘贴到第 1 号幻灯片中,然后粘贴到第 1 行,将第 16 行到第 29 行粘贴到第 2 号幻灯片中,依此类推。这里第 1 行是表的标题。我附上了我只能创建一张幻灯片的代码。如果有人可以帮助我,我将不胜感激。

Sub SortingandSlidecreation()

    Dim pptName As String
    Dim ppt As PowerPoint.Application
    Dim myPres As PowerPoint.Presentation
    Dim slds As PowerPoint.Slides
    Dim sld As PowerPoint.slide
    Dim pptextbox As PowerPoint.Shape
    Dim oLayout As CustomLayout
    Dim wb As Workbook
    Dim ws As Worksheet

    Dim y As Workbook, LastRow&
    Dim r As Range


    Set wb = ThisWorkbook
    Set ws = wb.Sheets("SortedTable")

    'This will open a PowerPoint template (I didn't attach the function) 
    pptName = openDialog()                                              
    Set ppt = CreateObject("PowerPoint.Application")
    Set myPres = ppt.Presentations.Open(pptName)
    Set slds = myPres.Slides

    ' creating slides at the end of the template 
    Set sld = slds.Add(myPres.Slides.Count + 1, ppLayoutBlank)

    'Here data is selected for pasting
    Set r = ThisWorkbook.Worksheets("SortedTable").Range("A1:L" & LastRow)
    r.Copy
    sld.Shapes.PasteSpecial DataType:=0
    sld.Shapes(1).Top = 100
    sld.Shapes(1).Left = 100

    'Here title of the table is added
    Set pptextbox = sld.Shapes.AddTextbox(msoTextOrientationHorizontal, 22, 60, 700, 60)

    With pptextbox.TextFrame
        .TextRange.Text = "Summary of Current Projects"  
        .TextRange.Font.Bold = msoTrue
        .TextRange.Font.Name = "Arial(Headings)"
        .TextRange.Font.Size = 20
        .TextRange.Font.Color.RGB = RGB(0, 51, 102)
    End With

End Sub

【问题讨论】:

  • 所有幻灯片的标题是否相同,您需要帮助的只是创建几张幻灯片?也是数据 A 到 L 的列吗?
  • @AAA 标题将与我将粘贴同一张表相同。正如我所提到的,第一行是 A 到 L 列的标题。因此,它将被粘贴到每张幻灯片中而没有任何更改。最终目标是如果表格包含超过 15 行,则将表格放入多张幻灯片中。
  • 你试过下面的答案吗?
  • @AAA 现在可以完美运行了。我还有一个问题。如何在 PPT 中定义/固定表格的大小?大小一直在变化,字体变得非常小。
  • 您需要在 Powerpoint 中编辑粘贴的内容吗?如果不是,为什么不粘贴为位图(`DataType:=1)?或者只是使用普通粘贴和源格式

标签: excel vba powerpoint


【解决方案1】:

删除您当前对LastRow 的定义。然后删除 Set slds = myPres.Slides 行之后的所有内容并粘贴此代码。

Dim LastRow as Long, i as Long, j as Integer, rngH as Range, wss as Worksheet
LastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
Set rngH = ws.Range("A1:L1") 'Header Row
i = 2
Set wss = wb.Worksheets.Add

Do While i <= LastRow
    j = Application.Min(i + 13, LastRow)
    Union(rngH, ws.Range("A" & i, ws.Range("L" & j))).Copy Destination:= wss.Range("A1")
    Set sld = slds.Add(myPres.Slides.Count + 1, ppLayoutBlank)
    wss.Range("A1:L" & j-i+2).Copy
    sld.Shapes.PasteSpecial DataType:=0
    sld.Shapes(1).Top = 100
    sld.Shapes(1).Left = 100

    'Here title of the table is added
    Set pptextbox = sld.Shapes.AddTextbox(msoTextOrientationHorizontal, 22, 60, 700, 60)

    With pptextbox.TextFrame
        .TextRange.Text = "Summary of Current Projects"  
        .TextRange.Font.Bold = msoTrue
        .TextRange.Font.Name = "Arial(Headings)"
        .TextRange.Font.Size = 20
        .TextRange.Font.Color.RGB = RGB(0, 51, 102)
    End With
    i = j + 1
Loop

Application.DisplayAlerts = False
wss.Delete
Application.DisplayAlerts = True
Set wss = Nothing
End Sub

【讨论】:

  • 它不能正常工作。它可以创建 15 行的第一张幻灯片。但是,在第二张幻灯片中,它粘贴了 29 行而不是接下来的 14 行。在第三张幻灯片中,它放置了包括空单元格在内的所有内容。目前我的表有 39 行。似乎它正在使用 i=i+14 进行累积。我调试了代码,然后它显示它选择正确但粘贴错误。
  • @OliAK,是的,我看到了问题所在。 Powerpoint 似乎无法粘贴不连续的范围。所以我修改了代码以粘贴到临时工作表,然后复制该工作表。
猜你喜欢
  • 2020-05-18
  • 2014-10-15
  • 2017-09-17
  • 2017-11-06
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
相关资源
最近更新 更多