Excel表单按钮保留在同一位置,但TopLeftCell不同(所有父行都被取消隐藏)

时间:2017-06-03 12:16:22

标签: excel vba excel-vba button

向右追逐,我有一个标签,其中4个Excel表堆叠在一起。每行在表格左侧的列中都有自己的“向上”和“向下”按钮,如下所示:

enter image description here

我缩小了按钮以适应同一个单元格(行高为20)。这允许我使用单元格的TopLeftCell.Row属性,如下所示:单击时,按钮行中的内容将被复制粘贴到上方/下方的行。这是基本代码:

currRow = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
If InStr(Application.Caller, "Up") > 0 Then
    Move_Project_Up currRow
Else
    Move_Project_Down currRow
End If

当用户访问此选项卡时,将隐藏任何空表行(使用Rows(rr).EntireRow.Hidden = True)。按钮Move and size with cells因此它们会自动隐藏)。所有可见按钮都按预期工作。然而,有时用户希望将项目从一个表的顶部“向上”移动到上表的底部(即,到当前隐藏的行)。您可以想象想要将数据从第312行“向上”移动到下图中的第244行:

enter image description here

代码成功移动并取消隐藏行。这里的问题:当行被取消隐藏时,按钮为深灰色且TopLeftCell.Row错误:

enter image description here

它们未被禁用。单击时,它们仍会触发指定的宏。但是,我可以从Debug.Print看到他们的TopLeftCell.Row不一定是他们实际所在的行。在上图中,BOTH SETS OF BUTTONS的TopLeftCell.Row为97.这是正确的对于第一组,但不是第二组。

有关为何会发生这种情况的任何想法?我怀疑它与取消隐藏行有关,和/或在此选项卡上发生了很多事实(例如超过10,000个数组公式)。

提前致谢!

1 个答案:

答案 0 :(得分:0)

正如一位评论者(jkpieterse)建议的那样,将“已损坏”按钮的.Top属性设置为同一行中单元格的.Top值!