如何使用VBA更改单元格值来保持命名范围公式

时间:2016-06-13 16:24:09

标签: vba excel-vba named-ranges excel

我在尝试调试一个VBA例程时发现了一个有趣的问题,该例程对一个范围内的工作表列表进行排序,然后重新绘制该范围内的边框。

包含的范围在名称管理器中定义,其公式如下所示

=Tables!$L$2:$L$22

正在发生的问题是,在执行工作表名称工作时,有时会删除单元格,有时会插入单元格。这会更改指定范围中的单元格地址值。因此,如果我删除了两个单元格并插入了一个单元格,则公式将更改为

=Tables!$L$2:$L$21

如果我碰巧插入第一个单元格(L2),那么公式将变为

=Tables!$L$3:$L$22

我确定问题可以使用标题范围名称和偏移一个来解决,但我不知道如何在命名范围的公式中这样做,因为我尝试了很多方法而且不能修正它。但我还需要结束范围地址是静态的。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:0)

要尝试的一件事是使用:

=Indirect("Tables!$L$2:$L$22")

而不是

=Tables!$L$2:$L$22

这是一个可接受的名称,但我不确定您是否会获得相同的功能。

答案 1 :(得分:0)

使用静态标头范围找到比评论更好的方法。您只需使用标题中的偏移函数定义整个范围。

=OFFSET(AllSheetsHeader,1,0,21,1)

其中1,0,21,1是从标题偏移1行,0列偏移,21是行高,1是只有一列