Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Макрос для работы с текстом в Word Добавлено: 26.09.06 02:39  

Автор вопроса:  sergius
Помогите, пожалуйста, сделать макрос:

Дан текст (одна строка) в Word. Изменить порядок слов в этом тексте на обратный и расположить преобразованный текст на следующей строке.

С VBA столкнулся впервые, поэтому только начал изучать! Проблема в том, что не знаю как считать текст в переменную и изменить порядок слов!

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 Oleg



Вопросов: 1
Ответов: 3
 Профиль | | #1 Добавлено: 26.09.06 04:05
    Sub BacwardText()
    ;Dim workString As String
    ;Dim bacwardString As String
    ;Dim SplitString() As String
    ;Dim numberWords As Byte
    
    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)
   ;Dim OutArray() As String, Pos As Long, newPos As Long
   ReDim OutArray(0 To 0)
   Pos = 1
   ;Do
      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
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #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
Автор ответа:
 sergius



Вопросов: 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
Автор ответа:
 sergius



Вопросов: 4
Ответов: 15
 Профиль | | #4 Добавлено: 02.10.06 17:11
Дополнительное задание:

В тексте с изменённым порядком слов первая буква должна быть большой, а последняя маленькой!

Ответить

Номер ответа: 5
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #5
Добавлено: 03.10.06 13:14
Дополнительное задание:


:-) Извините, но от такого отношения нет желания отвечать... Не думаю, что кто-нибудь приходит сюда, чтобы выполнять чьи-то задания, указания или распоряжения... Но если приходит, то, чтобы помочь тому, кто приходит и просит о помощи.

Вам же, как мне кажется, стоило бы приложить чуть больше усилия, чтобы изучать VBA, как Вы сказали в начале.

Ответить

Номер ответа: 6
Автор ответа:
 sergius



Вопросов: 4
Ответов: 15
 Профиль | | #6 Добавлено: 03.10.06 15:35
:-) Извините, но от такого отношения нет желания отвечать... Не думаю, что кто-нибудь приходит сюда, чтобы выполнять чьи-то задания, указания или распоряжения... Но если приходит, то, чтобы помочь тому, кто приходит и просит о помощи.

Извините, пожалуйста! Мне, действительно, нужна помощь в решении этого задания!

Вам же, как мне кажется, стоило бы приложить чуть больше усилия, чтобы изучать VBA, как Вы сказали в начале.

Да, согласен, стоило бы, но приходиться одновременно изучать и Delphi, который более важен, чем VBA, на который нет времени!

Ответить

Номер ответа: 7
Автор ответа:
 sergius



Вопросов: 4
Ответов: 15
 Профиль | | #7 Добавлено: 03.10.06 19:40
Как я думаю - команда
UCase(Left(s, 1)) & Mid(s, 2, Len(s) - 2) & LCase(Right(s, 1))
выполняет то, что мне нужно, но как заставить выводить полученный результат?

Ответить

Номер ответа: 8
Автор ответа:
 sergius



Вопросов: 4
Ответов: 15
 Профиль | | #8 Добавлено: 09.10.06 13:38
Никто не поможет?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам