Application.Caller返回不正确的行号

时间:2019-09-26 08:38:00

标签: excel vba

我有以下代码:

Set b = ActiveSheet.Buttons(Application.Caller)
With b.TopLeftCell
    bcn = .Column
    brn = .Row
End With

大多数情况下,它都能完美运行。但是,有时在调用此方法时,返回的行号偏移+14。工作表中没有隐藏的行。 发生这种情况时,如果您将工作表打开几分钟,却什么也不做,它将重新开始工作。

正在发生什么,如何解决?还是有更好的方法获取行号?

2 个答案:

答案 0 :(得分:0)

问题似乎是,如果您在Buttons上保留默认名称,则很有可能会出现重复的名称,而Application.Caller只会返回一个非唯一的名称,返回所需的正确Sheet名称。

您可以通过使用自定义名称并使用诸如Buttons + SheetName + Button之类的命名约定来重命名Counter(例如:{{1} }。

希望这会有所帮助。

答案 1 :(得分:0)

之所以发生这种情况,是因为彼此之间有多个按钮。有时,背景按钮(根本不应该在那里)成为前景按钮,并且是意外行为的来源。删除重复的按钮可以解决此问题。

只有在尝试以编程方式重命名按钮时,这种情况才变得显而易见,这种现象表现为尝试为多个按钮赋予相同的名称,并提出了权限被拒绝的错误,因为该名称是基于行号和列号的。

该问题仅在每20个打开中出现大约1个,因此这不是一个引起重大关注的足够大的问题;因此为什么要花6个月才能解决。