Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Список слов, MS Word


Автор: Vit 4.1.2008, 15:34
Требуется написать макрос для MS Word. Как сделать следующие действия:

1. Из текста все слова засунуть в массив
2. Отыскать нужное слово в тексте и окрасить его другим цветом
3. Отыскать слово под курсором
4. Переместить курсор на следующее/предыдущее слово

Автор: mihanik 5.1.2008, 15:03
Цитата(Vit @  4.1.2008,  15:34 Найти цитируемый пост)
1. Из текста все слова засунуть в массив


Код

Private Sub CommandButton1_Click()
Dim I As Long
Dim M() As String
    
        For I = 1 To ActiveDocument.Words.Count
            ReDim Preserve M(I)
            M(I) = ActiveDocument.Words(I)
        Next
End Sub



Цитата(Vit @  4.1.2008,  15:34 Найти цитируемый пост)
Отыскать нужное слово в тексте и окрасить его другим цветом


Цитата

Finding text and selecting it
If the Find object is accessed from the Selection object, the selection is changed when the find criteria is found. The following example selects the next occurrence of the word "Hello." If the end of the document is reached before the word "Hello" is found, the search is stopped.

With Selection.Find
    .Forward = True
    .Wrap = wdFindStop
    .Text = "Hello"
    .Execute
End With


Цитата(Vit @  4.1.2008,  15:34 Найти цитируемый пост)
4. Переместить курсор на следующее/предыдущее слово 


Код

    Selection.MoveLeft Unit:=wdWord, Count:=1
    Selection.MoveRight Unit:=wdWord, Count:=1


Добавлено через 2 минуты и 24 секунды
Почитай файл C:\Program Files\Microsoft Office\OFFICE11\1049\VBAWD10.CHM.

Все идеи взял от туда.

У меня 2003 офис...

Автор: Akina 5.1.2008, 21:14
mihanik, а зачем на каждом шагу переопределять размер массива, если его конечный размер известен? можно сразу 
Код

ReDim M(1 To ActiveDocument.Words.Count)

Автор: mihanik 5.1.2008, 22:43
Цитата(Akina @  5.1.2008,  21:14 Найти цитируемый пост)
mihanik, а зачем на каждом шагу переопределять размер массива, если его конечный размер известен? можно сразу


Гм...
Виноват...
С пивком программировать можно но такие философские листинги получаются...
 smile 

Автор: Aloha 5.1.2008, 23:11
Цитата
3. Отыскать слово под курсором

Не очень понял, что значит "отыскать". Сделал так:
Код
Sub s_ShowWord()
  Dim v_Rng As Range
  Set v_Rng = Selection.Range.Words.First
  MsgBox v_Rng.Text
End Sub


Цитата
1. Из текста все слова засунуть в массив

Можно использовать объект Dictionary (который живет в Scripting Runtime – там же, где и FileSystemObject). В этом случае легко можно сформировать список уникальных слов документа:
Код
Sub s_WordsList()
  Dim v_Dict As Object 'Scripting.Dictionary
  Dim v_Doc As Document
  Dim i As Long
  
  Set v_Dict = CreateObject("Scripting.Dictionary") 'New Scripting.Dictionary 
  Set v_Doc = ThisDocument
  
  For i = 1 To v_Doc.Words.Count
    v_Text = v_Doc.Words(i).Text
    If v_Dict.Exists(v_Text) = False Then 'проверяем, есть ли уже слово в словаре
      v_Dict.Add v_Text, i
    End If
  Next i
End Sub


При желании можно также перед внесением слова в массив (коллекцию) проверять грамматику (средствами Word’а) и составить список слов с ошибками. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)