【问题标题】:Enable button using VBA excel使用 VBA excel 启用按钮
【发布时间】:2014-12-11 09:45:49
【问题描述】:

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

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

在某些计算机上可以正常工作,但在其他计算机上,此按钮显示为已启用,如果用户单击该按钮,则没有任何反应,甚至没有按下按钮的动画,因此它无法执行后面的代码。这就像一个图像。有什么线索,或者为什么这只发生在某些计算机上? Office 升级后出现此问题。 PS。所有计算机都在同一个域中。

稍后编辑

我更改了代码行

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

现在我收到此错误:438 在这一行(我在该文件不起作用的计算机上调试了该文件)

【问题讨论】:

    标签: excel ms-office vba


    【解决方案1】:

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

    【讨论】:

    • 谢谢!这就是原因。我删除了这些文件,然后我的文件又可以工作了。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      不适合作为评论,所以: 如果我理解正确,有些计算机显示按钮启用,而实际上它被禁用,对吧?
      在这种情况下,没有按钮按下动画“明显发生”是正常的,因为 Windows 知道该按钮已被编程禁用。
      如果您 hook a window(上面有按钮)并向任何按钮发送 WM 以显示自己好像已启用(实际上并未启用),则会发生同样的事情。

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

      如果碰巧是一个严重的问题,人们可以做的是在其中一台计算机上找到一种方法,通过某种“解决方法”(例如,在按钮文本出现后更改按钮文本)可见禁用该按钮禁用 - 甚至可能是完全相同的文本 - 或将其移开和移回 1 个像素,call InvalidateRect on it 等),然后将该解决方案应用于您的 Excel 宏。


      更新 阅读提问者的评论后:
      我懂了。如果按钮位于 control array 中,则可能会发生这种情况。但是,这种情况下的问题应该出现在所有计算机上...奇怪。
      反正。尝试测试按钮的Index 属性以查看它们是否是控件数组的一部分,以确保确定。如果是:
      a) 将它们从数组中删除并创建彼此“独立”的按钮
      b) 创建一个 bool 数组并存储在那里启用/禁用状态并编写一个函数来更新按钮的文本颜色属性并处理按钮单击事件忽略/接受

      【讨论】:

      • 我的问题是该表中的所有按钮(启用的按钮)都“有点被阻止”。如果我禁用一个按钮,按钮的外观会发生变化并按应显示的方式显示(灰色文本),但启用的按钮是我的问题,因为我无法单击它们。
      • @SparX23 更新了反馈。但是,在这种情况下,请注意我在这里猜测。另一方面,罗里的回答似乎是合法的:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多