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

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

12.09.2011, 13:44. Показов 40124. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru