|
楼主 |
发表于 2011-6-4 21:22
|
显示全部楼层
本帖最后由 cooloaky 于 2011-8-31 09:56 编辑
功夫不负有心人。终于找到解决全局变量丢失的问题啦!
解决问题的办法是在加载ribbon的时候,通过ObjPtr函数获得ribbonUI变量的指针,然后通过物理存储该指针(可存于excel单元格、name、注册表等等地方)。在变量丢失后,通过API之copymemory方法,获得之前储存的指针来重新获取对ribbon的引用。够绝了吧?
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef destination As Any, ByRef source As Any, ByVal length As Long)
Public Rib as IRibbonUI
Sub RibX_OnLoad(ribbon As IRibbonUI)
SaveSetting "CustomUI",ThisWorkbook.name, "RibbonPointer", ObjPtr(ribbon)
Set Rib=ribbon
End Sub
Function GetRibbon(ByVal lRibbonPointer As Long) As Object
If not Rib is nothing then set getribbon=rib:exit function
Dim objRibbon As Object, lngRibPointer as long
lngRibPointer=getsetting("CustomeUI",thisworkbook.name,"RibbonPointer")
CopyMemory objRibbon, lngribpointer, LenB(lngribpointer)
Set GetRibbon = objRibbon
Set objRibbon = Nothing
End Function
|
评分
-
7
查看全部评分
-
|