I can confirm that Excel has queried the IRibbonExtensibility interface and the querying is succeeded. It seems that Excel just query the interface and hold it for later use. So, I wonder if there are some prerequisites for calling GetCustomUI? Following is part of my ATL class for reference. Many thanks!
...
struct ATL_NO_VTABLE CAddon :
CComObjectRoot,
CComCoClass<CAddon,&CLSID_CAddon>,
IRibbonExtensibility,
ICustomTaskPaneConsumer,
_IDTExtensibility2 {
DECLARE_REGISTRY(CLSID_CAddon,"ebi.comaddon.1","ebi.comaddon","office",THREADFLAGS_BOTH);
DECLARE_CLASSFACTORY();
BEGIN_COM_MAP(CAddon)
COM_INTERFACE_ENTRY(IRibbonExtensibility)
COM_INTERFACE_ENTRY(ICustomTaskPaneConsumer)
COM_INTERFACE_ENTRY(_IDTExtensibility2)
END_COM_MAP();
...
};