Замена сбоя программы - PullRequest
0 голосов
/ 04 сентября 2018

У меня проблема с этим кодом, он должен пройти через все фигуры на всех слайдах и заменить их, но он просто падает в определенный момент. Сначала вам нужно вставить слово, которое вы хотите найти, а затем слово, которым вы хотите заменить его. Как только вы вставляете это, он падает, иногда пропуская несколько слов, заменяя их, а другие нет. Кто-нибудь знает в чем проблема? Код следующий:

Sub Reemplazar()
Dim sld As Slide
Dim shp As Shape
Dim ShpTxt As TextRange
Dim TmpTxt As TextRange
Dim Findword As String
Dim ReplaceWord As String
Findword = InputBox("Ingrese palabra que se quiere reemplazar")
ReplaceWord = InputBox("Ingrese palabra por la que se va a reemplazar")
  For Each sld In ActivePresentation.Slides
    For Each shp In sld.Shapes
        Set ShpTxt = shp.TextFrame.TextRange
        If ShpTxt <> "" Then
            Set ShpTxt = shp.TextFrame.TextRange
            Set TmpTxt = ShpTxt.Replace( _
            FindWhat:=Findword, _
            Replacewhat:=ReplaceWord, _
            WholeWords:=False)
            Do While Not TmpTxt Is Nothing
              Set ShpTxt = ShpTxt.Characters(TmpTxt.Start + TmpTxt.Length, ShpTxt.Length)
              Set TmpTxt = ShpTxt.Replace( _
              FindWhat:=Findword, _
              Replacewhat:=ReplaceWord, _
              WholeWords:=False)
            Loop
        End If
    Next shp
  Next sld
End Sub

Программа останавливается и запрашивает отладку, выдавая сообщение «Ошибка '-2147024809 (80070057)» и выделяя строку «Set ShpTxt = shp.TextFrame.TextRange»

1 Ответ

0 голосов
/ 04 сентября 2018

Прежде чем пытаться выполнить замены, убедитесь, что это форма, которая МОЖЕТ содержать текст, и если это так, что она действительно содержит текст:

If osh.HasTextFrame Then
    If osh.TextFrame.HasText Then
        ' NOW do your replacements
    End If
End If
...