Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Список слов, MS Word 
:(
    Опции темы
Vit
Дата 4.1.2008, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



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

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


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
mihanik
Дата 5.1.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Цитата(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 офис...


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Akina
Дата 5.1.2008, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



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

ReDim M(1 To ActiveDocument.Words.Count)



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
mihanik
Дата 5.1.2008, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



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


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

Это сообщение отредактировал(а) mihanik - 5.1.2008, 22:44


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Aloha
Дата 5.1.2008, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
**


Профиль
Группа: Участник Клуба
Сообщений: 351
Регистрация: 14.5.2006

Репутация: 5
Всего: 165



Цитата
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’а) и составить список слов с ошибками. 

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.