gpt4 book ai didi

vba - Excel VBA .xlam 中的 onLoad 功能区回调失败(未触发/工作)

转载 作者:行者123 更新时间:2023-12-02 15:29:10 25 4
gpt4 key购买 nike

我创建了一个简单的 Excel 加载项来演示以下问题:当项目保存并自动加载为 .xlam 时,功能区 onLoad 事件不会触发,但在作为 .xlsm 打开时却可以工作。我已经检查过 Excel 2007(带有相应的 xmlns)、2010 (x32) 和 2013 (x32),并且在作为 .xlam 加载时在所有情况下都会失败

该示例有一个按钮,单击时应导致切换标志,然后使功能区无效,从而通过 GetLabel 回调切换按钮的标签。

它在作为 .xlsm 文件打开时有效,但在作为 .xlam 加载项从用户 XLSTART 文件夹(未进行 Windows 注册表更改)自动加载时无效。问题似乎是 onLoad 事件不是从 .xlam 版本触发的,因此 onLoadRibbon 过程不会运行,并且没有要失效的功能区对象。

<customUI onLoad="onLoadRibbon" xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab idQ="TabInsert">
<group id="GroupTest" label="2010" insertBeforeMso="GroupInsertLinks">
<button id="ButtonTest"
getLabel="GetLabel"
onAction="ButtonClick"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

这是相应的插件 VBA 代码:

Option Explicit

Public Toggle As String
Public myRibbonUI As IRibbonUI

' Ribbon callback : runs when ribbon is loaded
Public Sub onLoadRibbon(ribbon As IRibbonUI)
' Get a reference to the ribbon
Set myRibbonUI = ribbon
Debug.Print "Ribbon Reference Set"
MsgBox "Ribbon Reference Set"
End Sub

' Ribbon callback : runs when ribbon button is clicked
Public Sub ButtonClick(control As IRibbonControl)
' Invalidate the ribbon so that the label of the button toggles between "true" and "false"
myRibbonUI.Invalidate
Debug.Print "Ribbon Invalidated"
End Sub

' Ribbon callback : runs when ribbon is invalidated
Public Sub GetLabel(control As IRibbonControl, ByRef label)
' Toggle the label for the button to indicate that the callback has worked
Toggle = IIf(Toggle = "State 1", "State 2", "State 1")
label = Toggle
Debug.Print "Ribbon Button Label Toggled"
End Sub

为什么这在 .xlam 中不起作用?

最佳答案

我能够根据您的规范成功创建并运行加载项。

首先,我使用上面的 customUI.xml 创建了 *.xlsm。注意:我使用的是 Excel 2007,因此我使用了您指出的其他 xlmns,特别是 http://schemas.microsoft.com/office/2006/01/customui。接下来,我添加了功能区处理代码,然后重新打开工作簿以验证功能区功能。我立即收到一个消息框“功能区引用集”(我默认启用了宏)。我验证了“插入”选项卡有您的额外按钮并且可以切换。

其次,我将 xlsm 保存为 Excel 加载项 *.xlam。我通过双击手动打开 xlam 文件,所有功能均如上面第一个测试中所示。

第三,我通过 Excel 文件 Menu ---> Options ---> Add-Ins 安装了加载项 - --> 管理 Excel 加载项 ---> 开始。我打开了一个不相关的 Excel 工作簿,并验证加载项是否与之前的测试相同。我使用相同的菜单卸载了加载项。

第四,我导航到 C:\Program Files(x86)\ 并验证了 Excel.exe 可执行文件的位置,然后找到了 XLSTART 文件夹。我将 xlam 放入文件夹中并打开不相关的 Excel 工作簿,并且能够验证加载项是否像以前一样运行。

我知道上面的内容并不能直接回答您的问题,但请测试这些情况,然后比较结果以找出可能出现问题的地方。

编辑:

针对您的评论,当我手动将 *.xlam 复制到 %APPDATA%\Microsoft\Excel\XLSTART 文件夹中时,它按预期工作。在我的 Windows 7 计算机上,路径计算结果为 C:\Users\username\AppData\Roaming\Microsoft\Excel\XLSTART。正如您所指出的,我在 Excel 选项中验证了这是默认的受信任位置。

关于vba - Excel VBA .xlam 中的 onLoad 功能区回调失败(未触发/工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19519879/

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