1

Тема: VBA Word: Проверка ввода в Formfield под защитой

Здравствуйте.
Хочу в защищённом документе-форме при выходе из конкретного поля узнать его имя
'(пример из справки)
If Selection.FormFields.Count >= 1 Then
   MsgBox Selection.FormFields(1).Name
End If
Я понял что под защитой это работать не может... не знаю как выкрутиться.
Может Вы знаете как узнать идентификатор отредактированного поля через макрос выхода/входа?
Когда пробовал временно снимать защиту, он (Word) тоже "отказался"...
(Задача - сделать проверку введённых данных. Ну вернее просто убрать переносы строки, если пользователь их поставил, и заменить точки на запятые.)

2

Re: VBA Word: Проверка ввода в Formfield под защитой

o5andrey пишет:

(Задача - сделать проверку введённых данных. Ну вернее просто убрать переносы строки, если пользователь их поставил, и заменить точки на запятые.)

Например, так:

Option Explicit

Sub Sample()
    With ThisDocument.FormFields.Item(Selection.Bookmarks.Item(1).Name)
        If .Type = wdFieldFormTextInput Then
            .Result = Replace(Replace(.Result, ".", ","), vbCr, "")
        End If
    End With
End Sub

Само собой, все поля должны иметь закладки (по умолчанию оные есть).

3

Re: VBA Word: Проверка ввода в Formfield под защитой

Опять "говорит" "Запрашиваемый номер семейства не существует" (5941)
Без защиты тоже не хочет...
(закладки у меня есть)

4 (изменено: alexii, 2020-02-28 21:54:45)

Re: VBA Word: Проверка ввода в Formfield под защитой

o5andrey пишет:

Опять "говорит" "Запрашиваемый номер семейства не существует" (5941)

+ открыть спойлер

https://i.imgur.com/alj12yR.png

https://i.imgur.com/vfHVIMN.png

FormFields.doc.7z

5

Re: VBA Word: Проверка ввода в Formfield под защитой

Действительно работает.
А почему в моём файле не работает? (поля "цех" и "тип датчика" в начале)
https://dropmefiles.com/eJzXK

6

Re: VBA Word: Проверка ввода в Formfield под защитой

Я понял в чём дело в моём файле.
Моя форма представляет собой три таблицы на половину листа А4. Для того чтобы она повторялась (чтобы потом разрезав получить две копии) я после такой формы вставляю ещё перекрёстную ссылку на всю форму целиком. Как только я удалил эту закладку на всё целиком - проверка заработала.
Вы не подскажете мне как сделать копию формы иным способом?

7

Re: VBA Word: Проверка ввода в Formfield под защитой

Спасибо за помощь, мне бы до такого выкрутаса не додуматься: ThisDocument.FormFields.Item(Selection.Bookmarks.Item(1).Name)
Высокоуровневое программирование - что разгадывание ребусов.

8

Re: VBA Word: Проверка ввода в Formfield под защитой

o5andrey, давайте попробуем для Вашего случая:

o5andrey пишет:

Для того чтобы она повторялась (чтобы потом разрезав получить две копии) я после такой формы вставляю ещё перекрёстную ссылку на всю форму целиком.

Заменим строку:

With ThisDocument.FormFields.Item(Selection.Bookmarks.Item(1).Name)

на:

With ThisDocument.FormFields.Item(Selection.Bookmarks.Item(Selection.Bookmarks.Count).Name)

9

Re: VBA Word: Проверка ввода в Formfield под защитой

Сердечно благодарю, работает.