Как мне преобразовать этот макрос Excel для использования в Word? - PullRequest
0 голосов
/ 25 марта 2019

Я нашел макрос, написанный для Excel, который обладает именно той функцией, которая мне нужна, но я не знаю, как преобразовать его для использования в Word - я довольно новичок в написании сценариев и единственный язык / синтаксис, который я 'Я знаком с языком сценариев Aspect, который я изучал, работая с Procomm Plus.Я нашел макрос Excel здесь:

Найдите конкретный текст и удалите три строки над ним

Sub Delete()
Dim find As String: find = "TOT"
Dim rng As Range

Set rng = Sheets("Sheet1").Cells.find(What:=find, After:=Sheets("Sheet1").Cells(1, 1), LookIn:=xlValues, Lookat:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True)

If Not rng Is Nothing Then
  rng.EntireRow.Delete
  rng.Offset(-1).EntireRow.Delete
  rng.Offset(-2).EntireRow.Delete
  rng.Offset(-3).EntireRow.Delete
End If

End Sub

Мне нужен макрос для поиска текста "% Invalidвходной сигнал обнаружен в «маркере ^» и затем удалите его, а также две строки над этой фразой:

Router#show environment all                    ;(let's call this "line -2")
            ^                                  ;(and this would be "line -1")
% Invalid input detected at ‘^’ marker         ;(and "line 0")

Это вывод консоли маршрутизатора Cisco (копирование / вставка в Word) ифраза "% Неправильный ввод обнаружен в маркере '^" всегда одинакова, но две строки над ней могут различаться в зависимости от того, какая команда Cisco, которую я использовал, не была распознана.

Я думаю, что решениевозможно, довольно просто, но я застрял!

Я нашел другой макрос для Word, который выполняет аналогичную функцию и - он ищет ключевую фразу и удаляет строку, содержащую эту фразу, но, опять же, я не уверен, какрасширить его, включив в него две предыдущие строки текста:

Sub InvalidInput()
Dim oRng As Word.Range
Set oRng = ActiveDocument.Range
With oRng.Find
  .Text = "Invalid input detected"
  While .Execute
    oRng.Paragraphs(1).Range.Delete
  Wend
End With
End Sub

Кто-нибудь сможет предложить какие-либо изменения, которые могут решить мою проблему?Заранее большое спасибо.

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Предполагая, что ваши "строки" - это отдельные абзацы, попробуйте:

Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "[!^13]@^13[!^13]@^13% Invalid input detected at ‘^94’ marker^13"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchWildcards = True
    .Execute Replace:=wdReplaceAll
  End With
End With
Application.ScreenUpdating = True
End Sub

В противном случае вам придется дать более содержательное описание того, что очерчивает ваши "строки".

0 голосов
/ 25 марта 2019

Это длинный кадр, но попробуйте этот макрос в Word ...

Public Sub RemoveUnwantedParagraphs()
    Dim objParagraph As Paragraph, arrToRemove() As Long, lngIndex As Long
    Dim i As Long, x As Long, strSearchFor As String

    strSearchFor = "% Invalid input detected at '^' marker"

    lngIndex = -1

    For i = 1 To ThisDocument.Paragraphs.Count
        Set objParagraph = ThisDocument.Paragraphs(i)

        If Left(objParagraph.Range.Text, Len(strSearchFor)) = strSearchFor Then
            For x = 2 To 0 Step -1
                lngIndex = lngIndex + 1
                ReDim Preserve arrToRemove(lngIndex)
                arrToRemove(lngIndex) = i - x
            Next
        End If
    Next

    On Error GoTo ExitGracefully

    For i = UBound(arrToRemove) To 0 Step -1
        ThisDocument.Paragraphs(arrToRemove(i)).Range.Delete
    Next

ExitGracefully:

End Sub

... сделайте себе одолжение, хотя перед тем, как запустить его, СОЗДАЙТЕ СВОЙ ДОКУМЕНТ !!! .

Я не даю никаких гарантий, что это непреднамеренно не наполнит все это. Я провел ограниченную разработку в Word, но приведенный выше код помог мне.

Единственное, что нужно отметить, это то, что если искомый текст содержится в 1-й или 2-й строке, он может разбиться. Я полагаю, что это не ожидалось, хотя и не обслуживал его.

...