1

Тема: Взаимодействие с полем со списком

Word 2003
В форме имеется таблица перечня услуг в 2 столбца.В неё вставлены "поля со списками" и необходимо чтобы после выбора пользователем одного из значений и выхода из поля автоматически менялась другая ячейка - подставляя соответствующее значение.
То есть имея список(лыжи,коньки,санки) после выбора пользователя в соседней графе появлялась соответствующая цена (10,20,30).Заменить на текстовое поле увы не нельзя так как нужна точность в описании услуги.Подскажите как в макросе получать значения из подобных элементов управления?

2

Re: Взаимодействие с полем со списком

Какое поле со списком имеется ввиду? Элемент управления формы или элемент ActiveX?

Лучше день потерять — потом за пять минут долететь!

3

Re: Взаимодействие с полем со списком

элемент управления формы  наверное-)аналог текстового поля только с заранее определёнными вариантами.Вызываются из вкладки формы Word 2003.
Элементами ActiveX я не умею пользоваться.
прикрепила скрин

Отредактировано Инна (31.01.2011 21:28:20)

Post's attachments

1.jpg
1.jpg 50.31 Кб, 1 скачиваний с 2011-01-31 

You don't have the permssions to download the attachments of this post.

4

Re: Взаимодействие с полем со списком

Ну что ж, примерно так это делается:

Sub OnListQuit()
  Dim ff As FormField
  Dim pt As Integer
  Dim index As Long
  'Проверяем существование закладки
  If ActiveDocument.Bookmarks.Exists("ПолеСоСписком1") Then
    'Запоминаем поле в закладке
    Set ff = ActiveDocument.Bookmarks("ПолеСоСписком1").Range.FormFields(1)
    'Если поле является выпадающим списком
    If ff.Type = wdFieldFormDropDown Then
      'Если документ защищён
      If ActiveDocument.ProtectionType <> wdNoProtection Then
        pt = ActiveDocument.ProtectionType 'Запоминаем тип защиты
        ActiveDocument.Unprotect Password:="" 'Снимаем защиту. Если нужно указываем пароль
        index = ff.DropDown.Value
        ff.Range.Cells(1).Next.Range.Text = ff.DropDown.Value & " (" & _
                                            ff.DropDown.ListEntries(index).Name & ")" 'записываем значение элемента списка в соседнюю ячейку
        ActiveDocument.Protect pt, Password:="" 'Восстанавливаем защиту
        ff.DropDown.Value = index 'Восстанавливаем выбранный элемент списка, т.к. он сбрасывается после восстановления защиты
      End If
      
    End If
  End If
End Sub

В свойствах поля нужно указать макрос, который должен выполняться при выходе из поля. В защищённом документе выйти из поля можно клавишей TAB или щёлкнув мышкой в другом поле.

Post's attachments

Пример получения значения списка.docm 21.15 Кб, 36 скачиваний с 2011-02-01 

You don't have the permssions to download the attachments of this post.
Лучше день потерять — потом за пять минут долететь!

5

Re: Взаимодействие с полем со списком

Спасибо за помощь со списками всё отлично кроме маленькой неувязки -пришлось удалить код включающий\отключающий защиту формы.Так как различных полей в этой форме много и запоминать и восстанавливать все значения трудоёмко.
Если можно поясните - в Word 2003 макрос со следующим куском кода:
ActiveDocument.Bookmarks("eee").Select
Selection.TypeText sSumm
прекрасно работает ,а вот Word 2007 макрос вылетает с ошибкой(форма одна и таже)
.В новом Word изменился синтаксис VBA? и как правильно в новом?

6

Re: Взаимодействие с полем со списком

Вы хотите поменять текст закладки? Но методом, который вы предлагаете, вы уничтожите закладку. Наверное, поэтому и вылетает с ошибкой.
Изменять закладку нужно так.

Лучше день потерять — потом за пять минут долететь!

7

Re: Взаимодействие с полем со списком

Подскажите, пожалуйста, почему в Word 2003 поля со списком (элементы ActiveX) обновляются медленно - через 1-2 минуты?

Имеются 2 поля со списком и текстовое поле, связанные на обновление друг дружки, т.е. первое поле со списком задает отображение данных во втором поле, а второе задает отображение данных в текстовом поле.

8

Re: Взаимодействие с полем со списком

Нужно смотреть код, который обновляет. Скорее всего обновление не срабатывает при некоторых условиях, а вы приписываете это времени

Лучше день потерять — потом за пять минут долететь!

9

Re: Взаимодействие с полем со списком

Спасибо, viter.alex. Вы были правы - ошибка была в условиях выполнения.
Возникла другая проблема:
данные поля находятся в таблице.
таблицу задействовал как автотекст.
так вот при вставке автотекста в полях со списком ничего не выбирается.
как сделать так, чтобы выбирались данные?
или как по другому реализовать выбор данных через автотекст?

10

Re: Взаимодействие с полем со списком

Totalist, к сожалению совсем так как ты хочешь не получится, т.к. нельзя отследить вставку автотекста и соответственно заполнить списки. Но можно сделать это отдельным макросом, который будет вставлять определённый автотекст и заполнять списки.

Лучше день потерять — потом за пять минут долететь!

11

Re: Взаимодействие с полем со списком

viter.alex, подскажите пожалуйста, как будет выглядеть примерный код такого макроса

12

Re: Взаимодействие с полем со списком

Все еще нуждаюсь в решении своей задачки...