Автор Тема: В таблице заменить знак абзаца внутри фразы на пробел  (Прочитано 119 раз)

Оффлайн persik

  • Посетитель форума
  • Сообщений: 36
Есть макрос, который заменяет знаки табуляции и знаки абзаца на пробелы в выделенной ячейке таблицы. Нужно его доработать, чтобы это происходило в нескольких выделенных ячейках таблицы. Знаки табуляции в нескольких ячейках заменяет без проблем. А знак абзаца не заменяет, пишет ошибку. Знаком абзаца (т.е. энтером) разбиты фразы, предложения в середине этих самых фраз или предложений, для того, чтобы они поместились в ячейке таблицы. Это происходит после распознавания текста в файн ридере.
Sub Макрос()
   
    Dim Абзац As Paragraph, i As Long
   
   
    ' Замена табуляции на пробелы.
    With Selection.Range.Find
        .Text = "^t"
        .Replacement.Text = " "
        .Execute Replace:=wdReplaceAll
    End With
   
    ' Замена знаков абзаца на пробелы.
    For i = Selection.Paragraphs.Count To 1 Step -1
        ' Создание ссылки на абзац.
        Set Абзац = Selection.Paragraphs(i)
        ' Если это не последний абзац в ячейке. В этом случае в конце абзаца находится
            ' символ "кружок" и нет смысла заменять этот кружок на пробел.
        If Asc(Right(Абзац.Range.Text, 1)) <> 7 Then
            ' Если абзац не является пунктом списка.
            If Абзац.Range.ListFormat.List Is Nothing Then
                ' Если перед абзацем нет точки.
                If Абзац.Range.Characters.Last.Previous.Text <> "." Then
                    Абзац.Range.Characters.Last.Text = " "
                End If
            End If
        End If
    Next i
   
End Sub

Оффлайн Администратор

  • Administrator
  • Сообщений: 2017
Макрос
Sub Макрос()
   
    Dim Абзац As Paragraph, Ячейка As Cell, i As Long
   
   
    ' После первой замены Selection изменяется, поэтому просматривается каждая ячейка отдельно.
    For Each Ячейка In Selection.Cells
   
        ' Замена табуляции на пробелы.
        With Ячейка.Range.Find
            .Text = "^t"
            .Replacement.Text = " "
            .Execute Replace:=wdReplaceAll
        End With
       
        ' Замена знаков абзаца на пробелы.
        For i = Ячейка.Range.Paragraphs.Count To 1 Step -1
            ' Создание ссылки на абзац.
            Set Абзац = Ячейка.Range.Paragraphs(i)
            ' Если это не последний абзац в ячейке. В этом случае в конце абзаца находится
                ' символ "кружок" и нет смысла заменять этот кружок на пробел.
            If Asc(Right(Абзац.Range.Text, 1)) <> 7 Then
                ' Если абзац не является пунктом списка.
                If Абзац.Range.ListFormat.List Is Nothing Then
                    ' Если перед абзацем нет точки.
                    If Абзац.Range.Characters.Last.Previous.Text <> "." Then
                        Абзац.Range.Characters.Last.Text = " "
                    End If
                End If
            End If
        Next i
       
    Next Ячейка
   
End Sub

Оффлайн persik

  • Посетитель форума
  • Сообщений: 36
Спасибо! Класс, все работает без проблем!!!