Замена аварийного завершения программы

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

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».

Что значит "Авария". Наступает ли момент, когда он выдает ошибку и спрашивает, хотите ли вы отладить, или ваше приложение PowerPoint действительно вылетает без предупреждения?

JNevill 04.09.2018 15:00

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

Agustin Mincioni 04.09.2018 15:05

Предоставляет ли он больше информации об ошибке? Кажется, что он брошен, когда форма заблокирована / защищена или лист (в случае excel не уверен в powerpoint и защите) защищен.

JNevill 04.09.2018 15:08

Кроме номера ошибки и «Указанное значение вне допустимого диапазона», никакой другой информации

Agustin Mincioni 04.09.2018 16:03

Так что, возможно, вы попали в фигуру, в которой отсутствует текстовый фрейм, что вполне разумно, так как они есть не у всех фигур (а то, что вы можете не осознавать, сформировано в вашей PowerPoint, на самом деле является формами). Хотя обычно лучше не делать этого, в этом случае я думаю, что вполне разумно, прежде чем начинать зацикливание, установить On Error Resume Next и позволить этой штуке летать. Есть и другие более сложные способы обойти это, но в этом случае я бы, вероятно, не стал беспокоиться.

JNevill 04.09.2018 16:16

Это сработало отлично, спасибо вам большое!

Agustin Mincioni 04.09.2018 16:28

Я рад, что помог тебе справиться с ошибкой. Одна вещь, о которой я не знал, - это метод HasTextFrame для объекта формы powerpoint (насколько мне известно, аналогичного метода в Excel, который я обычно использую, нет). Пожалуйста, рассмотрите возможность использования решения @SteveRindsberg ниже, поскольку On Error Resume Next может маскировать другие ошибки. Опять же, я думаю, что On Error Resume Next - это нормальное решение в этом случае, но если бы это был мой код, я бы определенно использовал этот метод HasTextFrame, так как он намного чище.

JNevill 04.09.2018 16:40

@JNevill Полностью согласен. В Excel, похоже, нет некоторых методов / свойств формы, которые есть в PPT, поэтому я подозреваю, что вам придется полагаться на перехват ошибок, чтобы сделать то же самое в Excel.

Steve Rindsberg 04.09.2018 16:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
41
1

Ответы 1

Прежде чем пытаться выполнить замену, убедитесь, что эта фигура МОЖЕТ содержать текст, и если да, то ДЕЙСТВИТЕЛЬНО хранит текст:

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

Другие вопросы по теме