Страница: 1 |
Вопрос: Макрос для работы с текстом в Word | Добавлено: 26.09.06 02:39 |
Автор вопроса: ![]() |
Помогите, пожалуйста, сделать макрос:
Дан текст (одна строка) в Word. Изменить порядок слов в этом тексте на обратный и расположить преобразованный текст на следующей строке. С VBA столкнулся впервые, поэтому только начал изучать! Проблема в том, что не знаю как считать текст в переменную и изменить порядок слов! |
Ответы | Всего ответов: 8 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 3 |
Профиль | Цитата | #1 | Добавлено: 26.09.06 04:05 |
Sub BacwardText()
![]() ![]() ![]() ![]() workString = ' Ваша исходная строка W = Split (workString, " " ![]() SplitString() = W numberWords = Ubound(SplitString) For n =numberWords To 0 Step -1 bacwardString = bacwardString & SplitString(n) & " " 'желаемый результат Next n End Sub '------------------------------------------------------------------------------------------------------- ' Разбиение строки на фрагменты по разделителю '------------------------------------------------------------------------------------------------------- Function Split(Text As String, Delimiter As String) ![]() ReDim OutArray(0 To 0) Pos = 1 ![]() newPos = InStr(Pos, Text, Delimiter, vbTextCompare) If newPos = 0 Then OutArray(UBound(OutArray)) = Mid(Text, Pos) Else OutArray(UBound(OutArray)) = Mid(Text, Pos, newPos - Pos) Pos = newPos + Len(Delimiter) ReDim Preserve OutArray(0 To UBound(OutArray) + 1) End If Loop While newPos > 0 Split = OutArray End Function |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 185 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 26.09.06 10:28 |
Я бы сделал так, наверно:
Sub ReverseWords()
w = Selection.Words.Count Selection.InsertAfter vbCrLf For i = w To 1 Step -1 Selection.InsertAfter Selection.Words(i) 'добавим пробел, если его нет в конце слова If Right(ActiveDocument.Words(i), 1) <> " " Then Selection.InsertAfter " " Next i End Sub Перед выполнением макроса нужно выделить нужную часть текста в документе, последовательность слов которого необходимо изменить. После отработки выделение будет включать в себя как исходный текст, так и обработанный. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() Вопросов: 4 Ответов: 15 |
Профиль | Цитата | #3 | Добавлено: 26.09.06 14:56 |
Я бы сделал так, наверно:
Sub ReverseWords()
w = Selection.Words.Count Selection.InsertAfter vbCrLf For i = w To 1 Step -1 Selection.InsertAfter Selection.Words(i) 'добавим пробел, если его нет в конце слова If Right(ActiveDocument.Words(i), 1) <> " " Then Selection.InsertAfter " " Next i End Sub Перед выполнением макроса нужно выделить нужную часть текста в документе, последовательность слов которого необходимо изменить. После отработки выделение будет включать в себя как исходный текст, так и обработанный. Огромное спасибо за помощь! Использовал этот метод! Всё прекрасно работает! |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() Вопросов: 4 Ответов: 15 |
Профиль | Цитата | #4 | Добавлено: 02.10.06 17:11 |
Дополнительное задание:
В тексте с изменённым порядком слов первая буква должна быть большой, а последняя маленькой! |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 185 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 03.10.06 13:14 |
Дополнительное задание:
![]() Вам же, как мне кажется, стоило бы приложить чуть больше усилия, чтобы изучать VBA, как Вы сказали в начале. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() Вопросов: 4 Ответов: 15 |
Профиль | Цитата | #6 | Добавлено: 03.10.06 15:35 |
![]() Извините, пожалуйста! Мне, действительно, нужна помощь в решении этого задания! Вам же, как мне кажется, стоило бы приложить чуть больше усилия, чтобы изучать VBA, как Вы сказали в начале.
Да, согласен, стоило бы, но приходиться одновременно изучать и Delphi, который более важен, чем VBA, на который нет времени! |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() Вопросов: 4 Ответов: 15 |
Профиль | Цитата | #7 | Добавлено: 03.10.06 19:40 |
Как я думаю - команда UCase(Left(s, 1)) & Mid(s, 2, Len(s) - 2) & LCase(Right(s, 1)) выполняет то, что мне нужно, но как заставить выводить полученный результат?
|
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() Вопросов: 4 Ответов: 15 |
Профиль | Цитата | #8 | Добавлено: 09.10.06 13:38 |
Никто не поможет? |
Страница: 1 |
|