VBA 按钮 Application.Caller 返回错误的行
VBA Button Application.Caller returning wrong row
我尝试在 myexcel 工作簿的不同工作表中的几个按钮上使用以下命令。
MsgBox (ActiveSheet.Shapes(Application.Caller).TopLeftCell.row)
将这些按钮复制到我的工作簿的另一个区域时,我有时会遇到仍然显示原始按钮位置的行号的问题。作为下面屏幕截图中的示例,我单击底部的按钮,但它是 return 行 705 而不是 739。有人可以解释这种行为吗?
确保所有您的按钮具有唯一的名称。有时可能会发生复制的按钮具有相同名称的情况(由于 Excel 中的错误)。然后 VBA 无法区分它们并使用它找到的第一个。检查所有按钮名称并确保它们是唯一的。
这个问题很容易重现:
- 打开一个新工作簿
- 添加按钮 (FormControl)
- 命名为
MyButton
- 复制那个按钮
- 将其粘贴到同一个地方的其他地方sheet
- 对两个按钮使用问题中的代码
该按钮现在将始终显示第一个按钮所在的行,因为它们的名称完全相同。
图 1:说明此问题是如何发生的。最后两个按钮显示相同的行值。因为同名VBA只能找到第一个
解决方案是,当您复制按钮时,请立即确保将其重命名为唯一名称。
我从来没有想过复制一个同名的形状。只有它的标题保留了......但是,既然人们说这是可能的,请尝试将此代码分配给讨论中的所有形状。如果形状双名称是原因,代码将 return 两次:
Sub callButName()
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
If sh.Name = Application.Caller Then MsgBox sh.TopLeftCell.Address
Next
End Sub
我尝试在 myexcel 工作簿的不同工作表中的几个按钮上使用以下命令。
MsgBox (ActiveSheet.Shapes(Application.Caller).TopLeftCell.row)
将这些按钮复制到我的工作簿的另一个区域时,我有时会遇到仍然显示原始按钮位置的行号的问题。作为下面屏幕截图中的示例,我单击底部的按钮,但它是 return 行 705 而不是 739。有人可以解释这种行为吗?
确保所有您的按钮具有唯一的名称。有时可能会发生复制的按钮具有相同名称的情况(由于 Excel 中的错误)。然后 VBA 无法区分它们并使用它找到的第一个。检查所有按钮名称并确保它们是唯一的。
这个问题很容易重现:
- 打开一个新工作簿
- 添加按钮 (FormControl)
- 命名为
MyButton
- 复制那个按钮
- 将其粘贴到同一个地方的其他地方sheet
- 对两个按钮使用问题中的代码
该按钮现在将始终显示第一个按钮所在的行,因为它们的名称完全相同。
解决方案是,当您复制按钮时,请立即确保将其重命名为唯一名称。
我从来没有想过复制一个同名的形状。只有它的标题保留了......但是,既然人们说这是可能的,请尝试将此代码分配给讨论中的所有形状。如果形状双名称是原因,代码将 return 两次:
Sub callButName()
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
If sh.Name = Application.Caller Then MsgBox sh.TopLeftCell.Address
Next
End Sub