【问题标题】:Events not getting fired/executed in combobox in Excel Ribbon事件未在 Excel 功能区的组合框中触发/执行
【发布时间】:2016-01-13 18:16:05
【问题描述】:

我在 Excel VBA 中创建了一个功能区,下面是创建组合框并添加一些项目的代码快照。组合框创建成功,但是当我选择任何项目时不会触发 onChange 事件。

ribbonXML = ribbonXML + "       <mso:group  id='StyleGruop'  label='Styles'>" & vbNewLine
ribbonXML = ribbonXML + "           <mso:button  id='btnDeleteStyle'    imageMso='PictureStylesGallery' screentip='Delete Styles' size='large' onAction='About_onAction'/>" & vbNewLine
ribbonXML = ribbonXML + "           <mso:separator  id='Separator4'/>" & vbNewLine
ribbonXML = ribbonXML + "           <mso:dropDown id='ddlStyles' label='Style:' onAction='rxddSelectSheet_Click' getItemID='rxitemddSelectSheet_getItemId' getItemCount='rxitemddSelectSheet_getItemCount' getItemLabel='rxitemddSelectSheet_getItemLabel' />" & vbNewLine
'ribbonXML = ribbonXML + "           <mso:dropDown id='ddlFreqStyles' label='Frequent Style:' getItemCount='Length1ItemCount' getItemLabel='Length1ListItem' onAction='Length1OnAction' getSelectedItemIndex='Length1ItemSelectedIndex' sizeString='centimeters' />" & vbNewLine
ribbonXML = ribbonXML + "           <mso:comboBox id='MyMonth' label='Month:' showLabel='true' onChange='cbMonth_onChange' getItemID='cbMonth_getItemID' getItemCount='cbMonth_getItemCount' getItemLabel='cbMonth_getItemLabel' >" & vbNewLine
ribbonXML = ribbonXML + "               <mso:item id='Month1' label='Jan'/>" & vbNewLine
ribbonXML = ribbonXML + "               <mso:item id='Month2' label='Feb'/>" & vbNewLine
ribbonXML = ribbonXML + "               <mso:item id='Month3' label='Mar'/>" & vbNewLine
ribbonXML = ribbonXML + "           </mso:comboBox>" & vbNewLine
ribbonXML = ribbonXML + "       </mso:group>" & vbNewLine

功能如下:

Public Sub cbMonth_getItemID(control As IRibbonControl, index As Integer, ByRef id)
     '
     ' Code for getItemID callback. Ribbon control comboBox
     '
    returnedVal = "Month" & index

End Sub

Public Sub cbMonth_getItemCount(control As IRibbonControl, ByRef returnedVal)
     '
     ' Code for getItemCount callback. Ribbon control comboBox
     '
    returnedVal = 12
End Sub

Public Sub cbMonth_getItemLabel(control As IRibbonControl, index As Integer, ByRef returnedVal)
     '
     ' Code for getItemLabel callback. Ribbon control comboBox
     '


    returnedVal = Format(DateSerial(2011, 7 + index, 1), "mmm-yyyy") 'myMonth

End Sub

Public Sub cbMonth_onChange(control As IRibbonControl, Text As String)
     '
     ' Code for onChange callback. Ribbon control comboBox
     '
    myMonth = Text
    VBA.MsgBox myMonth
End Sub

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 您可以尝试运行Application.EnableEvents = True,然后查看您的事件是否在此之后被触发?
  • 我试过了,但没有成功,onChange事件仍然没有执行。

标签: excel vba


【解决方案1】:

Hhhmmm,抱歉,我没有完全理解你所做的事情。 您无法使用 VBA 创建功能区。 VSTO 有不同的规则......但这是一个不同的问题。我假设您正在尝试 VBA 开发。

因此,如果是这种情况,在我看来,用于构建功能区并定义事件的功能区 XML 字符串中并没有定义 OnChange 事件。

所以基本上,再次假设这是 VBA,这就是我要做的......(网上有很多关于 Ribbon 构建的教程,所以我不会在这里定义确切的细节......)

  1. 将您的 XL 文件另存为 Zip 文件。
  2. 保存您的功能区 XML,其中包括 zip 存档中的 OnChanged 事件。
  3. 将事件处理程序放入 Excel 文件中。
  4. 重新保存为 XL 文件。
  5. 确保在 VBA 中获得对功能区的引用。如果您不这样做,则不会触发任何事件。
  6. 确保您具有 OnChanged 事件的回调函数。

如果您已完成第 1 至第 4 步并且 XML 正确,则您可能在第 5 步和/或第 6 步失败了。

希望对您有所帮助....

【讨论】:

    猜你喜欢
    • 2012-06-22
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多