Получение выбранного элемента из раскрывающегося списка на ленте в Word 2007 с помощью макроса
Я вижу следующий вопрос, который объясняет, как получить выбранный элемент из выпадающего списка: -
http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/d1cf7b3e-68cf-4b82-b806-a3431acde3b6/
Вышеупомянутый поток рекомендует иметь хэш-таблицу элементов заранее, кэшировать выбранный идентификатор в onAction() раскрывающегося списка и использовать этот выбранный идентификатор, чтобы найти элемент из хеш-таблицы в onAction() кнопки.
НО, в моем случае, я заполняю ленту XML из базы данных. Этот XML ленты, очевидно, имеет XML для выпадающего списка, и я использую макросы для взаимодействия с выпадающим и другими элементами управления на ленте. Я не уверен, как получить коллекцию авансом, которая может использоваться макросом, подобным подходу, описанному в приведенном выше потоке.
2 ответа
Я хотел поставить решение на тот случай, если у кого-то возникнет такая же проблема:
Вот так выглядит моя выпадающая лента:-
<dropDown id="ddlItem"
getItemLabel="SetTheSelectedItemInDropDown"
onAction="GetTheSelectedItemInDropDown" label="Items">
<item id="Item1" label="Item1"/>
<item id="Item1" label="Item1"/>
<item id="Item1" label="Item1"/>
<item id="Item1" label="Item1"/>
<item id="Item1" label="Item1"/>
<item id="Item1" label="Item1"/>
<item id="Item1" label="Item1"/>
</dropDown>
Обратите внимание на обратные вызовы для getItemLabel и onAction. Интересно, что getItemLabel предназначен для установки элемента в раскрывающемся списке (получить по раскрывающемуся списку). Это немного сбивает с толку, но так оно и есть, и именно поэтому я назвал свой метод "SetTheSelectedItemInDropDown".
Функция "GetTheSelectedItemInDropDown" для действия onAction предназначена для получения выбранного элемента.
Теперь следующий код макроса:
' Declare a global variable to hold the selected item
Dim itemName As String
' Definition of GetTheSelectedItemInDropDown which gets the selected item of the dropdown
Sub GetTheSelectedItemInDropDown(control As IRibbonControl
, id As String, index As Integer)
If control.id = "ddlItems" Then
itemName= id
End If
End Sub
'Definition for SetTheSelectedItemInDropDown which sets the value in the dropdown from the global variable
Sub SetTheSelectedItemInDropDown(control As IRibbonControl,
index As Integer, ByRef returnedVal)
If control.id = "ddlItems" Then
returnedVal = itemName
End If
End Sub
И это все, вы должны быть в состоянии установить и получить раскрывающийся список сейчас.
Следующая функция скрипта для Excel... после 2-часового тестирования и поиска в Google я нашел способ изменить и получить значение.
1.) У вас должен быть список предметов (последовательность), которые находятся в выпадающих списках.
2.) использовать функции.onaaction и application.caller: (извините за чешский язык в следующем скрипте):
Sub test1()
Dim zabka As Byte
zabka = ActiveSheet.DropDowns((Application.Caller)).Value
'MsgBox zabka
Select Case zabka
Case 1
ActiveSheet.DropDowns((Application.Caller)).Text = "předání signální paré"
Case 2
ActiveSheet.DropDowns((Application.Caller)).Text = "předání čistopis"
Case 3
ActiveSheet.DropDowns((Application.Caller)).Text = "předání dokumentace SP"
End Select
End Sub
Sub aha()
With ActiveSheet.DropDowns.Add(Left:=Range("B" & 11 - 1).Left + 27, Top:=Range("B" & 11 - 1).Top, Width:=113, Height:=14)
.Caption = ""
.Name = "251"
.Text = "hoho"
.AddItem "předání signální paré"
.AddItem "předání čistopis"
.AddItem "předání dokumentace SP"
.OnAction = "test1"
'"'test1 " & xy & " '" <-way to call a sub and give a variable
End With
End Sub