使用VBA excel启用按钮

时间:2014-12-11 09:45:50

标签: excel-vba ms-office vba excel

我有一个不寻常的问题。我有一个带有宏的Excel文件。在所有计算机上都安装了Office 2010,一切正常,但几天前每台计算机都升级到Office 2013。 在代码中,我在某些时候根据某些标准启用或禁用某些按钮。

 ThisWorkbook.Worksheets("Lab Orders").OLEObjects("CommandButton1").Enabled = False

在某些计算机上,这样可以正常工作,但在其他计算机上,此按钮显示为已启用,如果用户单击该按钮,则没有任何操作,甚至按下该按钮的动画也不会发生,因此无法执行后面的代码。这就像一张图片。任何线索,或仅在某些计算机上发生这种情况的原因? 办公室升级后我遇到了这个问题。 PS。所有计算机都在同一个域中。

后期编辑

我更改了代码行

ThisWorkbook.Worksheets("Lab Orders").CommandButton1.Enabled = True

现在我收到此错误:此行有438个(我在这个文件不起作用的计算机上对文件进行了重新编译)

3 个答案:

答案 0 :(得分:1)

我怀疑最新的Office更新存在问题 - 看看是否可以修复它:http://excelmatters.com/2014/12/10/office-update-breaks-activex-controls/

答案 1 :(得分:0)

在出现问题的所有计算机上,选中位于选项/信任中心/宏设置中的“信任对VBA项目对象模型的访问权限”框

(请注意,这仅适用于Excel,如果您在其他MS Office软件上遇到同样的问题,您也应该对它们执行相同的操作)

如果仍然无效,请阅读并应用此页面上的所有检查:https://support.office.com/en-gb/article/Enable-or-disable-macros-in-Office-files-12b036fd-d140-4e74-b45e-16fed1a7e5c6

答案 2 :(得分:0)

不适合作为评论,所以: 如果我理解正确,有些计算机显示按钮已启用,而实际上它已被禁用,对吧? 在这种情况下,它是正常的无按钮动画"明显发生"因为Windows知道按钮是以编程方式禁用的 如果您hook a window(其上有按钮)并发送任何按钮WM以显示自己就好像已启用(实际上并非如此),则会发生同样的事情。登记/> 在某些计算机上似乎启用它的原因可能会有所不同,很可能是它的视频卡和/或驱动程序问题,或者某些"奇怪的对齐" (具有特定显卡和驱动程序以及DirectX的特定操作系统,以及那些特殊的OLE设置等)。在这两种情况下,屏幕区域都不会得到"刷新"按钮被禁用后(invalidated) - 因此它似乎已启用并获得"重新绘制"只有当它周围有一些用户交互时。 "懒惰重绘",可以这么说:)

如果碰巧是一个严重的问题,那么可以做的就是在其中一台计算机上找到一种方法,通过一些“解决方法”来显示 按钮。 (例如,在禁用后更改按钮文本 - 甚至可以使用完全相同的文本 - 或将其移动1个像素,然后返回call InvalidateRect on it等),并将该解决方案应用于Excel宏。


阅读提问者评论后,更新
原来如此。如果按钮位于control array,则可能会发生这种情况。然而,在这种情况下,问题应该存在于所有计算机上...奇怪 无论如何。尝试测试按钮' Index属性,看看它们是否属于控件数组,只是为了确定。如果是:
    a)从数组中删除它们并创建按钮"独立"来自彼此     b)创建一个bool数组并存储启用/禁用状态并编写一个更新按钮的功能。文字颜色属性&处理按钮单击事件忽略/接受