Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2017, 10:10   #1
irina181
Пользователь
 
Регистрация: 07.09.2017
Сообщений: 44
По умолчанию Использование макроса для вывода части текста поля

Привет форумчане. Набрела тут на один урок (он тут http://wordexpert.ru/page/ispolzovan...a#comment-7337 ), всё вроде бы сделала правильно, но не работает. Смысл урока в том, что после ввода в поле фамилии имя и отчества, после нажатия TAB, в закладке ФИО должны отобразиться фамилия и инициалы. Макрос такой
Код:
Sub FIO()
Dim bm As Bookmark
Dim sText As String
Dim sArray() As String
Dim sResult1 As String
Dim sResult2 As String
Set bm = ActiveDocument.Bookmarks("bm")
sText = bm.Range.Text
sArray = Split(sText)
sResult1 = sArray(0) & " "
sResult1 = sResult1 & Left(sArray(1), 1) & ". "
sResult1 = sResult1 & Left(sArray(2), 1) & "."
sResult2 = sArray(2) & " "
sResult2 = sResult2 & sArray(1)
ActiveDocument.Bookmarks("fio").Select
Selection.TypeText sResult1
End Sub
. Условие работы макроса при защищенном листе.
Документ защищён (пароль: ничего не вводить) . Макрос останавливается на строке
Код:
sResult1 = sArray(0) & " "
, при наведении курсора на эту строку, появляется сообщение Subscript out range. Я в макросах практически ноль. Прошу помощи. Очень надо. Шаблон моего файла во вложении. Всем спасибо.
Вложения
Тип файла: rar Doc2.rar (12.2 Кб, 24 просмотров)

Последний раз редактировалось irina181; 07.09.2017 в 10:36.
irina181 вне форума Ответить с цитированием
Старый 07.09.2017, 10:40   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Вы на 100% уверенны что полеввода имеет закладку bm а результат FIO?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 07.09.2017, 10:42   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы невнимательно прочитали инструкцию и забыли дать полям имена:
Цитата:
Далее, перейдите в текст шаблона договора и выделите текстовое поле и в свойствах его (щелчок правой кнопкой и выбор команды "Свойства") установите флажок на параметрах "Разрешить изменения" и "Вычислить при выходе", а в поле "Закладка" введите имя закладки для этого поля - bm. В поле "При выходе" выберите ваш макрос "FIO" и закройте диалог.

Далее, определитесь - в каком месте шаблона у вас должно выводиться Фамилия с инициалами. В этом месте добавьте закладку (под именем "fio").
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.09.2017, 10:59   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

впрочем, в MS Word 2010 мне данный пример не удалось заставить работать....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.09.2017, 11:10   #5
irina181
Пользователь
 
Регистрация: 07.09.2017
Сообщений: 44
По умолчанию

Приношу свои извинения за файл. Несколько раз перед этим переделывала и напутала. Переделала вновь, файл во вложении, но
теперь ошибка тут
Код:
Set bm = ActiveDocument.Bookmarks("bm")
. Посмотрите пожалуйста, что не так. Спасибо за быстрый ответ. У меня MS Word 2007
Вложения
Тип файла: rar Doc3.rar (12.3 Кб, 20 просмотров)
irina181 вне форума Ответить с цитированием
Старый 07.09.2017, 11:18   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Окно закладок имеет такой вид?
Изображения
Тип файла: jpg ATT.jpg (24.9 Кб, 71 просмотров)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 07.09.2017, 11:36   #7
irina181
Пользователь
 
Регистрация: 07.09.2017
Сообщений: 44
По умолчанию

Не получилось вставить тут изображения, но они в фалах. Вроде я и закладку fio вставила и полю имя присвоила bm. Что еще не так?
Изображения
Тип файла: jpg Свойства1.jpg (90.5 Кб, 156 просмотров)
Тип файла: jpg Закладка1.jpg (90.5 Кб, 129 просмотров)
irina181 вне форума Ответить с цитированием
Старый 07.09.2017, 12:23   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

На 365ProPlus даный пример не работает тоже. Ошибка при записи в FIO.
Такой код отрабатывает
Код:
Sub FIO()
    Dim bm As Bookmark
    Dim sArray() As String
    Dim sResult1 As String
    Set bm = ActiveDocument.Bookmarks("bm")
    sArray = Split(bm.Range.Text)
    sResult1 = sArray(0) & " " & Left(sArray(1), 1) & ". " & Left(sArray(2), 1) & "."
    MsgBox sResult1
    'ActiveDocument.Bookmarks("fio").Range.Text = sResult1
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 07.09.2017, 12:50   #9
irina181
Пользователь
 
Регистрация: 07.09.2017
Сообщений: 44
По умолчанию

У меня в MsgBox результат выводит, а когда комментирую MsgBox, в закладку результата нет. На строке
Код:
ActiveDocument.Bookmarks("fio").Range.Text = sResult1
макрос останавливается, но при наведении курсора на sResult1 выдает правильный результат. Что делать? Файл приложен.
Вложения
Тип файла: rar Doc3.rar (14.9 Кб, 33 просмотров)
irina181 вне форума Ответить с цитированием
Старый 07.09.2017, 14:05   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

попробуйте такой код:

Код:
Sub WriteToTextFF(writeText)
    With GetCurrentFF
        If .Type = wdFieldFormTextInput Then
            .Result = writeText
        End If
    End With
lbl_Exit:
    Exit Sub
End Sub
 
Private Function GetCurrentFF() As Word.FormField
    Dim rngFF, fldFF
    Set rngFF = Selection.Range
    rngFF.Expand wdParagraph
    For Each fldFF In rngFF.FormFields
        Set GetCurrentFF = fldFF
        Exit For
    Next fldFF
lbl_Exit:
    Exit Function
End Function


Sub FIO()
    Dim bm As Bookmark
    Dim sText As String
    Dim sArray() As String
    Dim sResult1 As String
    Dim sResult2 As String
    Set bm = ActiveDocument.Bookmarks("bm")
    sText = bm.Range.Text
    sArray = Split(sText)
    sResult1 = sArray(0) & " "
    sResult1 = sResult1 & Left(sArray(1), 1) & ". "
    sResult1 = sResult1 & Left(sArray(2), 1) & "."
    sResult2 = sArray(2) & " "
    sResult2 = sResult2 & sArray(1)
    ActiveDocument.Bookmarks("fio").Select
    WriteToTextFF (sResult1)
End Sub
взял код отсюда
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компонента для вывода большого текста. Небесный Компоненты Delphi 6 15.12.2012 12:21
Как сделать особый стиль для части текста delphyok Общие вопросы Delphi 6 26.06.2012 21:34
Какой компонент использовать для вывода текста (Delhpi) Kreadlling БД в Delphi 2 07.04.2012 22:51
Использование регулярных выражений для извлечения части строки Meta2 Microsoft Office Excel 4 04.09.2011 18:18
Использование поля со списком для отбора данных newgor Microsoft Office Access 2 14.05.2010 20:52