3

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

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

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

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

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

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

非常感谢你的帮助。

4

2 回答 2

0

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

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

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

于 2013-05-21T15:57:33.933 回答
0

我有同样的问题。这些按钮是由像您这样的其他按钮创建的。但是,它只是在创建按钮的代码中才开始这样做,我开始为其添加名称。所以另一种不太令人满意的处理方法是没有“shp.name=”行。当我把它拿出来时,它就停止了。我的猜测是,在命名按钮的自然方式中,它自然地避免了这种情况。就像您有一张工作表,删除它并添加另一个工作表一样,它仍然会记住旧工作表并将新工作表命名为更高的编号。删除缓存的代码会很好。如果问题的提出方式不同,我相信有人知道该怎么做。搜索给出: Application.Restart() 我还没有尝试过。

于 2014-03-05T09:01:35.147 回答