【发布时间】: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事件仍然没有执行。