Поиск 12 отдельных строк с одной функцией - PullRequest
0 голосов
/ 30 октября 2019

У меня есть макрос, который ищет строку («январь») и преобразует пространство в защищенное пространство. То, что я хотел бы сделать, это искать и другие месяцы года. Есть ли способ искать другие месяцы в рамках одной и той же функции, а не копировать и вставлять мой код 11 раз, каждый раз выполняя поиск нового месяца?

Вот мой код после пары предложений, которыев основном работали, но не совсем, и я не могу понять, почему:

Dim item As Variant
Dim months(1 To 12) As String
Dim str As String

    months(1) = "January ": months(2) = "February ": months(3) = "March ": months(4) = "April ": months(5) = "May ": months(6) = "June ": months(7) = "July ": months(8) = "August ": months(9) = "September ": months(10) = "October ": months(11) = "November ": months(12) = "December "

    For Each item In months
        Selection.Find.Execute item
        Do Until Selection.Find.Found = False
            Selection.MoveRight.Unit:=wdCharacter, Count:=1
            Selection.TypeBackspace
            Selection.TypeText Text:=" "
            Selection.Find.Execute
        Loop
    Next
End Sub

У меня есть письмо, содержащее четыре даты в следующем порядке: октябрь 2019, декабрь 1974, ноябрь 2019, октябрь 2019. Я также добавилсписок из 12 дат (различные даты и годы, но по одному на каждый месяц) в конце письма, чтобы проверить, работает ли он каждый месяц, что он делает.

В теле письма толькодве октябрьские работы. При смене декабря 1974 года на октябрь 1974 года это работает, а первое октября 2019 года - нет. При изменении их в следующем порядке: сентябрь 2019, октябрь 1974, ноябрь 2019, декабрь 2019, все они работают. При их изменении на декабрь 2019 года, ноябрь 1974 года, октябрь 2019 года, сентябрь 2019 года работает только сентябрь.

Ответы [ 3 ]

1 голос
/ 30 октября 2019

Я не смог заставить ваш опубликованный код сделать что-нибудь. Пожалуйста, проверьте приведенный ниже код и убедитесь, что он делает то, что вам нужно:

Sub MonthNamesToSpaces()
  Dim Months$(0 To 11)
  Months(0) = "January ": Months(1) = "February ": Months(2) = "March ": Months(3) = "April ": Months(4) = "May ": Months(5) = "June ": Months(6) = "July ": Months(7) = "August ": Months(8) = "September ": Months(9) = "October ": Months(10) = "November ": Months(11) = "December "
  For X = 0 To 11
    With ActiveDocument.Range.Find
      .Text = Months$(X)
      .Replacement.Text = " "
      .Wrap = wdFindContinue
      .Execute Replace:=wdReplaceAll
    End With
  Next X
End Sub

Использование объекта Range вместо Выбор обеспечивает более быстрый и надежный код.

0 голосов
/ 31 октября 2019

Вы на правильном пути в использовании массива для хранения месяцев, но вам не нужно указывать следующий пробел.

Нет необходимости усложнять ситуацию, как могут найти и заменить. работа для вас.

Sub FollowMonthWithNonBreakingSpace()

  Dim item As Variant
  Dim months(1 To 12) As String

  months(1) = "January": months(2) = "February": months(3) = "March": months(4) = "April": _
  months(5) = "May": months(6) = "June": months(7) = "July": months(8) = "August": _
  months(9) = "September": months(10) = "October": months(11) = "November": months(12) = "December"

  For Each item In months
    With ActiveDocument.Range.Find
      .Text = item & " "
      .Replacement.Text = item & "^s"
      .Wrap = wdFindContinue
      .Execute Replace:=wdReplaceAll
    End With
  Next item
End Sub
0 голосов
/ 30 октября 2019

Возможно, что Find останавливается, когда достигает конца вашего документа. Если это так, вы можете (1) переместить курсор в верхнюю часть документа перед «Найти / Заменить» и (2) установить

Find.Wrap=wdFindContinue 

, чтобы «Поиск» обернулся, когда он достиг конца документа.

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