VBA 按钮 Application.Caller 返回错误的行

Jul*_*ian 0 excel vba button shapes

我尝试在 myexcel 工作簿的不同工作表中的几个按钮上使用以下命令。

MsgBox (ActiveSheet.Shapes(Application.Caller).TopLeftCell.row)
Run Code Online (Sandbox Code Playgroud)

将这些按钮复制到我的工作簿的另一个区域时,我有时会遇到仍然显示原始按钮位置的行号的问题。作为下面屏幕截图中的示例,我单击底部的按钮,但它返回第 705 行而不是 739。谁能解释这种行为?

在此处输入图片说明

Pᴇʜ*_*Pᴇʜ 6

确保所有按钮都有唯一的名称。有时,复制的按钮可能具有相同的名称(由于 Excel 中的错误)。然后 VBA 无法区分它们并使用它找到的第一个。检查所有按钮名称并确保它们是唯一的。

这个问题很容易重现:

  1. 打开一个新的工作簿
  2. 添加按钮(FormControl)
  3. 命名 MyButton
  4. 复制那个按钮
  5. 将其粘贴到同一工作表中的其他位置
  6. 对两个按钮使用问题中的代码

该按钮现在将始终显示第一个按钮的行,因为两者具有完全相同的名称。

在此处输入图片说明 图 1:说明此问题是如何发生的。最后,两个按钮显示相同的行值。因为它们同名 VBA 只能找到第一个。

解决方案是,当您复制按钮时,请立即确保将其重命名为唯一名称。

  • 确认在我的“Windows 64 位 Office 2019 32 位”设置上确实如此,但一旦保存工作簿,第二个按钮就会重命名为下一个“可用”通用名称,至少是“按钮 3”。 (3认同)