2

VBA 中有没有办法将列表框添加到工具栏(添加功能区)?我希望能够让用户在列表框中选择多个值/标准,而不是在下拉/组合框菜单中选择一个值。

下面的代码只添加了一个下拉菜单

Sub addSelectControls()
    Dim newBar As Office.CommandBar
    Set newBar = CommandBars.Add(Name:="testing CommandBar", temporary:=True)
    Dim newCombo As Office.CommandBarComboBox
    Set newCombo = newBar.Controls.Add(Type:=msoControlDropdown, temporary:=True)
    With newCombo

        .AddItem "Blocks"
        .AddItem "Hardware"
        .AddItem "Aircraft Hardware"
        .AddItem "Vehical Hardware"
        .AddItem "Machinery"
        .AddItem "Wood Products"
        .AddItem "Miscellaneous Products"
        .AddItem "Miscellaneous Metal"
        .AddItem "Precast Metal"
        .AddItem "Forged Metal"
        .AddItem "Structural Steel"
        .AddItem "Fabricated Steel"
        .AddItem "Prebent Steel"
        .AddItem "Stock Steel"
        .ListIndex = 13
        .Width = 200
        .Caption = "Category"
        .Style = msoComboLabel
        .BeginGroup = True
        .OnAction = "Category_Select"

    End With
    'ctlComboBoxHandler.SyncBox newCombo
    newBar.Visible = True
End Sub

请指教。如果您知道更好的方法来做到这一点,那也太好了!

4

2 回答 2

0

我最近使用的另一种选择是只有一个功能区按钮,它会弹出一个带有多选列表框的用户表单。采用这种方法的原因是我的用户必须选择 8-10 个选项,并且每次打开它来选择都很痛苦。

这种方法的好处是选择表单只能通过该按钮使用,并且该表单可以在应用程序代码中访问......所以即使没有显示选择也总是可以检查的。重新打开它仍然有以前的选择。

我将表单放置在功能区下方区域的顶部,并将以下代码添加到表单中:

Public Sub reposition(ByVal aintX As Integer, ByVal aintY As Integer)
    Me.StartUpPosition = 0
    Me.Left = aintX
    Me.Top = aintY
End Sub

但是,根据按钮的位置设置要使用的实际 X 和 Y 是我还没有弄清楚该怎么做的事情,因为似乎没有任何方法可以从功能区获取该信息。我通过抓取我的功能区的屏幕截图来作弊,然后只计算像素(好的,我将屏幕截图粘贴到 Paint 中,然后画了一个框来获取计数!)然后从中减去表单的宽度,然后添加窗口左侧的屏幕偏移等。它足以满足我的用户。

于 2018-01-14T05:37:06.960 回答
0

古老的问题,但有一种方法可以在 Office 功能区中获得多选下拉菜单。不过不要太花哨,因为每次选择后,您都必须重新打开下拉菜单。 示例下拉列表

您需要在其中使用DynamicMenuwith Checkboxes

这是我在自定义功能区 UI 中使用的 XML:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
  <ribbon>
    <tabs>
      <tab id="mso_c1.FD142A8" label="Diaverum" insertBeforeQ="TabHome">
        <group id="mso_c2.FD142A8" label="Szurés" imageMso="FilterByResource">
          <dynamicMenu id="FilterMenu" label="Beosztás szerint" getContent="GetMenuContent_FilterMenu" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

回调使用GetMenuContent_FilterMenu复选框填充动态菜单。它基本上创建了一个 XML 字符串,其中包含创建复选框的命令。我Table在 Excel 中使用 a 来获取值,但您可以更改它。回调代码:

Sub GetMenuContent_Beosztas(control As IRibbonControl, ByRef returnedVal)

Dim CheckboxesXML As String
Dim myCell As Range
Dim i As Integer

For Each myCell In Range("tblBeosztas").Cells
  CheckboxesXML = CheckboxesXML & "<checkBox id=""chk_" & i & """ label=""" & myCell.Value & """ />" & vbNewLine
  i = i + 1
Next myCell

returnedVal = "<menu xmlns=""http://schemas.microsoft.com/office/2006/01/customui"">" & vbNewLine & _
    CheckboxesXML & _
    "</menu>"

End Sub

生成的 XML 如下所示:

<menu xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<checkBox id="chk_0" label="Nővér" />
<checkBox id="chk_1" label="Dializáló asszisztens" />
<checkBox id="chk_2" label="Technikus" />
<checkBox id="chk_4" label="Orvos igazgató" /> 
</menu>
于 2017-07-07T16:08:53.240 回答