gpt4 book ai didi

excel - 如何从即时窗口调用 Excel 自定义功能区按钮?

转载 作者:行者123 更新时间:2023-12-04 21:28:13 31 4
gpt4 key购买 nike

有程序c1() ,看起来像这样:

Sub c1(control As IRibbonControl)
Debug.Print "foo"
End Sub
从功能区成功调用它,代码正确 onAction="c1"/> 问题:
如何从即时窗口调用相同的过程(用于调试目的)?它要求一个参数,我不知道如何提供:
enter image description here

最佳答案

如果您的代码在 c1不依赖 control您可以使用

c1 nothing
在即时窗口中。

例如,您可以做什么:
Private lobjRibbon As IRibbonUI

Public Declare PtrSafe Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
ByRef Destination As Any, ByRef source As Any, ByVal length As Long)

Public Sub Ribbon_CallbackOnLoad(ByRef probjRibbon As IRibbonUI)
Set lobjRibbon = probjRibbon
Range("A1").Value = CStr(ObjPtr(lobjRibbon)) 'write the pointer to a cell to save it even if VBA stops
End Sub
Ribbon_CallbackOnLoad您将加载功能区设置为变量 lobjRibbon或保存它的指针(以防 VBA 完全结束)。
您可以使用
Function GetRibbon(ByVal lRibbonPointer As LongPtr) As Object
Dim objRibbon As Object
Call CopyMemory(objRibbon, lRibbonPointer, LenB(lRibbonPointer))
Set GetRibbon = objRibbon
Set objRibbon = Nothing
End Function
从保存的指针中取回 ribbob 对象,例如
Sub RefreshRibbon(Optional ControlID As String = vbNullString)
If lobjRibbon Is Nothing Then
Set lobjRibbon = GetRibbon(CLngPtr(Range("A1").Value))

If ControlID = vbNullString Then
lobjRibbon.Invalidate
Else
lobjRibbon.InvalidateControl ControlID
End If
Else
If ControlID = vbNullString Then
lobjRibbon.Invalidate
Else
lobjRibbon.InvalidateControl ControlID
End If
End If
End Sub

关于excel - 如何从即时窗口调用 Excel 自定义功能区按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64860056/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com