国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
細(xì)品RibbonX(15):回調(diào)(CallBacks)
回調(diào),即使自定義界面能夠工作的代碼。如果沒有回調(diào),那么自定義界面可能看起來(lái)漂亮,但只是一個(gè)漂亮的功能區(qū)。當(dāng)然,除內(nèi)置控件不需要自定義回調(diào)外。
下面的內(nèi)容介紹如何使用回調(diào)來(lái)提供自定義控件所需的功能。在編寫XML代碼時(shí),需要指定回調(diào),然后在Excel中編寫VBA代碼來(lái)匹配和處理回調(diào)。
回調(diào)概要
回調(diào)是自定義的用戶界面使用的子過(guò)程和函數(shù),使自定義的用戶界面能夠工作?;卣{(diào)簡(jiǎn)單地表現(xiàn)為所提供的指令的動(dòng)向。例如,當(dāng)設(shè)置某按鈕的onAction屬性并裝載用戶界面時(shí),一旦單擊該按鈕,就產(chǎn)生回調(diào),即在屬性中指定的操作。
如果沒有找到指定的操作,那么回調(diào)將失敗,因?yàn)榇a中發(fā)生了例外,即在屬性中指定的回調(diào)在VBA中不存在,因此失敗了。
自定義用戶界面一裝載就會(huì)調(diào)用VBA工程,搜尋指定的函數(shù)或過(guò)程。如果找到,則將其值傳回到用戶界面。如果沒有找到指定的函數(shù)或過(guò)程,那么將產(chǎn)生錯(cuò)誤的結(jié)果。
有兩種主要的方式來(lái)創(chuàng)建回調(diào):
n         直接在VBE的標(biāo)準(zhǔn)模塊中輸入過(guò)程或函數(shù)
n         使用工具生成過(guò)程,例如Office 2007 CustomUI Editor
使用諸如Office 2007 CustomUI Editor這類工具的主要優(yōu)勢(shì)是能夠掃視XML代碼并返回回調(diào)簽名,也稱作subprocedure stub,XML代碼中每個(gè)屬性都有一個(gè)需要處理的回調(diào)。接受回調(diào)作為值的屬性包括onAction、getVisible和getImage。
除了節(jié)省時(shí)間外,使用CustomUI Editor還能避免由于手工編寫回調(diào)簽名而導(dǎo)致的拼寫錯(cuò)誤。上述每個(gè)屬性都會(huì)產(chǎn)生一個(gè)不同的回調(diào)簽名,必須按順序使用代碼處理,使用戶界面有合適的功能。
此外,當(dāng)工程裝載時(shí)需要訪問(wèn)某些回調(diào)并運(yùn)行,這意味著如果回調(diào)處理(即響應(yīng)回調(diào)的VBA代碼)在該工程中不存在,將產(chǎn)生錯(cuò)誤消息。當(dāng)然,下面的內(nèi)容也會(huì)介紹如何緩解這類錯(cuò)誤,甚至如何避免錯(cuò)誤。
為動(dòng)態(tài)回調(diào)建立文件
為了使自定義控件工作,文件必須啟用宏,否則不能夠添加或運(yùn)行VBA代碼。
1、捕獲IRibbonUI對(duì)象
IRibbonUI對(duì)象引用功能區(qū)用戶界面,用于控制事物如何響應(yīng)。
在VBA中使用的關(guān)鍵之一是使整個(gè)Ribbon對(duì)象無(wú)效(因而能夠改變功能區(qū)的某項(xiàng)特征)或者使功能區(qū)中指定的控件無(wú)效(因而能夠改變?cè)摽丶哪稠?xiàng)特征)。
(1)調(diào)整XML以包括onLoad
為了使用IRibbonUI對(duì)象,需要在VBA中對(duì)其設(shè)置。首先,需要對(duì)UI的onLoad屬性指定值,這能通過(guò)為onLoad屬性指定回調(diào)來(lái)實(shí)現(xiàn):
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“ onLoad=“rxIRibbonUI_onLoad“>
因?yàn)閛nLoad屬性的值是一個(gè)回調(diào),所以需要在VBA代碼中對(duì)其進(jìn)行處理。接著,能夠在工程中使用IRibbonUI對(duì)象。
(2)創(chuàng)建VBA代碼處理onLoad事件
可能會(huì)注意到,前面將onLoad稱作為屬性,但現(xiàn)在將其稱為事件。這是因?yàn)樵赬ML文件中,能為許多屬性定義值,例如onAction、getLabel和onLoad。一旦為某屬性賦值,如果能以某種方式觸發(fā),將導(dǎo)致事件發(fā)生。這就是屬性和事件的區(qū)別。
因?yàn)镮RibbonUI對(duì)象用于整個(gè)應(yīng)用程序,所以需要在標(biāo)準(zhǔn)模塊的全局聲明部分對(duì)其聲明,如下面的代碼所示。
‘全局的ribbon對(duì)象
Dim grxIRibbonUI As IRibbonUI
這里使用標(biāo)準(zhǔn)的格式grxIRibbonUI引用IRibbonUI對(duì)象,接著添加回調(diào)來(lái)設(shè)置該對(duì)象:
Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
Set grxIRibbonUI = ribbon
End Sub
設(shè)置為全局對(duì)象之后,該對(duì)象可用于整個(gè)工程。然而,Ribbon對(duì)象對(duì)于修改是非常敏感的。這意味著任何時(shí)候修改代碼,該對(duì)象實(shí)例將丟失并且任何需要Ribbon對(duì)象的操作都將失敗。因此,無(wú)論何時(shí)作出修改,都需要保存、關(guān)閉并重新打開工程。
生成第一個(gè)回調(diào)
知道需要獲得回調(diào)簽名后,還需要知道如何使用回調(diào)簽名。例如,對(duì)于切換按鈕(toggleButton)有下列簽名:
Sub rxtgl_click(control as IRibbonControl,pressed as boolean)
一個(gè)普通按鈕的簽名如下:
Sub rxbtn_click(control as IRibbonControl)
1、從頭開始編寫回調(diào)
如果知道了回調(diào)簽名,則不必使用標(biāo)準(zhǔn)的形式聲明參數(shù)。例如,有一個(gè)使用下列XML的切換按鈕:
<toggleButton
id=”rxtgl”
label=”Toggle”
size=”large”
onAction=”rxtgl_click”
imageMso=”FormatPainter”/>
編寫rxtgl_click回調(diào)如下:
Sub rxtgl_click(rxctl As IRibbonControl,toggled As Boolean)
If toggled Then
MsgBox “我已切換 …我的ID是 “ & rxctl.ID,vbInformation
End If
End Sub
注意到回調(diào)的參數(shù)名與上面介紹的標(biāo)準(zhǔn)的參數(shù)名不一樣,但是單擊切換按鈕時(shí)仍觸發(fā)該回調(diào),像平常一樣傳遞參數(shù),因此簽名中的修改不會(huì)導(dǎo)致過(guò)程失敗,只要使用了正確類型的正確參數(shù)。
也能修改onLoad回調(diào)簽名來(lái)滿足需要,如下所示:
Sub rxIRibbonUI_onLoad(MyRibbon As IRibbonUI)
Set grxIRibbonUI=MyRibbon
End Sub
然而,如果使用標(biāo)準(zhǔn)的簽名及其參數(shù)名稱,那么其他人將更容易理解代碼。下面列出了一些回調(diào)簽名。
屬性onLoad,回調(diào)簽名(ribbon as IRibbonUI);
屬性getLabel,getPressed,getEnabled,getImage,getScreentip,getVisible,等,回調(diào)簽名(control as IRibbonControl,ByRef returnedVal);
屬性onAction(切換按鈕),回調(diào)簽名(control as IRibbonControl,pressed as Boolean);
屬性onAction(按鈕),回調(diào)簽名(control as IRibbonControl)。
2、使用Office CustomUI Editor生成回調(diào)
一種很容易生成回調(diào)的方法是使用CustomUI Editor。這個(gè)工具將所有的返回回調(diào)的屬性搜尋在一起,然后生成需要的回調(diào)。因此,無(wú)須追蹤XML中所有的回調(diào)。對(duì)于大段的XML代碼來(lái)說(shuō),這是無(wú)價(jià)的。
在CustomUI Editor中(以Excel為例),可以使用下列步驟自動(dòng)生成必需的回調(diào):
步驟1 使用CustomUI Editor打開包含XML代碼的Excel。
步驟2 單擊“Generate Callbacks”按鈕。
步驟3 出現(xiàn)一個(gè)新的Callbacks選項(xiàng)卡。復(fù)制產(chǎn)生的代碼并粘貼到VBA工程中。
注意,確保驗(yàn)證代碼。
3、理解文件打開時(shí)事件的順序
在工程中添加了回調(diào)后,該文檔打開時(shí)將調(diào)用某些過(guò)程,具體調(diào)用的過(guò)程取決于工程打開時(shí)定制是否獲得了焦點(diǎn)。注意,某些過(guò)程僅當(dāng)包含定制的選項(xiàng)卡獲取焦點(diǎn)時(shí)才調(diào)用,而其它過(guò)程當(dāng)鼠標(biāo)移動(dòng)到控件之上時(shí)調(diào)用。
理解過(guò)程調(diào)用的順序是復(fù)雜的,因?yàn)檎{(diào)用順序受許多可變因素影響。為了幫助預(yù)測(cè)典型的事件順序,下表列出了功能區(qū)選項(xiàng)卡的事件及相應(yīng)的順序。
表:當(dāng)打開工程后選項(xiàng)卡獲取焦點(diǎn)時(shí)的事件順序
事件
選項(xiàng)卡獲取焦點(diǎn)
選項(xiàng)卡有焦點(diǎn)
按下ALT鍵
鼠標(biāo)在其上方
onLoad
最頂級(jí)的事件,當(dāng)裝載UI時(shí)發(fā)生
getVisible
1
1
N/A
N/A
getLabel
2
3
N/A
N/A
getImage
3
4
N/A
N/A
getEnabled
4
2
N/A
N/A
getKeytip
N/A
N/A
1
N/A
getScreentip
N/A
N/A
N/A
1
getSupertip
N/A
N/A
N/A
2
上表僅列出了可以使用的通用屬性的一些示例,然而順序可能受其它引入的屬性的影響,例如getDescription、getTitle,等等。雖然如此,打算在性能方面以最好的方式解決用戶界面問(wèn)題時(shí),上表仍然可以作為一個(gè)通用的向?qū)А?div style="height:15px;">
4、能夠有具有相同名稱但不同簽名的兩個(gè)回調(diào)嗎?
VBA不允許在相同工程中使用相同名稱不同簽名的兩個(gè)回調(diào)。然而,如果回調(diào)在不同的工程中,則相同的回調(diào)名稱能夠有不同的簽名。因此,如果同時(shí)打開一個(gè)以上的Excel文檔,那么可能發(fā)現(xiàn)回調(diào)返回不可預(yù)料的結(jié)果。因?yàn)槿绻鄠€(gè)操作(簽名)與一個(gè)回調(diào)名稱相聯(lián)系,那么將運(yùn)行當(dāng)前文檔的回調(diào)。
假設(shè)打開一個(gè)安裝了兩個(gè)加載項(xiàng)的Excel工作簿,三個(gè)項(xiàng)目都有一個(gè)帶有稱為rxbtnnsQaShared的控件的用戶界面。當(dāng)單擊用戶界面中該控件時(shí),所期望的是添加一個(gè)新工作簿,然而將出現(xiàn)一個(gè)消息框。檢查后,發(fā)現(xiàn)為所有三個(gè)按鈕都使用了相同的回調(diào)。此時(shí),可以使用斷點(diǎn)調(diào)試,看看單擊操作調(diào)用了哪個(gè)回調(diào)。
上述表明,只要在不同工程中,雖然允許使用帶有不同簽名相同名稱的回調(diào),但這不是一個(gè)好主意。
調(diào)用位于不同工作簿中的過(guò)程
與上面所講的情況相似,如果XML代碼運(yùn)行位于不同工作簿中的VBA,也會(huì)碰到類似的問(wèn)題。
假設(shè)有兩個(gè)工作簿:Book.xlsm和Book2.xlsm,希望在第一個(gè)工作簿中添加一個(gè)按鈕,運(yùn)行第二個(gè)工作簿中的過(guò)程。使用下面的XML代碼創(chuàng)建用戶界面:
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
<ribbon>
<tabs>
<tab id=“rxtabDemo“
label=“My Custom Tab“
insertBeforeMso=“TabHome“>
<group id=“rxgrpDemo“
label=“My Demo Group“>
<button id=“rxbtnDemo“
label=“My Demo Button“
size=“large“
onAction=“Book2.xlsm!rxbtnDemo_click“
imageMso=“FileStartWorkflow“/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
在Book2.xlsm的標(biāo)準(zhǔn)模塊中,放置下列代碼:
Sub rxbtnDemo_click(control As IRibbonControl)
MsgBox “您調(diào)用了位于:” & ThisWorkbook.Name & “中的過(guò)程.”
End Sub
注意,必須要打開工作簿才能運(yùn)行。如果希望onAction屬性指向已裝載的加載項(xiàng)而不是工作簿,那么簡(jiǎn)單地使用[add-in name].xlam在onAction代碼名稱前加上前綴,例如:
onAction=”myAddIn.xlam!rxbtnDemo_click”
然后,在加載項(xiàng)的標(biāo)準(zhǔn)模塊中放置回調(diào)VBA代碼:
Book3.xlam!rxbtnDemo_click
此時(shí),必須加上前綴xlam!。注意,如果在用戶界面的onAction屬性下指定的過(guò)程中xlsm和xlam有相同的名稱,那么該事件會(huì)運(yùn)行包含在活動(dòng)工作簿中的代碼。你可能已注意到,在前面的介紹的內(nèi)容中我們必須移除xlsm!,但使用加載項(xiàng)時(shí)必須有xlam!。
組織回調(diào)
隨著功能區(qū)自定義代碼技術(shù)的不斷熟練,你將會(huì)采取不同的方式來(lái)組織回調(diào),可以有單個(gè)的回調(diào)處理,或者有全局的回調(diào)處理,一次處理多個(gè)控件。
1、單個(gè)的回調(diào)處理
編寫XML代碼時(shí),可以指定返回回調(diào)的多種屬性,例如onAction、getLabel、getVisible、getEnabled,等等。這些屬性的每一個(gè)都必須處理。下面以Excel為例,通過(guò)生成組中的3個(gè)按鈕來(lái)演示這個(gè)過(guò)程。
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
<ribbon>
<tabs>
<tab id=“rxtabDemo“
label=“My Custom Tab“
insertBeforeMso=“TabHome“>
<group id=“rxgrpDemo“
label=“My Demo Group“>
<button id=“rxbtnPaste“
label=“My Paste Button“
size=“normal“
onAction=“rxbtnPaste_click“
imageMso=“Paste“
tag=“Custom Paste Button“/>
<button id=“rxbtnCopy“
label=“My Copy Button“
size=“normal“
onAction=“rxbtnCopy_click“
imageMso=“Copy“
tag=“Custom Copy Button“/>
<button id=“rxbtnCut“
label=“My Cut Button“
size=“normal“
onAction=“rxbtnCut_click“
imageMso=“Cut“
tag=“Custom Cut Button“/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
每個(gè)按鈕都有其onAction屬性,因此如果企圖對(duì)按鈕添加功能,則必須處理每個(gè)屬性:
Sub rxbtnPaste_click(control As IRibbonControl)
MsgBox “您單擊了” & control.Tag, vbInformation
End Sub
Sub rxbtnCopy_click(control As IRibbonControl)
MsgBox “您單擊了” & control.Tag, vbInformation
End Sub
Sub rxbtnCut_click(control As IRibbonControl)
MsgBox “您單擊了” & control.Tag, vbInformation
End Sub
單獨(dú)處理每個(gè)屬性非常繁鎖且難以維護(hù),而一種可供選擇的方法是一次處理多個(gè)屬性。
2、使用全局回調(diào)處理
(1)全局回調(diào)處理能夠用于一次處理幾個(gè)控件。如果以標(biāo)準(zhǔn)化方式命名全局處理,那么效果將更好,因?yàn)榭梢粤⒓磸膯蝹€(gè)控件中區(qū)分全局控件。
(2)使用全局回調(diào)的原因是因?yàn)槟承┲噶羁赡苤貜?fù),甚至當(dāng)指令不重復(fù)時(shí),對(duì)某種控件為某項(xiàng)操作共享相同的屬性仍有好處,例如onAction屬性。此外,如果操作相同,那么過(guò)程能組合在單個(gè)的回調(diào)處理中。
(3)能利用這種優(yōu)勢(shì)減少要處理的回調(diào)數(shù),即通過(guò)通用的回調(diào)處理控件本身。
(4)例如,下列對(duì)象:tab,group,button,都共享一個(gè)通用的屬性getLabel。如前所述,當(dāng)需要對(duì)每個(gè)控件動(dòng)態(tài)應(yīng)用值時(shí),不需要在XML代碼中為每個(gè)控件編寫getLabel回調(diào)。相反,可以在VBA過(guò)程中通過(guò)共享任務(wù)在單個(gè)處理內(nèi)將它們放在一起,而且因?yàn)槭腔卣{(diào),所以不需要遍歷XML中指定的控件,將自動(dòng)遍歷控件直至所有控件有所需的值。
(5)仍以上節(jié)中的示例,在前面的XML代碼中修改每個(gè)按鈕的onAction屬性如下:
onAction=”rxshared_click”
將產(chǎn)生單個(gè)的回調(diào),用于處理具有onAction屬性和共享該簽名的任何控件。
接著,在VBA中為每個(gè)按鈕處理該回調(diào),使用下面的一小段代碼:
Sub rxshared_click(control As IRibbonControl)
MsgBox “您單擊了” & control.Tag, vbInformation
End Sub
也能使用Select Case語(yǔ)句分開每個(gè)按鈕并賦予其特定的代碼:
Sub rxshared_click(control As IRibbonControl)
Select Case control.ID
Case “rxbtnPaste”
‘為rxbtnPaste按鈕的代碼
Case “rxbtnCopy”
‘為rxbtnCopy按鈕的代碼
Case “rxbtnCut”
‘為rxbtnCut按鈕的代碼
End Select
End Sub
因此,無(wú)需為用戶界面中的每個(gè)自定義控件處理回調(diào),可以使用全局的(共享的)回調(diào),然后處理VBA過(guò)程里的每個(gè)控件。這里,使用了Select Case語(yǔ)句,因?yàn)樵撜Z(yǔ)句簡(jiǎn)潔且易于理解。也可以使用If…Then…ElseIf…End If語(yǔ)句。
使用戶界面組件無(wú)效
Ribbon的一個(gè)重要方面是使Ribbon無(wú)效或指定的控件無(wú)效。
某些操作僅當(dāng)使整個(gè)Ribbon無(wú)效才能執(zhí)行,而另一些操作只需通過(guò)使指定控件無(wú)效來(lái)完成。
1、無(wú)效能處理什么?為什么需要?
IRibbonUI對(duì)象包含兩個(gè)方法:Invalidate和InvalidateControl。
表:IRibbonUI對(duì)象模型
方法
用途
Invalidate()
為更新而標(biāo)記整個(gè)功能區(qū)(順序標(biāo)記其中的每個(gè)控件)
InvalidateControl(strControlID)
為更新而標(biāo)記特定的控件,被更新的控件作為字符串被傳遞到方法的參數(shù)中。(strControlID)
理解Invalidate方法的關(guān)鍵是該方法使用戶界面中每個(gè)控件都無(wú)效,這意味著強(qiáng)制調(diào)用在用戶界面中定義的所有回調(diào)。此外,也將導(dǎo)致更新所有控件,而無(wú)論其是否有回調(diào)。當(dāng)使功能區(qū)無(wú)效時(shí),在功能區(qū)中作出調(diào)用,并且在用戶界面中指定的每個(gè)過(guò)程都將運(yùn)行。
注意,“刷新”指在打開工程時(shí)簡(jiǎn)單地更新在用戶界面中已經(jīng)裝載的控件,而“重新裝載”指卸載并重新裝載用戶界面中的整個(gè)項(xiàng)目。
除非確實(shí)需要作用整個(gè)功能區(qū),更好的選擇是在執(zhí)行期間的指定時(shí)刻使單個(gè)控件無(wú)效,即僅使必需的控件無(wú)效。
要使整個(gè)功能區(qū)或功能區(qū)中指定的控件無(wú)效,需要設(shè)置代表IRibbonUI對(duì)象的全局變量,可通過(guò)在onLoad屬性中指定回調(diào)來(lái)實(shí)現(xiàn):
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“ onLoad=“rxIRibbonUI_onLoad“>
</customUI>
接下來(lái),需要編寫VBA代碼處理在onLoad屬性中指定的回調(diào):
Public grxIRibbonUI As IRibbonUI
Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
Set grxIRibbonUI=ribbon
End Sub
注意,代表IRibbonUI對(duì)象的變量在標(biāo)準(zhǔn)模塊的全局聲明區(qū)中聲明,以便于能被工程的其他部分訪問(wèn)。
2、使整個(gè)Ribbon無(wú)效
步驟1 創(chuàng)建一個(gè)新的Excel文件,并保存為啟用宏的工作簿。
步驟2 使用CustomUI Editor,在工作簿文件中添加XML代碼:
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“ onLoad=“rxIRibbonUI_onLoad“>
<ribbon>
<tabs>
<tab id=“rxtabDemo“
label=“My Custom Tab“
insertBeforeMso=“TabHome“>
<group id=“rxgrpDemo“
label=“My Demo Group“>
<button id=“rxbtn“
getLabel=“rxshared_getLabel“
size=“normal“
onAction=“rxshared_click“
imageMso=“FillRight“/>
<button id=“rxbtn2“
getLabel=“rxshared_getLabel“
size=“normal“
onAction=“rxshared_click“
imageMso=“FillRight“/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
步驟3 保存并驗(yàn)證代碼。
步驟4 單擊“Generate Callbacks”按鈕生成回調(diào)。
步驟5 復(fù)制回調(diào)代碼并關(guān)閉該文件。
步驟6 在Excel中打開該工作簿,添加一個(gè)標(biāo)準(zhǔn)模塊。(不要擔(dān)心出現(xiàn)的錯(cuò)誤消息)
步驟7 粘貼代碼到該模塊中,并補(bǔ)充代碼。
Public grxIRibbonUI As IRibbonUI
Public glngCount1 As Long
Public glngCount2 As Long
Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
Set grxIRibbonUI = ribbon
End Sub
Sub rxshared_click(control As IRibbonControl)
grxIRibbonUI.Invalidate
End Sub
Sub rxshared_getLabel(control As IRibbonControl, ByRef returnedVal)
Select Case control.ID
Case “rxbtn”
returnedVal = “功能區(qū)無(wú)效: ” & glngCount1 & “次.”
glngCount1 = glngCount1 + 1
Case “rxbtn2″
returnedVal = “功能區(qū)無(wú)效: ” & glngCount2 & “次.”
glngCount2 = glngCount2 + 1
End Select
End Sub
按照代碼作用的順序放置代碼,然后保存工作簿,關(guān)閉工作簿,接著重新打開該工作簿。
注意,此時(shí)單擊任一按鈕,兩個(gè)標(biāo)簽均更新,如下圖1所示。因?yàn)閱螕舭粹o時(shí)代碼使整個(gè)功能區(qū)無(wú)效,所以兩個(gè)控件都無(wú)效,共享的getLabel過(guò)程為第一個(gè)按鈕調(diào)用一次,又為第二個(gè)按鈕所調(diào)用。
圖1:使IRibbonUI對(duì)象無(wú)效導(dǎo)致其中的所有控件都被驗(yàn)證
3、使單個(gè)控件無(wú)效
仍然以上面的例子來(lái)介紹,現(xiàn)在僅使觸發(fā)click事件的按鈕無(wú)效。將共享的click事件和共享的getLabel事件修改如下:
Public grxIRibbonUI As IRibbonUI
Public glngCount1 As Long
Public glngCount2 As Long
Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
Set grxIRibbonUI = ribbon
End Sub
Sub rxshared_click(control As IRibbonControl)
Select Case control.ID
Case “rxbtn”
glngCount1 = glngCount1 + 1
Case “rxbtn2″
glngCount2 = glngCount2 + 1
End Select
grxIRibbonUI.InvalidateControl (control.ID)
End Sub
Sub rxshared_getLabel(control As IRibbonControl, ByRef returnedVal)
Select Case control.ID
Case “rxbtn”
returnedVal = “功能區(qū)無(wú)效: ” & glngCount1 & “次.”
glngCount1 = glngCount1 + 1
Case “rxbtn2″
returnedVal = “功能區(qū)無(wú)效: ” & glngCount2 & “次.”
glngCount2 = glngCount2 + 1
End Select
End Sub
此時(shí),只會(huì)使單擊的控件無(wú)效并統(tǒng)計(jì)其數(shù)量,如下圖2所示。
圖2:僅使單個(gè)的控件對(duì)象無(wú)效
綜上,本文主要介紹了自定義功能區(qū)的一個(gè)重要的內(nèi)容,即通過(guò)回調(diào)添加功能。講述了如何捕獲和使用Ribbon對(duì)象以及如何通過(guò)單獨(dú)的或共享的回調(diào)來(lái)組織過(guò)程。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VBA專題10-14:使用VBA操控Excel界面之在功能區(qū)中添加自定義庫(kù)控件
【新提醒】Excel excle2007選項(xiàng)卡制作教程(4步搞定菜單)附[編碼生成器工具]分享
vba|綜合應(yīng)用程序設(shè)計(jì)(從設(shè)計(jì)功能區(qū)到相關(guān)控件代碼)
Excel 人力資源系統(tǒng)1.0
20.2.4 控件回調(diào)函數(shù)
一個(gè)控件只能執(zhí)行一個(gè)命令?如何讓一個(gè)控件交替執(zhí)行多個(gè)命令
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服