【问题标题】:How do I replace words in entire powerpoint including tables using VBA?如何替换整个 powerpoint 中的单词,包括使用 VBA 的表格?
【发布时间】:2020-07-02 16:20:35
【问题描述】:

我必须阅读大量的幻灯片,用新的单词替换特定的单词。我做了一个似乎可以工作的宏,但是经过仔细检查后,我意识到表格中的单词没有被替换。经过一番搜索,我看到其他人有这个问题,但没有明确的答案。我想出了以下内容,但在For Each grpItem In shp.GroupItems

有人可以提供有关我做错了什么的见解,或者可能是更好的方法吗?

 Sub DataScrubAllSlidesAndTables()
    Dim sld As Slide
    Dim grpItem As Shape
    Dim shp As Shape

For Each sld In ActivePresentation.Slides
    For Each shp In sld.Shapes

        If shp.HasTextFrame Then
            If shp.TextFrame.HasText Then
                shp.TextFrame.TextRange.Text = Replace(shp.TextFrame.TextRange.Text, "Store", "Seller")
                shp.TextFrame.TextRange.Text = Replace(shp.TextFrame.TextRange.Text, "Customer", "Buyer")
            End If
        End If

        If shp.Type = msoTable Then
                For Each grpItem In shp.GroupItems
                    If InStr(1, grpItem.Name, "Rectangle") Then
                        grpItem.TextFrame.TextRange.Text = Replace(grpItem.TextFrame.TextRange.Text, "Store", "Seller")
                        grpItem.TextFrame.TextRange.Text = Replace(grpItem.TextFrame.TextRange.Text, "Store", "Seller")
                    End If
                Next grpItem
        End If

    Next shp
Next
End Sub

【问题讨论】:

    标签: vba powerpoint str-replace


    【解决方案1】:

    这个:

     Sub DataScrubAllSlidesAndTables()
        Dim sld As Slide
        Dim grpItem As Shape
        Dim shp As Shape
        Dim i As Long
        Dim j As Long
    
        For Each sld In ActivePresentation.Slides
        For Each shp In sld.Shapes
    
            If shp.HasTextFrame Then
                If shp.TextFrame.HasText Then
                    shp.TextFrame.TextRange.Text = Replace(shp.TextFrame.TextRange.Text, "Store", "Seller")
                    shp.TextFrame.TextRange.Text = Replace(shp.TextFrame.TextRange.Text, "Customer", "Buyer")
                End If
            End If
    
            If shp.HasTable Then
                For i = 1 To shp.Table.Rows.Count
                    For j = 1 To shp.Table.Columns.Count
                    shp.Table.Rows.Item(i).Cells(j).Shape.TextFrame.TextRange.Text = _
                        Replace(shp.Table.Rows.Item(i).Cells(j).Shape.TextFrame.TextRange.Text, "This", "That")
                    Next j
                Next i
            End If
    
        Next shp
    Next
    End Sub
    

    【讨论】:

    • 在使用您提供给我的代码时,您是否知道如何检查整个单词并匹配大小写?函数“Replace(FindWhat, ReplaceWhat, After, MatchCase, WholeWords)”似乎不适用于 powerpoint,或者至少在这种情况下不起作用。
    【解决方案2】:

    试试这个:

     Sub DataScrubAllSlidesAndTables()
        Dim sld As Slide
        Dim grpItem As Shape
        Dim shp As Shape
        Dim i As Integer
        Dim j As Integer
        Dim varTemp As Variant
        For Each sld In ActivePresentation.Slides
        For Each shp In sld.Shapes
    
            If shp.HasTextFrame Then
                If shp.TextFrame.HasText Then
                    shp.TextFrame.TextRange.Text = Replace(shp.TextFrame.TextRange.Text, "Store", "Seller")
                    shp.TextFrame.TextRange.Text = Replace(shp.TextFrame.TextRange.Text, "Customer", "Buyer")
                End If
            End If
    
            On Error GoTo lblNotTable:
            For i = 1 To shp.Table.Rows.Count
                For j = 1 To shp.Table.Columns.Count
                varTemp = shp.Table.Rows.Item(i).Cells(j).Shape.TextFrame.TextRange.Text
                Next j
            Next i
    lblNotTable:
            Err.Clear
    
    
        Next shp
    Next
    End Sub
    

    【讨论】:

    • 感谢您的快速回复。我收到一条错误消息,显示“对象‘形状’的方法‘表’在For i = 1 To shp.Table.Rows.Count 的行上失败
    • 你用的是什么版本的excel?
    • 道歉我的意思是电源点。你复制了我写在那里的整个代码吗?
    【解决方案3】:

    简单,

    这两行需要更改为: 将 grpItem 调暗为形状 按形状调暗 shp

    到:

    Dim grpItem As Powerpoint.Shape
    Dim shp As Powerpoint.Shape
    

    应该做的伎俩。

    【讨论】:

      猜你喜欢
      • 2019-03-21
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 1970-01-01
      相关资源
      最近更新 更多