Тема: разбивка на предложения
здравствуйте!
как можно разбить весь текст на предложения, чтобы каждое из предложений начиналось с новой строки.
спасибо
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
здравствуйте!
как можно разбить весь текст на предложения, чтобы каждое из предложений начиналось с новой строки.
спасибо
Вот
Sub OneParagraphOneSentence()
Dim i As Long
For i = Sentences.Count To 1 Step -1
If Sentences(i).Characters.Last.Text <> vbCr Then Sentences(i).InsertParagraphAfter
Next
End Sub
че-то не работает. вот здесь " For i = Sentences.Count To 1 Step -1 "
спасибо
Замените на ActiveDocument.Sentences, хотя у меня работало
Замените на ActiveDocument.Sentences, хотя у меня работало
изменил. теперь здесь что-то не так " ActiveDocument.Sentences(i).InsertParagraphAfter "
спасибо
Какую ошибку выдаёт?
" не удается изменить диапозон ". 5904
спасибо
Вот этот макрос сработает (обернул в ActiveDocument)? Проверьте:
Sub OneParagraphOneSentence()
Dim i As Long
With ActiveDocument
For i = .Sentences.Count To 1 Step -1
If .Sentences(i).Characters.Last.Text <> vbCr Then .Sentences(i).InsertParagraphAfter
Next
End With
End Sub
опять " не удается изменить диапозон " (5904) в .Sentences(i).InsertParagraphAfter
нашел!
Правка = > Заменить
Найти ". "
Заменить ". ^p"
спасибо все равно
Что ж, если это подходит, то очень хорошо. Но точка с пробелом может идти и после сокращённой единицы измерения. А также предложение может заканчиваться не точкой, а другим знаком препинания.
полностью согласен. поэтому если поможете "добить" макрос - огромное спасибо
Я даже не знаю, чем помочь. Дайте пример документа, где макрос не работает.
Да, интересно посмотреть, что там в документе, из-за чего не работает элементарный макрос...
до документа не дошло. еще при его отладке в visual basic вылазит ошибка.
по-моему все дело в том, что текст был в таблице скрытой!
можно поправить как-то макрос для таблиц?
и после "т.е. " переносит предложение. Хотя это уже мелочи, но тогда в чем отличие от простой замены?
по-моему все дело в том, что текст был в таблице скрытой!
можно поправить как-то макрос для таблиц?
и после "т.е. " переносит предложение. Хотя это уже мелочи, но тогда в чем отличие от простой замены?
Всё запуталось ещё больше. Для каких таблиц, что и где находится? Ничего не понятно. Дайте пример документа, который нужно изменить
загвоздка была в том, что текст у меня находился внутри вордовской таблицы, которую я не видел, так как она была скрыта. Получается, что макрос не может работать с таблицами.
Все, что вне таблицы, он делает прекрасно, кроме таких сокращений как "т.е.", "т.к.", которые он принимает за конец предложения.
Пробуем так. Поставьте курсор в таблицу и запускайте макрос:
Sub OneParagraphOneSentence()
Dim i As Long
If Not Selection.Information(wdWithInTable) Then Exit Sub
With Selection.Tables(1).Range
For i = .Sentences.Count To 1 Step -1
Debug.Print "i=" & i & vbTab & "code=" & AscW(.Sentences(i).Characters.Last.Text)
If .Sentences(i).Characters.Last.Text <> ChrW(13) Then .Sentences(i).InsertParagraphAfter
Next
End With
End Sub
все также не работает. при чем щас даже и без таблиц не работает. а у Вас все получилось? странно.
Если бы не работал, я бы не выкладывал, логично? В приложенном Вами файле всё работало. Последний макрос вне таблицы работать не будет, это обеспечивается вот этой строчкой:
If Not Selection.Information(wdWithInTable) Then Exit Sub
Если курсор находится вне таблицы, то процедура прерывается.
это еще более странно, тк я ставлю курсор в таблицу, запускаю новый макрос, он выдает ту же самую ошибку вот здесь ".Sentences(i).InsertParagraphAfter".
я не хочу тратить Ваше время, буду делать заменой, хотя как мне кажется, действительно, макрос не такой сложный.
спасибо
Ничьё время вы не тратите. Этот форум для того и создан, чтобы разбираться в проблемах пользователей, если они этого хотят. Давайте попробуем так. В вашем документе запустите этот макрос:
Sub LetsTryAgain()
Dim i As Long
If Not Selection.Information(wdWithInTable) Then Exit Sub
Open CurDir & "\" & "wordexpert.log" For Output As #1
Print #1, "Полный путь к документу: " & ActiveDocument.FullName
With Selection.Tables(1).Range
Print #1, "Количество предложений в таблице: " & .Sentences.Count
For i = .Sentences.Count To 1 Step -1
Print #1, "Номер предложения=" & i & vbTab & "Код последнего символа: " & AscW(.Sentences(i).Characters.Last.Text)
Next
End With
Close #1
Shell "notepad """ & CurDir & "\" & "wordexpert.log" & """"
End Sub
После его выполнения в Блокноте будет открыт текстовый файл, содержимое которого выложите здесь
Полный путь к документу: D:\Документы\rus.docx
Количество предложений в таблице: 11
Номер предложения=11 Код последнего символа: 13
Номер предложения=10 Код последнего символа: 32
Номер предложения=9 Код последнего символа: 32
Номер предложения=8 Код последнего символа: 13
Номер предложения=7 Код последнего символа: 13
Номер предложения=6 Код последнего символа: 32
Номер предложения=5 Код последнего символа: 32
Номер предложения=4 Код последнего символа: 32
Номер предложения=3 Код последнего символа: 13
Номер предложения=2 Код последнего символа: 32
Номер предложения=1 Код последнего символа: 13
Отредактировано tetris1981 (21.01.2010 14:27:15)
Ну тогда я ничего не понимаю
может тогда подскажете, как вытащить весь текст из таблицы по быстрому?
Стандартным инструментом преобразования таблицы в текст
Стандартным инструментом преобразования таблицы в текст
точно. спасибо.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться