С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/187: Рейтинг темы: голосов - 187, средняя оценка - 4.89
182 / 1 / 0
Регистрация: 12.09.2011
Сообщений: 81

Макрос. Автозаполнение анкеты в Word. Нужна помощь

12.09.2011, 13:44. Показов 39056. Ответов 96
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю макрос для автоматического заполнения анкеты.
Есть куча повторяющихся строк, например фамилия, имя, отчество и т.п.
При выполнении макроса данные вставляются только в одном месте, т.е. например фамилия вставляется только один раз в первой закладке, а дальше по доку пусто.
Помоги кто знает.
Заранее спасибо.
Шаблон прилагаю
Вложения
Тип файла: rar шаблон-анкета.rar (30.5 Кб, 1003 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.09.2011, 13:44
Ответы с готовыми решениями:

нужна помощь с Word
здравствуйте!у меня возникла проблема,при распечатке "ворд" рамка(обычная или другая рамка) сдвигается с поставленного места,при...

Макрос. Вычисление среднего значения от времени. Нужна помощь
Необходимо вычислять среднее значение столбца value в течении каждых 5ти минут и результаты заносить в соседний столбец. Т.е. при диапазоне...

нужна помощь в открытии документ word
Привет всем! У меня проблема с открытием документ Microsoft word. Дела в том что получила письмо и не могу открыть её, я заметила что в...

96
182 / 1 / 0
Регистрация: 12.09.2011
Сообщений: 81
05.10.2011, 11:18  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Busine2009 Посмотреть сообщение
kotan,
чтобы было видно поля (потом поймёте, зачем это надо):
Сервис - Параметры... - вкладка Вид - затенение полей: Всегда.

Чтобы было видно непечатаемые символы:
щ. на панели инструментов Стандартная кнопку Непечатаемые знаки.

Допустим встречается строка Фамилия 10 раз:
  1. вставляете поле Формы там, где строка Фамилия, встречается первый раз;
  2. даёте имя полю Фамилия;
  3. для наглядности введите в поле слово Фамилия;
  4. перейдите в то место документа, где строка Фамилия встречается второй раз;
  5. Вставка - Ссылка - Перекрёстная ссылка...;
  6. Тип ссылки: Закладка - выбирете закладку с именем Фамилия - Вставить - Закрыть;
  7. в документ будет вставлено слово Фамилия и оно будет серым. Серое означает, что это не прост текст, а поле (не надо вникать, что это такое);
  8. скопируйте это серое (без знака абзаца);
  9. вставьте скопированное во все строки, где должна быть фамилия.
Теперь при изменении текста в поле Формы в строке Фамилия, будут изменены все перекрёстные ссылки на это поле Формы. Чтобы изменения произошли: Файл - Предварительный просмотр (чтобы произошло обновление полей), а затем выйдите из Предварительного просмотра.
Занимался все время кодом, не обращал внимания на результат работы формы, а вот сейчас заметил такую штуку: заполняю поля своей формы, нажимаю "Вставить", в документе в соответствующих местах вставляется необходимый текст, НО....
тот текст, который вставляется непосредственно в текстовое поле с уникальным кодом имеет заданный стиль (шрифт, размер шрифта и т.п.), а другой текст, который получается из перекрестных ссылок с текстовых полей (повторяющийся) теряет заданный стиль, т.е. например, шрифт текста становится больше/меньше, жирный/обычный и т.п...
Уже все перепробовал, что мог - очистка стиля и т.п.
Подскажите, кто ведает, где поправить.
Результат в картинке.
Миниатюры
Макрос. Автозаполнение анкеты в Word. Нужна помощь  
0
182 / 1 / 0
Регистрация: 12.09.2011
Сообщений: 81
05.10.2011, 17:04  [ТС]
Цитата Сообщение от kotan Посмотреть сообщение
Занимался все время кодом, не обращал внимания на результат работы формы, а вот сейчас заметил такую штуку: заполняю поля своей формы, нажимаю "Вставить", в документе в соответствующих местах вставляется необходимый текст, НО....
тот текст, который вставляется непосредственно в текстовое поле с уникальным кодом имеет заданный стиль (шрифт, размер шрифта и т.п.), а другой текст, который получается из перекрестных ссылок с текстовых полей (повторяющийся) теряет заданный стиль, т.е. например, шрифт текста становится больше/меньше, жирный/обычный и т.п...
Уже все перепробовал, что мог - очистка стиля и т.п.
Подскажите, кто ведает, где поправить.
Результат в картинке.
Решил сам. Если кому будет полезно - объясняю как получилось.
Заменил ключ поля \* MERGEFORMAT на \*Charformat
Получается, например, вот так - {REF Имя \ *Charformat} вместо {REF Имя \ * MERGEFORMAT}
П.С. Увидеть коды полей - Alt+F9
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,300
05.10.2011, 18:13
Цитата Сообщение от kotan Посмотреть сообщение
Заменил ключ поля \* MERGEFORMAT на \*Charformat
ещё новостью для Вас будет если будете пользоваться "кисточкой", MERGEFORMAT снова появится
0
182 / 1 / 0
Регистрация: 12.09.2011
Сообщений: 81
06.10.2011, 12:38  [ТС]
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
ещё новостью для Вас будет если будете пользоваться "кисточкой", MERGEFORMAT снова появится
Ну у меня уже все поля были готовы, с ключем Mergeformat, поэтому я по всему документу заменил все автозаменой на Charformat.
0
182 / 1 / 0
Регистрация: 12.09.2011
Сообщений: 81
26.10.2011, 16:32  [ТС]
Друзья подскажите.
Есть код, который преобразовывает ФИО в Инициалы и фамилию:
Visual Basic
1
2
3
4
5
6
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBox3.Value) = 0 Then MsgBox ("Введите правильные данные"): Exit Sub
Dim arr() As String
arr = Split(Me.TextBox3.Text)
TextBox76.Text = Mid(arr(1), 1, 1) & "." & Mid(arr(2), 1, 1) & "." & arr(0)
End Sub
Но есть проблема, если в поле ФИО не введены три слова, например по ошибке, при переходе на следующие поле вылетает отладка. как бы попроавить код и обойтись например без проверки введенных данных или чтобы текстбокс выскакивал?
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,300
26.10.2011, 17:14
укажите пользователям правила:
Если при вводе данных о лице, это лицо не имеет отчества, требуется писать:
для лица мужского пола, например:
"Иванов Иван Отчество_М", то есть отчество писать как "Отчество_М"
для лица женского пола, например:
"Петрова Наталья Имя Отчество_Ж", то есть отчество писать как "Отчество_Ж".
Если лицо в своём отчестве имеет окончание "Оглы" или "Кызы". Требуется вводить "Фамилию Имя Отчество" лица строго, например "Бинатов Элдояк Захид-Оглы", то есть в отчестве лица строго "Захид-Оглы", без пробелов между знаками "-" или "–".

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
If UBound(Split(Строка_таблицы_Word)) <> 2 Then
                                .Rows(cursor_row).Cells(cursor_column_cell).Range.Select
                                MsgBox$ _
                                        "Внесённые в ячейку таблицы данные:" & Chr$(13) & _
                                                                             Строка_таблицы_Word & Chr$(13) & _
                                                                             "Должны иметь запись, состоящую из трёх слов - Фамилия Имя Отчество" & Chr$(13) & _
                                                                             "Возможно Вы допустили ошибку, исправьте ошибку" & Chr$(13) & _
                                                                             "Если ошибки нет, сообщите разработчику для устранения ошибок в дальнейшем" & Chr$(13) & _
                                                                             "Программа не может быть продолжена", vbOKOnly, _
                                                                             "Внимание"
                                'перейти к метке с именем ...
                                GoTo Конец
                            End If
Затем функция

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
Function FunctionВыясняем_пол_инициалы_лица( _
         Инициалы_лица, _
         Пол_лица, _
         Строка_таблицы_Word)
 
'пол лица мужской
    If Строка_таблицы_Word Like "*Отчество_М*" Then
        Пол_лица = "Мужской_Без_отчества"
        Инициалы_лица = Mid$(Split(Строка_таблицы_Word)(1), 1, 1) & "."
 
        'пол лица мужской
        'сравниваем последние ... знака строки
    ElseIf LCase$(Right$(Строка_таблицы_Word, 4)) = "оглы" Then
        Пол_лица = "Мужской_Несколянемое_отчество"
        Инициалы_лица = Mid$(Split(Строка_таблицы_Word)(1), 1, 1) & "." & Mid$(Split(Строка_таблицы_Word)(2), 1, 1) & "."
 
        'пол лица мужской
        'сравниваем последние ... знака строки
    ElseIf LCase$(Right$(Строка_таблицы_Word, 2)) = "ич" Then
        Пол_лица = "Мужской"
        Инициалы_лица = Mid$(Split(Строка_таблицы_Word)(1), 1, 1) & "." & Mid$(Split(Строка_таблицы_Word)(2), 1, 1) & "."
 
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
        'пол лица женский
    ElseIf Строка_таблицы_Word Like "*Отчество_Ж*" Then
        Пол_лица = "Женский_Без_отчества"
        Инициалы_лица = Mid$(Split(Строка_таблицы_Word)(1), 1, 1) & "."
 
        'пол лица женский
        'сравниваем последние ... знака строки
    ElseIf LCase$(Right$(Строка_таблицы_Word, 4)) = "кызы" Then
        Пол_лица = "Женский_Несколянемое_отчество"
        Инициалы_лица = Mid$(Split(Строка_таблицы_Word)(1), 1, 1) & "." & Mid$(Split(Строка_таблицы_Word)(2), 1, 1) & "."
 
        'пол лица женский
        'сравниваем последние ... знака строки
    ElseIf LCase$(Right$(Строка_таблицы_Word, 2)) = "на" Then
        Пол_лица = "Женский"
        Инициалы_лица = Mid$(Split(Строка_таблицы_Word)(1), 1, 1) & "." & Mid$(Split(Строка_таблицы_Word)(2), 1, 1) & "."
 
        'пол лица не определён
    Else
        Пол_лица = "Не определён"
 
    End If
 
End Function
где Строка_таблицы_Word - это и есть то что подразумевается как ФИО
0
182 / 1 / 0
Регистрация: 12.09.2011
Сообщений: 81
27.10.2011, 11:23  [ТС]
Спасибо, но для меня это слишком сложный код, да и не очень нужный. Мне главное, чтобы отладчик не включался, не завершалась программа, если скажем у человека, например нет отчества, то просто выскочил текстбокс и уточнил правильно ли все, а потом пользователь мог дальше заполнять анкету. Или если человек просто проскакивает этот пункт, чтобы потом к нему вернуться или ввел например только фамилию или только имя..... ограничиться предупреждением, но без отладчика.
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,300
27.10.2011, 18:55
что сложного пишите
из текбокса = Строка_таблицы_Word
затем первый код
затем фукция
Visual Basic
1
2
3
4
Function FunctionВыясняем_пол_инициалы_лица _
         Инициалы_лица, _
         Пол_лица, _
         Строка_таблицы_Word
в конце макроса надо чтобы было
Конец:
ну конечно сама функция
0
182 / 1 / 0
Регистрация: 12.09.2011
Сообщений: 81
28.10.2011, 16:41  [ТС]
Как это сделтьа на основе этого:
Visual Basic
1
2
3
4
5
6
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBox3.Value) = 0 Then MsgBox ("Введите правильные данные"): Exit Sub
Dim arr() As String
arr = Split(Me.TextBox3.Text)
TextBox76.Text = Mid(arr(1), 1, 1) & "." & Mid(arr(2), 1, 1) & "." & arr(0)
End Sub
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
29.10.2011, 07:07
Всё же разбивать в текстбоксе не-пойми-что на фамилию-имя-отчество — плохо.

Я переделал под эти нужды свой диалог ввода года-месяца-числа. Может, и пригодится.
Миниатюры
Макрос. Автозаполнение анкеты в Word. Нужна помощь  
Вложения
Тип файла: doc Фамилия_И_О.doc (56.5 Кб, 102 просмотров)
0
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 31
11.02.2013, 16:36
Мужики - извините что поднимаю тему, но подскажите, возможно что бы при открытии шаблона (т.е. создании нового документа из шаблона) открывалось окно?
А то если открывать просто документ docm - то работает
а если dotm - то не открывается, только в ручную.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
11.02.2013, 17:23
marte, вот этот код:
Visual Basic
1
2
3
4
5
Private Sub Document_New()
    
    MsgBox "Создан новый документ."
    
End Sub
поместите вот сюда (на скриншоте указано стрелкой):
0
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 31
13.02.2013, 13:42
Немного офтопа, а что за программа которая скриншоты делает, с возможностью такую красивую стрелку нарисовать?

Добавлено через 7 минут
Да и можно использовать перекрестные ссылки не для форм, а для закладок?

Добавлено через 2 минуты
Просто нужно много переменных по тесту вставлять, в формате текста, без изменений

Добавлено через 1 час 46 минут
Просто с закладками не работает REF, точнее работает, но проблема в том что
ActiveDocument.Bookmarks("fio_kratko5_da t").Range.Text - текст заменяется, и закладка пропадает. Что очень плохо))
0
13.02.2013, 13:55

Не по теме:

Цитата Сообщение от marte Посмотреть сообщение
что за программа которая скриншоты делает, с возможностью такую красивую стрелку нарисовать?
Point, например, очень экзотическая программа:)

Миниатюры
Макрос. Автозаполнение анкеты в Word. Нужна помощь  
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
13.02.2013, 15:12
marte, создайте новую тему и объясните вашу задачу.
Чтобы меньше вопросов вам задавали, выложите Word-документ с примерными данными и на основе этого документа объясните свою задачу.
0
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 31
13.02.2013, 15:19
Сделал отдельную тему - Вставка одинаковых фраз в большом количестве
0
0 / 0 / 0
Регистрация: 20.05.2015
Сообщений: 6
23.10.2019, 17:52
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
укажите пользователям правила:
Если при вводе данных о лице, это лицо не имеет отчества, требуется писать:
для лица мужского пола, например:
"Иванов Иван Отчество_М", то есть отчество писать как "Отчество_М"
для лица женского пола, например:
"Петрова Наталья Имя Отчество_Ж", то есть отчество писать как "Отчество_Ж".
Если лицо в своём отчестве имеет окончание "Оглы" или "Кызы". Требуется вводить "Фамилию Имя Отчество" лица строго, например "Бинатов Элдояк Захид-Оглы", то есть в отчестве лица строго "Захид-Оглы", без пробелов между знаками "-" или "–".

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
If UBound(Split(Строка_таблицы_Word)) <> 2 Then
      .Rows(cursor_row).Cells(cursor_column_cell).Range.Select
       MsgBox$ _
       "Внесённые в ячейку таблицы данные:" & Chr$(13) & _
        Строка_таблицы_Word & Chr$(13) & _
       "Должны иметь запись, состоящую из трёх слов - Фамилия Имя Отчество" & Chr$(13) & _
       "Возможно Вы допустили ошибку, исправьте ошибку" & Chr$(13) & _
       "Если ошибки нет, сообщите разработчику для устранения ошибок в дальнейшем" & Chr$(13) & _
       "Программа не может быть продолжена", vbOKOnly, _
       "Внимание"
       'перейти к метке с именем ...
        GoTo Конец
        End If
Затем функция

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
Function FunctionВыясняем_пол_инициалы_лица( _
         Инициалы_лица, _
         Пол_лица, _
         Строка_таблицы_Word)
 
'пол лица мужской
    If Строка_таблицы_Word Like "*Отчество_М*" Then
        Пол_лица = "Мужской_Без_отчества"
        Инициалы_лица = Mid$(Split(Строка_таблицы_Word)(1), 1, 1) & "."
 
        'пол лица мужской
        'сравниваем последние ... знака строки
    ElseIf LCase$(Right$(Строка_таблицы_Word, 4)) = "оглы" Then
        Пол_лица = "Мужской_Несколянемое_отчество"
        Инициалы_лица = Mid$(Split(Строка_таблицы_Word)(1), 1, 1) & "." & Mid$(Split(Строка_таблицы_Word)(2), 1, 1) & "."
 
        'пол лица мужской
        'сравниваем последние ... знака строки
    ElseIf LCase$(Right$(Строка_таблицы_Word, 2)) = "ич" Then
        Пол_лица = "Мужской"
        Инициалы_лица = Mid$(Split(Строка_таблицы_Word)(1), 1, 1) & "." & Mid$(Split(Строка_таблицы_Word)(2), 1, 1) & "."
 
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
        'пол лица женский
    ElseIf Строка_таблицы_Word Like "*Отчество_Ж*" Then
        Пол_лица = "Женский_Без_отчества"
        Инициалы_лица = Mid$(Split(Строка_таблицы_Word)(1), 1, 1) & "."
 
        'пол лица женский
        'сравниваем последние ... знака строки
    ElseIf LCase$(Right$(Строка_таблицы_Word, 4)) = "кызы" Then
        Пол_лица = "Женский_Несколянемое_отчество"
        Инициалы_лица = Mid$(Split(Строка_таблицы_Word)(1), 1, 1) & "." & Mid$(Split(Строка_таблицы_Word)(2), 1, 1) & "."
 
        'пол лица женский
        'сравниваем последние ... знака строки
    ElseIf LCase$(Right$(Строка_таблицы_Word, 2)) = "на" Then
        Пол_лица = "Женский"
        Инициалы_лица = Mid$(Split(Строка_таблицы_Word)(1), 1, 1) & "." & Mid$(Split(Строка_таблицы_Word)(2), 1, 1) & "."
 
        'пол лица не определён
    Else
        Пол_лица = "Не определён"
 
    End If
 
End Function
где Строка_таблицы_Word - это и есть то что подразумевается как ФИО
Мира вашему дому. Помогити пжлста . Есть два файла: Таблица с ФИО и Шаблон. Путём слияния я подставляю данные из таблицы в шаблон. Все бы норм, но в шаблоне есть места где нужно указать ФИО из таблиц в виде И.О. Фамилия. Мне кажется я попал в ту тему ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.10.2019, 17:52
Помогаю со студенческими работами здесь

Нужна помощь ASP+WORD = Ошибка 800a175d|Не_удается_открыть_банк_макросов.
Народ плз подскажите может кто знает как избавиться от такоой ошибки. 800a175d|Не_удается_открыть_банк_макросов. Вот код который...

Макрос Word 2016 замена шрифта рандомных символов на выбранный - MS Word
Есть обычный текст, только буквы и цифры Нужно, чтобы после обработки макроса выбирались случайные символы (примерно четверть от общего...

Автозаполнение шаблонов WORD
Доброго времени дня! Нужна Ваша помощь с автозаполнением писем. Из-за большого потока клиентов просто не успевал заполнять четыре...

Автозаполнение нумерации Word
Можно ли сделать в Worde автозаполнение нумерации? 1,2,3 и тд. в таблице.

Автозаполнение документа Word
Есть данные которые храняться в таблицах, нужно создать макрос который бы сначала обновлял таблицу которая будет использована для...


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

Или воспользуйтесь поиском по форуму:
97
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru