Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
truelogin
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 174
1

Поиск и замена слова из списка в диалоговом окне в Word

30.03.2016, 19:30. Просмотров 560. Ответов 18
Метки нет (Все метки)

Добрый день, товарищи!

Нужна помощь
Задача такая, нужно через макрос найти ФИО в документе --> показать диалоговое окно, из которого пользователь выберет нужное ему ФИО --> заменить искомое ФИО на нужное.

Макрос поиска и замены есть
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Poisk_Zamena()
 
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "Петров"
        .Replacement.Text = "Иванов"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
А как реализовать некое модальное окно с вариантами замены?
Может есть у кого то другое решение, как можно реализовать выбор слова?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2016, 19:30
Ответы с готовыми решениями:

Word. Поиск и замена [кодового слова] и вставка перекрестной ссылки
Приветствую. Использовал поиск, находил подобные задачи, но они создавались...

Поиск слов такого типа <* слово , .*> и замена их на другие слова средствами Word-VBA
Есть кнопка в документе,при открытии появляется форма где видно несколько...

Программное нажатие кнопки "сохранить" в диалоговом окне Word
Здравствуйте! В диалоговом окне &quot;Сохранить как&quot; (word) необходимо автоматически...

Поиск и замена текста в Word
Коллеги, помогите как определить последовательность цифр в тексте. и если не...

Поиск и замена текста в word
Как в тексте документа ворда заменить одно слово на другое? Dim DocWord = New...

18
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
30.03.2016, 19:42 2
Ищите по слову UserForm. Создаете свою форму, на ней ComboBox, в нем список из нужных ФИО.
1
truelogin
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 174
30.03.2016, 19:51  [ТС] 3
А без них возможно это сделать? С помощью только кода?
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
30.03.2016, 19:53 4
Нет. Как без хоть какого-то элемента Вы отобразите список ФИО к замене? Если надо просто вписать ФИО для замены(без выбора из списка) - то используйте InputBox.
1
truelogin
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 174
30.03.2016, 20:29  [ТС] 5
The_Prist, а как потом можно будет перенести данную форму на другие ПК?

Добавлено через 29 минут
Разобрался)) Спасибо))
У меня теперь другой вопрос

Теперь у меня вызывается ЮзерФорм с кнопками. На каждой кнопке весит определённая процедруа (аналогичная, что указал вначале, но разные ФИО). А возможно сделать меню настройки, где каждый пользователь сам бы смог править нужные ему ФИО? Будут ли эти данные сохраняться?
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
30.03.2016, 21:15 6
Приложите здесь файл со своей формой. Все эти формы хранятся вместе с файлом. Если Вы в файле создали форму, а не в Normal.dot, конечно.
0
truelogin
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 174
30.03.2016, 21:35  [ТС] 7
Вот
0
Вложения
Тип файла: docx Документ Microsoft Word.docx (12.8 Кб, 4 просмотров)
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
30.03.2016, 21:49 8
И где же в файле форма? Или хоть строка кода?
0
truelogin
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 174
30.03.2016, 21:55  [ТС] 9
Пардон)) Я в "самом ворде" их разместил
0
Вложения
Тип файла: docx Документ Microsoft Word.docx (12.8 Кб, 1 просмотров)
truelogin
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 174
30.03.2016, 22:16  [ТС] 10
Вот, что пока смог реализовать.
Но не могу пока реализовать настройку и не получается сделать функционал "отменить замену"
0
Вложения
Тип файла: docx Macr_Word.docx (14.2 Кб, 4 просмотров)
Sasha_Smirnov
5466 / 1309 / 143
Регистрация: 08.02.2009
Сообщений: 4,021
Записей в блоге: 29
30.03.2016, 23:34 11
Ctr+z обычно.

Это упражнения или работа?
0
truelogin
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 174
31.03.2016, 07:13  [ТС] 12
Sasha_Smirnov, это работа (( Про комбинацию знаю, но макрос будет заменять не одну фамилию, а несколько и другие поля тоже. Поэтому хотелось бы отмену действий макроса
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
31.03.2016, 10:11 13
Вы упорно выкладываете файлы без единой строки кода и надеетесь получить какие-то вменяемые ответы...
Подсказка - формат .docx является форматом без поддержки макросов. Когда в него сохраняете Вам Word даже предупреждение выдает, что все макросы в файле будут утеряны. Сохраняйте в формат docm.

По поводу отмены действий макроса: а не помогает использование application.Undo в коде?
1
truelogin
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 174
31.03.2016, 17:42  [ТС] 14
Я походу вчера очень сильно спать хотел))
Вот этот должен быть с макросами.
application.Undo - пока не знаю - не до конца разобрался с циклами..
0
Вложения
Тип файла: rar Macr_Word.rar (10.9 Кб, 2 просмотров)
truelogin
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 174
31.03.2016, 17:52  [ТС] 15
Опять не сохранилась форма ((( что то не так у меня с Вордом.
0
Вложения
Тип файла: rar Macr_Word.rar (18.3 Кб, 4 просмотров)
truelogin
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 174
31.03.2016, 22:43  [ТС] 16
The_Prist, подскажите, пожалуйста, как организовать хранение данных, которые пользователи ввели в textbox? Т.е. чтобы даже после закрытия-открытия документа - там оставались введенные данные.

Добавлено через 2 часа 30 минут
Сам нашёл выход из ситуации. Но теперь другая проблема появилась)
У меня 2 формы + модуль
В модуле я прописал Глобальные переменные.
В первой форме я присваиваю значения данным переменным (должен)
А во второй форме вывожу значения данных переменных (должен)

По факту это в формах не работает..
Работает, только присвоение в первой форме, если в ней же объявить данные переменные.

Гугление показало, что проблема из-за того, что у меня формы и модуль находятся не в Project, а в Normal.

Как быть в данном случае? Как передать значения переменных из одной формы в другую?
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
01.04.2016, 09:02 17
Ну вот смотрите вложение, изучайте. Я там многое поменял. Можно выбрать из списка ФИО для поиска и ФИО для замены отдельно. Все эти ФИО можно добавлять и удалять в форме настроек.
Для хранения ФИО используется глобальное семейство документа - Variables.

По вопросу хранения переменных - надо объявлять в стандартном модуле. Если модераторы пропустят, то вот ссылка с описанием каждого типа объявлений и их нюансами: Что такое переменная и как правильно её объявить?
1
Вложения
Тип файла: zip Macr_Word.zip (31.5 Кб, 7 просмотров)
truelogin
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 174
02.04.2016, 08:20  [ТС] 18
The_Prist, спасибо, но немного не то.
Дело в том, что много операций необходимо в Вашем случае делать пользователю.
А задача, как раз в том, что бы автоматизировать штатный инструмент Поиск & Замена.
По поводу хранения ФИО я разобрался - я выбрал иной способ - хранение в файле.
У меня сейчас одна проблема - у меня не получается объявить Глобальную переменную в Модуле - формы их не видят - видят только в том случае, когда модуль и формы принадлежат конкретному документу ворд, а мне надо, что бы этот макрос можно было вызвать в любом документе (что то вроде надстройки).
Как быть в данном случае?

Код формы Main
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Private Sub Setting_Click()
Setup.Show
 
 
End Sub
 
Private Sub CommandButton1_Click()
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "Ïåòðîâ"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Unload Main
   
 
End Sub
 
 
 
Private Sub CommandButton2_Click()
 
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "Ïåòðîâ"
        .Replacement.Text = "Г‚Г*Г±ГЁГ*"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
 
 
Private Sub UserForm_Click()
 
End Sub
Код формы Setting
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Public Sub UserForm_Terminate()
Const strFN As String = "C:\TEMP\FIO.txt"
Open strFN For Output As #1
Print #1, Me.TextBox1.Text
Print #1, Me.TextBox2.Text
Print #1, Me.TextBox3.Text
Print #1, Me.TextBox4.Text
Print #1, Me.TextBox5.Text
Close #1
End Sub
 
Public Sub UserForm_Initialize()
Const strFN As String = "C:\TEMP\FIO.txt"
Dim strText As String
Open strFN For Input As #1
Line Input #1, strText
Me.TextBox1.Text = strText
Me.FIO1 = Me.TextBox1
 
Line Input #1, strText
Me.TextBox2.Text = strText
Me.FIO2 = Me.TextBox2
 
Line Input #1, strText
Me.TextBox3.Text = strText
Me.FIO3 = Me.TextBox3
 
Line Input #1, strText
Me.TextBox4.Text = strText
Me.FIO4 = Me.TextBox4
 
Line Input #1, strText
Me.TextBox5.Text = strText
Me.FIO5 = Me.TextBox5
 
Close #1
End Sub
Private Sub CommandButton1_Click()
Unload Setup
End Sub
Код формы Module1
Visual Basic
1
2
3
4
5
6
7
Public FIO1, FIO2, FIO3, FIO4, FIO5 As String
 
 
Sub OpenUserForm()
    Main.Show
   
End Sub
От общего к частному

Мне нужно передать значения переменных FIO из формы Setting в Main, что бы изменить текст на кнопках на фамилии FIO. Но не получается.
0
truelogin
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 174
04.04.2016, 22:55  [ТС] 19
Задача решена! Всем спасибо!
0
04.04.2016, 22:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2016, 22:55

Поиск и замена в Word 2003
Буду очень признателен за любую помощь! Задача такова: есть большой документ...

Активизация объекта в диалоговом окне
Доброго времени суток. Подскажите пожалуйста, кто знает, как...

Поиск замена по регулярному выражению в word
Добрый день. Пишу макрос для автоматической замены и расстановки меток....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru