使用宏从Word 2007中的功能区中的下拉列表中获取所选项目

时间:2010-12-30 12:21:52

标签: ms-word word-vba ribbon

我看到以下问题解释了如何从下拉列表中获取所选项目: -

http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/d1cf7b3e-68cf-4b82-b806-a3431acde3b6/

上面的线程建议事先获得项目的哈希表,将选定的id缓存在下拉列表的onAction()中,并使用该选定的id从按钮的onAction()中的哈希表中查找项目。 / p>

但是,就我而言,我从数据库中填充了功能区XML。这个功能区XML显然有用于下拉列表的XML,我使用宏来与功能区中的下拉列表和其他控件进行交互。我不确定如何预先设置一个可以由宏使用的集合,类似于上述线程中描述的方法。

2 个答案:

答案 0 :(得分:6)

我想提出解决方案以防有人遇到同样的问题: -

这是我的功能区下拉列表的样子: -

    <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”。

onAction的函数“GetTheSelectedItemInDropDown”是获取所选项目。

以下是宏代码: -

' 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

就是这样,你现在应该能够设置并获得下拉列表。

答案 1 :(得分:1)

下一个功能脚本适用于Excel ... 经过2小时的测试和谷歌搜索,我找到了一种如何改变和获得价值的方法。

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