【问题标题】:Running Excel 4.0 macro using button使用按钮运行 Excel 4.0 宏
【发布时间】:2021-11-08 21:35:40
【问题描述】:

我的电子表格上已经使用了多年的宏,通过按钮停止了工作,尽管它们仍然可以在 VBA 开发人员窗口中工作。

我使用普通形状(矩形)作为按钮并为其分配了宏(从“ThisWorkbook”中选择)。

为了阻止我在其他类似帖子中看到的建议修复:

  • 它仍然是一个 .xlsm 文件
  • 宏仍处于启用状态。
  • 它与以前一样在同一台笔记本电脑上运行(Windows 10、Office 365)。
  • 最近没有发生任何 Windows 更新。
  • 我只打开了这个文件。
  • 我尝试重新启动笔记本电脑并重新启动 Excel。
  • 我没有使用 Active-X 控件。
  • 我尝试使用表单控制按钮和常规形状按钮 - 都不起作用。
  • 它与实际的 VBA 代码无关(请参阅下面的证明)。

我创建了一个新程序来表明问题不在于代码本身:

Sub button_not_working()
    MsgBox "button_not_working"
End Sub

此程序使用 VBA 屏幕中的绿色“播放”按钮运行,但不能通过工作表上的指定按钮运行。

代码位于普通 VBA 代码模块中(不是 VBA 屏幕上的“ThisWorkbook”区域)。

宏是通过右键单击形状来分配的,可用的宏列表只是“分配宏”弹出窗口中“此工作簿”中的那些。

单击形状运行分配的宏时,我收到此错误消息。

【问题讨论】:

  • 澄清一下,代码位于常规 VBA 模块中,而不是“ThisWorkbook”部分。
  • 屏幕截图添加到原始帖子。 ThisWorkbook 模块中没有代码
  • 已解决 - 原来我需要选中“启用 Excel 4.0 宏”复选框。显然,微软刚刚从本月开始在 Office 365 中默认禁用此功能!我发布了一个答案作为解决方案。

标签: excel vba button


【解决方案1】:

您不能在按钮事件中从ThisWorkbook 调用代码。

我喜欢将按钮事件放在按钮所在工作表后面的代码中。这样,无论复制哪个工作表,代码都会随工作表一起移动。

使用表单按钮。右键单击表单按钮并选择Assign Macro...。然后从弹出的列表中选择 VBA 子例程。只有在此弹出窗口中可见的程序才会起作用。

注意: 切勿在 VBA 中的任何名称中使用 _。它是为事件处理保留的。

Public Sub ButtonIsWorking()
    MsgBox "button is working"
End Sub

工作表中的代码:

分配宏:

按钮按下:

【讨论】:

  • 对不起,我应该更清楚。该代码位于常规 VBA 代码模块中,而不是“ThisWorkbook”部分中。我的意思是我在分配弹出窗口的“ThisWorkbook”中为按钮分配了一个宏。
  • 很高兴知道我不应该在 VBA 名称中包含 _。不知道那个。无论如何,我删除了 _ 并遇到了同样的问题
  • @epe 请编辑您的问题以包括您的代码所在位置的屏幕截图和按钮绑定的屏幕截图。这些由 gui 控制,而不是代码本身。
【解决方案2】:

由于多个屏幕或分辨率差异问题,通常会出现此问题。如果您使用的是连接到屏幕的笔记本电脑,请尝试在笔记本电脑与显示器断开连接时使用笔记本电脑上的按钮。如果这可以解决问题,请确保您在两个设置之间具有相同的分辨率和/或缩放比例。

如果此更改最近才发生并且在台式机或笔记本电脑屏幕上没有额外的显示器,请确保您的缩放设置为 100%,以防最近发生更改。

【讨论】:

  • 好主意。就我而言,它只是一台没有附加屏幕的笔记本电脑。缩放比例为 250%,作为标准推荐设置。 100% 是 4k 屏幕上的小字体。
【解决方案3】:

已解决 - 原来我需要选中“启用 Excel 4.0 宏”复选框。 显然,微软刚刚从本月开始在 Office 365 中默认禁用此功能!

所以在 Excel 中...文件>>选项>>信任中心>>信任中心设置>>宏设置

【讨论】:

  • 您不应该使用 Excel 4.0 宏。它们与 VBA 完全不同。他们也没有安全感。此选项需要始终禁用。仅使用 VBA。我提供的解决方案是 VBA 解决方案,不需要这种不安全的设置。
  • 同意。据我所知,我认为我没有使用 Excel 4.0 宏。我什至不知道它们是什么。我只有常规的 VBA,并且在您的帖子 HackSlash 中遵循您的所有建议。我所知道的是,当我启用 Excel 4.0 时,按钮再次开始运行我的 VBA 代码。当我禁用它时,按钮停止工作。 (顺便说一句,我怎么知道我是否有任何 Excel 4.0 宏代码?)
  • 你会知道的。它是写入单元格的代码,就像公式一样。它根本不使用 VBA 窗口。
  • 好的,谢谢。那时我没有使用 Excel 4.0 宏。不知道为什么我必须启用它才能使我的按钮工作,但这就是生活
  • 我也将对此进行测试:我的按钮和复选框也不断与它们的宏断开连接(自定义菜单栏中的按钮继续运行相同的宏而没有问题)。
【解决方案4】:

尝试一下:确保您的“呼叫者”形状具有唯一的名称
注意:可能有多个具有相同名称的形状(无论出于何种原因),这可能会混淆 excel 的形状到宏的连接。

附加信息 1:
如果您使用“分组形状”对象作为控件,您应该为组中的所有形状分配相同的名称。

附加信息 2:
最初的 OP 症状只是“宏……通过按钮停止工作”。 OP 已更新,并显示错误消息。此处描述的因非唯一命名而断开连接不会引发错误消息。相反,症状可能是:a) 宏根本没有运行或 b) 被调用宏中的“调用者”对象无效。

【讨论】:

  • 好主意。我运行了一个程序来查找 dups 并找到了一对并将它们重命名,但没有解决问题
猜你喜欢
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多