2016-01-13 40 views
0

我在Excel VBA中創建了一個功能區,下面是創建組合框並添加一些項目的代碼的快照。組合框被成功創建,但是當我選擇任何項目時,onChange事件不會被觸發。事件沒有在Excel中的組合框中被觸發/執行功能區

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 

任何幫助,將不勝感激。提前致謝。

+0

你可以嘗試運行'Application.EnableEvents = True',然後看看你的事件是否在此之後被解僱? – Tom

+0

我試過但徒勞無功,onChange事件仍然沒有執行。 – Daryl

回答

0

Hhhmmm,抱歉,但我不完全理解你所做的。 您無法使用VBA創建功能區。 VSTO有不同的規則......但這是一個不同的問題。我假設你正在嘗試VBA開發。

所以,如果是這樣的話,它看起來在功能區XML字符串中,用於構建功能區,並定義事件沒有定義OnChange事件。

所以基本上,再次假設這是VBA,這是我會做....(網上有很多關於功能區的教程,所以我不會在這裏定義確切的細節..)

  1. 將您的XL文件保存爲Zip文件。
  2. 保存您的功能區XML,其中包含Zip歸檔中的OnChanged事件。
  3. 將您的事件處理程序放入Excel文件中。
  4. 重新保存爲XL文件。
  5. 確保您在VBA中獲得對功能區的引用。如果你不這樣做,沒有事件會發生。
  6. 確保您具有OnChanged事件的回調函數。

如果你已經做了步驟1至4和XML是正確的,你可能有步驟5和/或6

希望幫助失敗....