182 / 1 / 0
Регистрация: 12.09.2011
Сообщений: 81

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

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

Студворк — интернет-сервис помощи студентам
Делаю макрос для автоматического заполнения анкеты.
Есть куча повторяющихся строк, например фамилия, имя, отчество и т.п.
При выполнении макроса данные вставляются только в одном месте, т.е. например фамилия вставляется только один раз в первой закладке, а дальше по доку пусто.
Помоги кто знает.
Заранее спасибо.
Шаблон прилагаю
Вложения
Тип файла: rar шаблон-анкета.rar (30.5 Кб, 1014 просмотров)
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
1713 / 580 / 76
Регистрация: 10.04.2009
Сообщений: 9,337
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
1713 / 580 / 76
Регистрация: 10.04.2009
Сообщений: 9,337
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
1713 / 580 / 76
Регистрация: 10.04.2009
Сообщений: 9,337
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 Кб, 105 просмотров)
0
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 31
11.02.2013, 16:36
Мужики - извините что поднимаю тему, но подскажите, возможно что бы при открытии шаблона (т.е. создании нового документа из шаблона) открывалось окно?
А то если открывать просто документ docm - то работает
а если dotm - то не открывается, только в ручную.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
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,578
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru