ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row返回错误的行

时间:2013-05-21 11:18:27

标签: excel excel-vba vba

我正在使用一个小宏来添加和删除受保护工作表中的行。为此,每行都有一个“删除”按钮。添加新行时,将复制最后一个现有行(包括“删除”按钮),然后清除其内容。

为了删除行,我移交了一些参数,包括“删除”按钮(以及项目的)行。为此,我使用:

RowToDelete = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row

此代码适用于现有行,但自上次打开工作簿以来添加的所有行都将失败(最后一行除外)。对于所有其他,它将删除添加的下一行而不是“真实”。

我猜这是一个缓存问题,因为“Application.Caller”包含正确的字符串,但返回不再带有该名称的复制形状的行。

有没有办法清除相关缓存或强制Shapes()不使用缓存?

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

我找到了一个我不太满意的解决方法,但现在必须要做的伎俩。我使用随机shapenames来避免错误的返回值。似乎在查找工作之前形状名称不存在。

shp.Name = "Shape" & Format(i, "0000") & (Rnd * 999)

必须存在一些缓存问题,因为保存并重新打开工作簿后按钮工作正常。

答案 1 :(得分:0)

我遇到了同样的问题。这些按钮是由像你这样的其他按钮创建的。但是,它只在创建按钮的代码中开始执行,我开始为其添加名称。所以另一个不太令人满意的处理方法就是不要使用“shp.name =”行。当我拿出它时它停止了这样做。我的猜测是,以命名按钮的自然方式,它自然避免了这种情况。就像你有一张纸,删除它,并添加另一张纸一样,它仍然会记住旧纸张,并将新纸张命名为更高的数字。 删除缓存的代码会很好。如果对问题的要求不同,我相信有人知道如何做到这一点。搜索它给出: Application.Restart() 我没试过。