首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

宏在我调用它时工作正常,但在作为按钮的.OnAction时就不工作了

这个问题涉及到宏在不同上下文中的执行情况。在我理解中,这个问题可能是由于宏的上下文环境不同导致的。

当你直接调用宏时,它可能在当前的执行环境中正常工作。但是,当宏作为按钮的.OnAction事件处理程序时,它可能会在按钮的上下文环境中执行,这可能与宏的期望环境不一致。

为了解决这个问题,你可以尝试以下几个步骤:

  1. 确保宏的代码逻辑正确:首先,检查宏的代码是否正确,是否存在语法错误或逻辑错误。确保宏在任何上下文中都能正常工作。
  2. 确认按钮的.OnAction事件处理程序正确设置:确保按钮的.OnAction事件处理程序正确设置为调用宏的名称。检查按钮的属性设置,确保它与宏的名称匹配。
  3. 确认宏的可见性:如果宏是在工作簿或模块中定义的,确保它对按钮所在的工作簿或模块可见。如果宏是在特定工作簿或模块中定义的,而按钮位于另一个工作簿或模块中,它可能无法访问宏。
  4. 检查按钮的其他属性设置:检查按钮的其他属性设置,例如Enabled(启用)、Visible(可见)等,确保它们不会影响按钮的.OnAction事件处理程序的执行。

如果以上步骤都没有解决问题,可能需要进一步调试和排查。可以尝试在宏中添加一些调试输出,例如使用MsgBox函数输出一些调试信息,以便确定宏在按钮上下文中是否被正确执行。

总结起来,这个问题可能是由于宏的上下文环境不同导致的。确保宏的代码正确,按钮的.OnAction事件处理程序正确设置,宏对按钮所在的工作簿或模块可见,并检查按钮的其他属性设置。如果问题仍然存在,可能需要进一步调试和排查。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

VBA专题10-9:使用VBA操控Excel界面之在功能区中添加自定义按钮控件

添加按钮 如果要在内置功能区选项卡中添加两个按钮单击这些按钮时会调用VBA过程,那么执行下面的步骤: 1. 创建新工作簿并保存为启用工作簿。 2....关闭该工作簿,然后CustomUI Editor中打开该工作簿。 3. CustomUI Editor中,单击“插入”并选择“Office 2007 Custom UI Part”。 4....如果要使用自已设计图像,只需使用image属性替换掉imageMso属性。 onAction属性是一个回属性。该属性值是单击按钮要执行VBA过程名称。 5....由于XML代码中有两个回属性(每个按钮一个),因此生成两个回: 'Callback for BtnInsert0onAction SubInsert0(control As IRibbonControl...之后,要将其粘贴到工作簿VBA模块中。 7. 保存并关闭该文件。 8. Excel中打开该工作簿文件。 9. 按Alt+F11键打开VBE。 10.

5K30

VBA专题10-11:使用VBA操控Excel界面之在功能区中添加自定义拆分按钮控件

)中步骤相同,新建一个启用工作簿并保存,关闭该工作簿,然后CustomUI Editor中打开该工作簿,输入下面的XML代码: ?...重新打开该工作簿后,“Custom”选项卡中显示含拆分按钮组,如图1所示。 ?...图1 VBE中添加回代码: 'Callbackfor Btn1 onAction Sub Macro1(control As IRibbonControl) MsgBox control.Tag..." End Sub 单击自定义拆分按钮,会根据按钮不同显示不同消息框,如图2所示为单击按钮Button1显示消息框。...注意,由于我们将Button1和menuButton1定义了相同tag属性,因此单击拆分按钮单个按钮和菜单中第一个按钮都会弹出如图2所示消息框。 ?

1.8K10
  • VBA通用代码:Excel中创建弹出菜单

    由于2007 MicrosoftOffice系统中,Microsoft用功能区UI取代了命令栏菜单结构,这造成了创建在不同版本MicrosoftOffice中工作菜单技术会有所不同。...本文使用一种有效技术创建在所有Excel版本中都可使用弹出菜单。 注意,内置或自定义上下文菜单不同于弹出菜单一种方式是,上下文菜单仅在右键单击鼠标显示,而弹出菜单可以需要显示。...Set MenuItem =.Controls.Add(Type:=msoControlPopup) With MenuItem .Caption = "特定菜单...End Sub 回到Excel界面,按Alt+F8键,调出“”对话框,选择“CreateDisplayPopUpMenu”,单击“选项”按钮选项”对话框中“快捷键”中输入字母m,如下图1所示...图1 这样,Excel工作表中,按Ctrl+m组合键,会出现如下图2所示弹出菜单。 图2 当单击菜单中按钮,会弹出一个信息框,如下图3所示。

    3.4K51

    Excel实战技巧50: 避免因粘贴破坏数据有效性

    学习Excel技术,关注微信公众号: excelperfect Excel数据有效性(Excel 2013及以上版本中改称数据验证)是一项很方便功能,帮助我们让用户单元格中输入规定数据。...原来思路是,如果是有数据有效性设置单元格,在用户粘贴数据前,保存数据有效性设置,在用户粘贴后,使用工作表事件取消用户粘贴数据,同时恢复原来数据有效性设置。...If MsgBox("正常粘贴操作已被禁用.你将粘贴值(不能撤销),是否继续?"...CatchPaste", , False End Sub Private Sub Workbook_Open() CatchPaste End Sub 工作簿打开,进行相应设置。...工作簿关闭或者非当前工作簿,恢复相应设置。

    7.1K31

    VBA专题10-10:使用VBA操控Excel界面之在功能区中添加自定义切换按钮控件

    excelperfect 添加步骤与本系列上一篇文章《VBA专题10-9:使用VBA操控Excel界面之在功能区中添加自定义按钮控件》中步骤相同,即:新建一个启用工作簿并保存,关闭该工作簿,然后...重新打开该工作簿后,“Custom”选项卡中显示含两个切换按钮组,如图1所示。我们看到,一个按钮带有标签,一个没有标签。可以对照XML代码看看自定义界面是怎么创建。 ?...图1 VBE中添加回代码,返回切换按钮状态: 'Callbackfor toggleBtn1 onAction Sub Macro1(control As IRibbonControl, pressed...As Boolean) MsgBox control.ID & "按下状态是:" & pressed End Sub 'Callbackfor toggleBtn2 onAction Sub...Sub 单击自定义按钮,会根据按钮是否被按下,弹出下图2所示信息框,这是切换按钮被按下显示信息。

    1.8K10

    VBA专题10-25:使用VBA操控Excel界面之一个示例程序

    当打开工作簿, 1.1 激活特定工作表(名为Sample)。 1.2 开始3行被冻洁。 1.3一个特定行(行50)向上滚动并成为解冻窗格顶部行。...如果取消选取(或选取)指定内置复选框(例如,“视图”选项卡中“编辑栏”复选框),那么禁用(或启用)自定义控件(例如,“视图”选项卡中G5B1按钮)。 5....如果激活工作表(名为Sheet1)具有指定工作表级命名区域(例如,名为MyRange单元格区域),那么启用Custom选项卡中不同组中一组控件按钮。...创建一个新工作簿,将其保存为启用工作簿。 2. 右击工作表选项卡,选择插入来添加一个图表工作表。 3. 重命名工作表为Sample、Sheet1和Sheet2。 4....激活工作表Sheet1,选择一个单元格区域,“名称”框中输入“Sheet1!MyRange”来命名为一个工作表级名称。 5. 关闭该工作簿,然后Custom UIEditor中打开该工作簿。

    2.3K10

    VBA专题10-22:使用VBA操控Excel界面之重新利用内置控件以及监控内置控件

    标准VBA模块中编辑回调过程,永久地重新利用“剪切”控件功能: 'Callback for Cut onAction Sub MyCut(control As IRibbonControl, ByRef...例如,下面的回调过程显示用户一条信息后重新恢复加粗控件功能: 'Callback for Bold onAction Sub MyBold(control As IRibbonControl, pressed...cancelDefault = False End Sub 注意,“加粗”控件是一个切换按钮,其onAction属性必须带有上面所示3个参数。...然而,Custom UI Editor for Microsoft Office中产生签名参数数量错误,如下: 'Callback for Bold onAction(wrong number...有时,单击特定内置控件,可能想采取必要操作。例如,如果被打印页数超过100,那就中断打印。

    1.1K10

    Excel实战技巧60: 自定义功能区

    将压缩文件扩展名修改回Excel文件扩展名,打开Excel文件,可以看到添加了一个新名为“选项卡”选项卡,有两个组,每组有两个按钮,如下图3所示。 ?...修改按钮 主要介绍如何为按钮添加图像并链接到。 再次修改Excel文件扩展名为压缩文件,将my_customUI.xml文件拖出压缩文件并进行修改。...id = "button4" label = "按钮4" image = "my_icon_1" onAction = "sayGoodbye"/> 下面,我们为按钮关联,以便用户单击按钮响应相关功能...End Sub 此时,当你按下按钮1,会弹出一个输入框要求输入名字,输入完成后,会给出一句问候信息。...9.VBE中编写相关控件代码,注意过程名后带有相应参数。 本文虽然以Excel为示例来讲解,但同样原理也可以运用到Word和PowerPoint中。

    1.9K10

    VBA专题10-23:使用VBA操控Excel界面之添加动态菜单

    学习Excel技术,关注微信公众号: excelperfect 本系列后面的示例程序中,你将会看到如何使用项目和带图像库控件通过getItemLabel和getItemImage回属性引用VBA...下面介绍一个简单使用动态菜单控件示例,工作簿中为三个工作表(名为Data,Analysis,Reports)每个显示不同菜单。 1. 创建一个新工作簿,将其保存为启用工作簿。 2....下面展示了选择不同工作菜单内容: 640.gif 保留自定义复选框勾选条件 在上面的示例XML和VBA代码中,当用户工作表Data中单击动态菜单中复选框后,复选框会相应地显示勾选或者取消勾选...如果要保留条件,可以在其被无效前存储其状态,然后重新创建菜单恢复其状态。这可以通过使用模块级变量和getPressed回属性来实现。...VBE中,选择运行|重新设置。 当VBE显示标准错误消息框(因为一个未处理运行时错误发生),可以单击消息框中结束按钮。 关闭该工作簿文件。

    6.1K20

    VBA专题10-19:使用VBA操控Excel界面之在功能区中添加不同类型自定义控件

    添加该控件步骤与前面文章介绍相同,新建一个启用工作簿并保存,关闭该工作簿,然后CustomUI Editor中打开该工作簿,输入下面的XML代码: ? ? ? ? ? ?...Excel中打开该工作簿,然后打开VBE,插入一个标准VBA模块,输入下面的代码: 'Callback for button1 onAction Sub Macro1(control As IRibbonControl..., pressed As Boolean) MsgBox "切换按钮状态为: "& pressed End Sub 'Callback for Btn1 onAction Sub Macro10...Boolean) MsgBox "复选框被选取: " &pressed End Sub 其中,首次打开工作簿或者使标签控件无效执行getLabel1和getLabel2回调过程。...工作簿自定义选项卡中不同类型控件如下图所示: ? 下图演示了自定义选项卡中各类控件效果: ?

    1.9K10

    代码管理

    学习使用VBA来处理Excel问题,自然是为了简化工作。但是随着自己VBA使用增多,代码分散各个Excel文件中,非常散乱。管理好自己代码是提高代码复用率关键,也能提高开发效率。...,这个是代码管理关键,电脑中正常仅有一份库文件)这些库文件,再通过编译生成exe可执行文件。...库 使用加载作为库进行代码管理: 一些功能性东西,比如一些常用类、函数等,在编写VBA代码过程中会经常使用到,但是本身不是一个完整可以完成某个具体任务,我会放在一个加载中,固定保存在电脑某个位置...这样不但能提高效率,而且使用过程中发现了问题的话,只要修改了加载代码,所有引用了这个加载具体任务代码都能够完善。...个人还是使用加载作为这么一个管理手段,一些经常要使用功能,会写在一个加载中,一般再制作Ribbon菜单,保存在电脑某个位置。

    95710

    Excel中自定义上下文菜单(上)

    Excel中上下文菜单 Microsoft Excel中,人们最常用的上下文菜单是单元格上下文菜单,这是工作表单元格或选定单元格上单击鼠标右键看到菜单(如下图1所示)。...例如,在行或列标题上单击鼠标右键显示行和列上下文菜单。...menuSeparator) 拆分按钮(splitButton) 切换按钮(toggleButton) 使用VBA代码将控件添加到单元格上下文菜单 下面的示例单元格上下文菜单顶部添加了自定义按钮、内置按钮...单击按钮或子菜单中三个选项之一,会运行其他四个过程。本例中,最后四个更改单元格中任何文本大小写。...当打开或激活该工作簿,这些事件会自动将控件添加到单元格上下文菜单中;当关闭或停用该工作簿,这些事件会自动删除添加控件。

    2.7K40

    使用VBA加载小心 Workbook.FullName 属性

    Workbook.FullNameVBA中是一个非常常用属性,返回工作簿全路径,首先查看一下帮助文件: 返回对象名称(以字符串表示),包括其磁盘路径。String 型,只读。...再仔细一看,会发现故意将一些字母大小写替换了,文件能正确打开,但FullName返回字符串和原始字符串有差异了。...但是,存在这样一种场景: 对经常使用VBA的人来说,会写一些常用功能制作为加载使用,使用过加载应该知道,一旦加载被移动了位置,会出现如下提示: ?...说明加载设置加载时候,路径就被保存起来了,在这种情况下,如果路径中仅仅是修改了字母大小写(测试文件名修改没有影响),加载打开不会出问题,但是,路径其实已经被修改了。...个人有这样一个使用习惯,由于需要使用VBA功能较多,将一些功能分类编写了不同宏文件,这些文件存放在同一个文件夹里,只设置加载一个加载

    1.5K40

    一起学Excel专业开发21:Excel工时报表与分析系统开发(3)——自定义用户界面

    设置背景图片 最简便方法是将应用程序工作簿中一个工作作为其“桌面”,向其中添加背景图片,并将工作簿最大化,设置工作显示属性使其显示范围扩大到整个Excel窗口,去除工作簿窗口中控制框和最大最小化按钮...如果应用程序使用基于工作用户接口,则应该将工作作为主要数据录入界面和显示报表界面,而对话框应只用于少量任务和向导程序。...如果应用程序使用基于用户窗体接口,则工作表只应用于显示报表。 决定采用何种样式用户接口,应该考虑用户可能会在应用程序什么地方花时间,是提供丰富编辑功能更好还是提供强大控制功能更好。...专业开发17:Excel工时报表与分析系统开发(2)——创建特定应用加载》中,我们使用加载和模板创建每周工时表并将它们存储到工作区,ConsolidateWorkbooks过程用来获取这些工时表工作簿并将它们合并和分析...有兴趣朋友,可以完美Excel公众号底部发送消息: 工时分析系统程序 下载示例工作簿研究。

    1.9K10

    VBA专题10-24:使用VBA操控Excel界面之单元格上下文菜单(Excel 2010及以后版本)

    学习Excel技术,关注微信公众号: excelperfect 添加按钮控件 假设你需要对工作表中前面有货币符号值执行计算,然而那些值被解释为文本,你要编写VBA过程来移除所选单元格区域中货币符号。...注意,Custom UI Editor中,要选择Insert|Office 2010 Custom UI Part,因为2007中没有contextMenus作为其子元素。...添加其他类型控件 除了上面介绍使用XML代码单元格上下文菜单中添加按钮控件外,还可以添加6种其他类型内置控件和自定义控件:切换按钮、拆分按钮、菜单、库、复选框和动态菜单。...《VBA专题10-23:使用VBA操控Excel界面之添加动态菜单》一文中,当用户激活不同工作Workbook_SheetActivate事件处理中明确地使菜单无效(为了重新构建菜单)。...当用户右击工作表单元格,动态菜单在单元格上下文菜单显示其内容过程中重新创建。

    1.6K10

    CODING 敏捷实战系列课第四讲:从头搭建持续集成 DevOps 流水线

    项目开始架构师通常会根据业务设计好架构,有多少个模块、对象,分到几层,哪层可以,哪层不能,怎么依赖关系,这些都会很清楚,但在不断演变过程中,架构往往会变得乱七八糟。...认为流水线研发管理过程中扮演了三个角色:不辞辛劳临时、铁面无私守护者以及快速精准操作员。 流水线是不辞辛劳临时。现在构建流水线都可以按需创建。...认为这样做好处是版本化,传统搭建方式问题在于操作没有记录,也无法强制 Review,当一台服务器挂掉,换一台服务器需要把原来流水线配置重新操作一遍。...因为大量逻辑都是各种 If else 分支里,单元测试可以覆盖到这些分支,那么上层测试就不需要再覆盖下层已经覆盖过逻辑了。...而上层测试价值在于把这些代码集成起来,站在用户角度去使用它,看看能否正常工作。上层和下层测试关注点不一样,解决问题也不一样;第四是部署。

    90720

    ​CODING 敏捷实战系列课第四讲:从头搭建持续集成 DevOps 流水线

    项目开始架构师通常会根据业务设计好架构,有多少个模块、对象,分到几层,哪层可以,哪层不能,怎么依赖关系,这些都会很清楚,但在不断演变过程中,架构往往会变得乱七八糟。...认为流水线研发管理过程中扮演了三个角色:不辞辛劳临时、铁面无私守护者以及快速精准操作员。 流水线是不辞辛劳临时。 现在构建流水线都可以按需创建。...认为这样做好处是版本化,传统搭建方式问题在于操作没有记录,也无法强制 Review,当一台服务器挂掉,换一台服务器需要把原来流水线配置重新操作一遍。...因为大量逻辑都是各种 If else 分支里,单元测试可以覆盖到这些分支,那么上层测试就不需要再覆盖下层已经覆盖过逻辑了。...而上层测试价值在于把这些代码集成起来,站在用户角度去使用它,看看能否正常工作。上层和下层测试关注点不一样,解决问题也不一样;第四是部署。

    94520
    领券