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

Vba 使用宏从Word 2007功能区的下拉列表中获取选定项,vba,ms-word,ribbon,Vba,Ms Word,Ribbon,我看到以下问题,它解释了如何从下拉列表中获取所选项目:- 上面的线程建议预先设置一个项目的哈希表,将所选id缓存在下拉列表的onAction()中,并使用所选id从按钮的onAction()的哈希表中查找项目 但是,在我的例子中,我从数据库填充ribbon XML。这个功能区XML显然包含用于下拉列表的XML,我使用宏与功能区中的下拉列表和其他控件进行交互。我不确定如何预先创建一个集合,该集合可由宏使用,类似于上述线程中描述的方法。我想提出解决方案,以防有人遇到同样的问题:- 这是我的ribb

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

上面的线程建议预先设置一个项目的哈希表,将所选id缓存在下拉列表的onAction()中,并使用所选id从按钮的onAction()的哈希表中查找项目


但是,在我的例子中,我从数据库填充ribbon XML。这个功能区XML显然包含用于下拉列表的XML,我使用宏与功能区中的下拉列表和其他控件进行交互。我不确定如何预先创建一个集合,该集合可由宏使用,类似于上述线程中描述的方法。

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

这是我的ribbon下拉列表的外观:-

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

就这样,您现在应该能够设置并获取下拉列表。

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

这是我的ribbon下拉列表的外观:-

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

就这样,您现在应该能够设置并获取下拉列表。

下一个函数脚本是针对Excel的。。。 经过2个小时的测试和谷歌搜索,我找到了一种改变并获得价值的方法

1.)必须有下拉列表中的项目列表(顺序)

2.)use.onaaction和application.caller功能:(抱歉在下一个脚本中使用捷克语):

子测试1()
Dim zabka作为字节
zabka=ActiveSheet.DropDowns((Application.Caller)).Value
“MsgBox zabka
选择Case zabka
案例1
DropDowns((Application,调用方))
案例2
ActiveSheet.DropDowns((Application.Caller)).Text=“předáníčistopis”
案例3
ActiveSheet.DropDowns((Application.Caller)).Text=“předánídokumentace SP”
结束选择
端接头
副aha()
使用ActiveSheet.DropDowns.Add(左:=范围(“B”和11-1)。左+27,顶部:=范围(“B”和11-1)。顶部,宽度:=113,高度:=14)
.Caption=“”
.Name=“251”
.Text=“hoho”
AdIdTIAN p p Ed AnnIn符号An LaPiele
.AddItem“předáníčistopis”
.AddItem“předánídokumentace SP”
.OnAction=“test1”

“'test1'&xy&'”下一个函数脚本用于Excel。。。 经过2个小时的测试和谷歌搜索,我找到了一种改变并获得价值的方法

1.)必须有下拉列表中的项目列表(顺序)

2.)use.onaaction和application.caller功能:(抱歉在下一个脚本中使用捷克语):

子测试1()
Dim zabka作为字节
zabka=ActiveSheet.DropDowns((Application.Caller)).Value
“MsgBox zabka
选择Case zabka
案例1
DropDowns((Application,调用方))
案例2
ActiveSheet.DropDowns((Application.Caller)).Text=“předáníčistopis”
案例3
ActiveSheet.DropDowns((Application.Caller)).Text=“předánídokumentace SP”
结束选择
端接头
副aha()
使用ActiveSheet.DropDowns.Add(左:=范围(“B”和11-1)。左+27,顶部:=范围(“B”和11-1)。顶部,宽度:=113,高度:=14)
.Caption=“”
.Name=“251”
.Text=“hoho”
AdIdTIAN p p Ed AnnIn符号An LaPiele
.AddItem“předáníčistopis”
.AddItem“předánídokumentace SP”
.OnAction=“test1”

“'test1'&xy&'”但您在某个地方填充了功能区。。。为什么不能构造哈希表?@Belisarius,我从数据库中填充ribbonXML,然后使用C#将该ribbonXML作为word文档的一部分添加到word文档中。我无法在word文件中动态创建宏,因此我正在从另一个docm文件复制宏。即使我用C#代码构造了一个哈希表,我如何将它传递给宏,以便它可以使用它?这有意义吗?有更好的办法吗?苏。。。。为什么不能使用onAction回调来检索/存储所选项目?(在你链接到的那个线程中也有建议。)但是你在某个地方填充了你的功能区。。。为什么不能构造哈希表?@Belisarius,我从数据库中填充ribbonXML,然后使用C#将该ribbonXML作为word文档的一部分添加到word文档中。我无法在word文件中动态创建宏,因此我正在从另一个docm文件复制宏。即使我用C#代码构造了一个哈希表,我如何将它传递给宏,以便它可以使用它?这有意义吗?有更好的办法吗?苏。。。。为什么不能使用onAction回调来检索/存储所选项目?(也建议在链接到的线程中使用。)
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