无法使用Excel VBA将Powerpoint文本框内容提取到Excel中

时间:2014-04-28 08:08:38

标签: excel excel-vba textbox powerpoint vba

好的,所以到目前为止我已经成功编写了以下代码,但我在424 object required开头的行上一直出现range错误。谁能告诉我如何解决这个问题?

Sub GetText()     
    Set PPApp = GetObject(, "PowerPoint.Application")  
    i = 1
    Do While i <= PPApp.ActivePresentation.Slides(1).Shapes.Count
       If PPApp.ActivePresentation.Slides(1).Shapes(i).Type = msoTextBox Then
          range(Cells(i, 15)).Value = PApp.ActivePresentation.Slides(1).Shapes(i).TextFrame.TextRange.Text
       End If
       i = i + 1
    Loop 
End Sub

1 个答案:

答案 0 :(得分:2)

您的代码中有两个错误。

  1. Simoco已经解决了您的第一个错误。即您需要使用Cells(i, 15).Value代替range(Cells(i, 15)).Value

  2. 你有一个错字。如果您使用Option Explicit,那么您就会知道错误的位置;)

  3. 您有PPApp作为powerpoint对象,但正在使用PApp因此object required error

    另外,请声明您的变量并完全限定您的对象。

    这是你在尝试的吗?

    Option Explicit
    
    Sub GetText()
        Dim PPApp As Object
        Dim ws As Worksheet
        Dim i As Long
    
        Set PPApp = GetObject(, "PowerPoint.Application")
    
        i = 1
    
        '~~> Change this to the relevant sheet
        Set ws = ThisWorkbook.Sheets("Sheet1")
    
        Do While i <= PPApp.ActivePresentation.Slides(1).Shapes.Count
           If PPApp.ActivePresentation.Slides(1).Shapes(i).Type = msoTextBox Then
              ws.Cells(i, 15).Value = PPApp.ActivePresentation.Slides(1).Shapes(i).TextFrame.TextRange.Text
           End If
           i = i + 1
        Loop
    End Sub
    

    很少有其他观察结果。

    1. 您正在使用GetObject。如果有多个powerpoint实例,那么很多人都无法获得正确的结果。

    2. 即使形状不是i,您也会增加msoTextBox的值。这可能会导致您在写入Excel工作表时跳过行。您可能希望使用其他变量并在If-EndiF

    3. 中增加该变量