Запуск макроса в стиле c - PullRequest
       7

Запуск макроса в стиле c

0 голосов
/ 16 апреля 2020

Ниже код пытается преобразовать слова в нижнем регистре в верхний регистр. Однако мне нужно только запустить его только в определенном c стиле слова («Нормальный»). Я пытался установить do c в ActiveDocument.Styles ("Normal"), но я продолжаю получать ошибку. Любая помощь будет наиболее полезной. Заранее спасибо.

Option Explicit

   Public Sub TitleCaseDocument()
   Dim doc As Document: Set doc = ActiveDocument.Styles("Normal")
   Dim wrd As Range

   For Each wrd In doc.Words
       If wrd.Text <> UCase$(wrd.Text) Then wrd.Case = wdTitleWord
Next
End Sub

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Решение, предоставляемое @eaazel, попадает в ловушку участника по умолчанию.

Код

wrd.Style

в действительности использует элемент по умолчанию для объекта стиля, которым является NameLocal. Таким образом, код, подразумеваемый приведенным выше кодом, в действительности

wrd.Style.NameLocal

Обычно это не будет проблемой, однако уровень детализации, который используется для извлечения объекта стиля, означает, что иногда слова без какого-либо стиля (например, поле To C). В таком случае возвращаемый объект стиля - ничто, и это приводит к неожиданной ошибке, потому что вы не можете вызвать метод NameLocal для объекта, который является ничем.

Поэтому более правильным подходом является использование единицы слова, которая является гарантированно иметь объект стиля (например, абзацы) и проверять стиль этого объекта перед проверкой каждого слова.

Option Explicit

Public Sub TitleCaseDocument()
    Dim myDoc As Document: Set myDoc = ActiveDocument

    Dim myPara As Range
    For Each myPara In myDoc.StoryRanges.Item(wdMainTextStory).Paragraphs

        If myPara.Style.NameLocal = "Normal" Then

            TitleParagraph myPara

       End If

    Next

End Sub

Public Sub TitleParagraph(ByVal ipRange As Word.Range)

    Dim myText As Range
    For Each myText In ipRange.Words

        If Not UCase$(myText.Text) = myText.Text Then

            myText.Words.Item(1).Case = wdTitleWord

        End If

    Next

End Sub

Обновление 2020-Apr-16 Пересмотренный ниже код, который, как было доказано, работает на Документ Word.

Параметр Явный

Public Sub TitleCaseDocument()
    Dim myDoc As Document: Set myDoc = ActiveDocument

    Dim myPara As Word.Paragraph
    For Each myPara In myDoc.StoryRanges.Item(wdMainTextStory).Paragraphs

        If myPara.Style.NameLocal = "Normal" Then

            TitleParagraph myPara

       End If

    Next

End Sub

Public Sub TitleParagraph(ByVal ipPara As Word.Paragraph)

    Dim myText As Range
    For Each myText In ipPara.Range.Words

        If Not UCase$(myText.Text) = myText.Text Then

            myText.Words.Item(1).Case = wdTitleWord

        End If

    Next

End Sub
1 голос
/ 16 апреля 2020

Итак, Вы хотите изменить строчные буквы на прописные, если стиль нормальный? Да? У меня нет большого опыта работы со словом, но, может быть, что-то вроде этого поможет вам (основываясь на вашем коде):

Public Sub TitleCaseDocument()
   Dim doc As Document: Set doc = ActiveDocument
   Dim wrd As Range

   For Each wrd In doc.Words

       If wrd.Text <> UCase$(wrd.Text) And wrd.Style = "Normal" Then
       wrd.Text = UCase$(wrd.Text)

       End If
Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...