繁体   English   中英

使用VBA Excel启用按钮

[英]Enable button using VBA excel

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

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

在某些计算机上,此方法工作正常,但在其他计算机上,此按钮显示为启用状态,并且如果用户单击该按钮,则什么也不会发生,即使按下该按钮的动画也不会发生,因此它无法执行后面的代码。 就像一张图片。 有什么线索,或者是为什么仅在某些计算机上发生这种情况的原因? Office升级后出现此问题。 PS。 所有计算机都在同一域中。

后期编辑

我更改了代码行

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

现在我收到此错误:438在此行(我在该文件无法工作的计算机上对该文件进行了调试)

我怀疑这是Office最新更新的问题-请查看是否可以解决此问题: http : //excelmatters.com/2014/12/10/office-update-breaks-activex-controls/

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

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

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

不适合作为评论,因此:如果我对您的理解正确,某些计算机会显示该按钮已启用,而实际上该按钮已被禁用,对吗?
在这种情况下,由于Windows知道已以编程方式禁用了按钮,因此通常不会“明显发生”按钮按下动画。
如果您钩住一个窗口窗口上有按钮)并向任何按钮发送WM以显示其自身,就好像发生了激活一样(实际上没有启用),则会发生相同的事情。

似乎在某些计算机上启用它的原因可能有所不同,很可能是视频卡和/或驱动程序的“问题”,或某些“奇怪的对齐方式”(具有该特定图形卡和驱动程序以及DirectX的特定OS,以及那些“特殊” 'OLE设置等)。
在这两种情况下,禁用按钮后,屏幕区域都不会“刷新”( 无效 )-因此它似乎已启用,并且只有在周围有用户交互时才会“重新绘制”。 可以这么说:“懒惰重画”

什么人可以做的是,如果它恰好是一个严重的问题,找到这些计算机上的一个办法让按钮明显一些“处理方法”已禁用(例如,改变按钮上的文字后,这是禁用的-也许甚至完全相同的文本,或将其前后移1个像素,对其调用InvalidateRect等),然后将该解决方案应用于您的Excel宏。


阅读了问者的评论后的更新
哦,我明白了。 如果按钮在控件数组中,则可能发生这种情况。 但是,这种情况下的问题应该出现在所有计算机上。
无论如何。 请确保尝试测试按钮的Index属性,以查看它们是否属于控件数组。 如是:
a)从数组中删除它们并创建彼此“独立”的按钮
b)创建一个布尔数组并在其中存储启用/禁用状态,并编写一个函数来更新按钮的文本颜色属性并处理按钮单击事件忽略/接受

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM