Как я могу зациклить макрос?

Почему этот код VBA не работает? В этих документах использовался специальный шрифт ярость, подожди, ариал. Я хотел бы перебрать каждую букву документа, и всякий раз, когда .Font = "*rage*" хотел бы перебрать дюжину букв. (Мой штрих - терпение.)

 Sub grandma()

 Dim doc As Document
 Set doc = ActiveDocument
 Dim Counter As Integer

 For i = 1 To 6
      doc.Range.Characters.Count
      If doc.Range.Characters(i).Font.Name = "*rage*" Then
         doc.Range.Characters(i).Font.Name = "Waiting for the Sunrise"
      End If
      If doc.Range.Characters(i).Font.Name = "*wait*" Then
         doc.Range.Characters(i).Font.Name = "Rage Italic"
      End If
      If doc.Range.Characters(i).Font.Name = "*arial*" Then
         doc.Range.Characters(i).Font.Name = "Arial Nova Cond Light"
      End If
      j = i

 MsgBox "Hi! " & i
 Next i

 End Sub

Как я могу зациклить макрос?

Вы объявили Counter как целочисленный тип, но вместо этого использовали необъявленную переменную i? Не проблема, а просто еще одна причина, по которой вы должны использовать Option Explicit поверх каждый модуль.

K.Dᴀᴠɪs 24.10.2018 21:54
If foo = "abc*" будет истинным, если foo - это равно, строковый литерал "abc*". Оператор равенства / сравнения = не использует подстановочные знаки.
Mathieu Guindon 24.10.2018 22:05

Эти названия шрифтов действительно содержат звездочки - *? Обратите внимание, что, вероятно, было бы быстрее и эффективнее использовать встроенную в Word функцию «Найти / заменить».

Cindy Meister 25.10.2018 16:06
Стоит ли изучать 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
3
185
1

Ответы 1

При использовании подстановочных знаков используйте оператор Like вместо =.

 Option Explicit

 Sub grandma()

     Dim doc As Document
     Set doc = ActiveDocument
     Dim i As Integer

     For i = 1 To 6

        With doc.Range.Characters(i).Font
            Select Case True
            Case .Name like "*rage*"
                .Name = "Waiting for the Sunrise"
            Case .Name Like "*wait*"
                .Name = "Rage Italic"
            Case .Name Like "*arial*"
                .Name = "Arial Nova Cond Light"
            End Select
        End With

        MsgBox "Hi! " & i

     Next i

 End Sub

Side Note: It is my personal preference to avoid using the data type Integer and instead use Long - unless dealing with legacy applications that would overflow with a Long or for some reason I don't want to give up those two extra bytes of memory (sarcasm). Especially when dealing with individual word document characters - which a document can contain many many thousands of characters, you can overflow an Integer quickly.

Take a look at Why Use Integer Instead of Long? for more information.

Что мне добавить / настроить здесь, чтобы циклически изменять шрифт по всему документу без всплывающего запроса для каждого изменения?

Keri 26.10.2018 18:06

Если вы хотите сохранить тот же метод, который используете, я считаю, что вы сможете сделать что-то вроде For i = 1 to doc.Range.Characters.Count вместо ... To 6.

K.Dᴀᴠɪs 26.10.2018 18:53

Возвращаемся к исходному сценарию. У меня есть данные таблицы в Excel, где 1 столбец указывает строку, а другой указывает шрифт для строки. Моя конечная цель - заполнить табличные поля в файле слов строкой указанного шрифта.

Keri 27.10.2018 23:03

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