【问题标题】:How to use the offset method with named ranges如何使用带命名范围的偏移方法
【发布时间】:2013-07-02 03:32:43
【问题描述】:

这可能有更好的逻辑,但使用用户注释是我理解使此选择起作用的唯一方法。也许你有更好的东西。

我几乎是在 Windows XP 机器上运行 Excel 2010 的新手。

我有一个命名范围(比如 A2:D8),我称之为 GanttArea。在 A8 中是给用户的说明“必须在此行上方插入任何其他行”。这是因为我不知道如何确保用户在正确的位置添加他们的附加行,而且我不知道他们是否会稍后在此处的几个单元格中添加其他不适用于我的行正在尝试捕捉。

如果我输入

Sub SelectRange()
    Range("GanttArea").select
End Sub

它将选择命名范围。我希望它向上移动一排,以免包括我的笔记。 如果我输入

Sub SelectRange()
    Range("GanttArea").Offset(-1,0).Select
End Sub

它确实像我想要的那样将选择的行向上移动,但现在它包括作为标题行的 A1:D1 行。我正在尝试为甘特图动态选择数据,所以这不起作用。

我突然想到,偏移量可能不会改变选择,而只是将相同数量的选定单元格向上移动一行。

如何使命名范围扩大或缩小,以便用户可以添加或删除行?

谢谢, 柯克

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    你可以使用Resize方法代替Offset,所以:

    Sub SelectRange()
        Dim rng as Range: Set rng = Range("GanttArea")
    
        Set rng = rng.Resize(rng.Rows.Count - 1, rng.Columns.Count)
        rng.Select
    
    End Sub
    

    或者,您可以使用Offset 函数简单地定义您的命名范围。

    这些设置起来有点棘手,但只要您的 A 列不包含任何空白单元格,这应该可以工作。在您的名称管理器中,为 GantArea 输入以下公式:

    =OFFSET($A$1,1,0,COUNTA($A:$A)-1,4)

    如果您这样做,您应该能够在表格区域的任何位置插入额外的行,只要这些行不是 A 列中的空值,范围就会根据该公式动态调整大小。

    【讨论】:

    • +1 用于使用具有计算大小的命名范围。以前没见过那个把戏 - 喜欢它!我认为每次引用名称时都会自动更新?
    • @Floris 不确定当名称被 引用 时它是否会更新(例如,作为另一个公式中的参数),但我又不确定它是否需要到,因为,作为一个通用公式,无论如何都不会改变这个范围的尺寸。但是,是的,动态命名的范围非常有趣。它们非常适合绘制动态/变化的数据集等。
    • 谢谢你,大卫,第二个例子,在名称管理器区域中的偏移似乎可以完成这项工作。我得在某个地方读到这件事。我从来没有想过在那里添加一个 VBA 命令。我什至不知道您可以将 VBA 放在宏之外。不过,第一个示例确实存在一些问题。当我输入(或复制和粘贴)它时,“Set Rng…”在我的代码中显示为红色。我很确定我打错了,但我也复制了它,但它仍然无法正常工作。这似乎是我找不到的语法错误。当我运行时,它只会显示“语法错误”。
    • 在第二个选项中,它不是 VBA 方法,而是一个名为 Offset 的工作表函数。对于第一个选项,有一个错字,试试这个:Set rng = rng.Resize(rng.Rows.Count - 1, rng.Columns.Count)
    • “动态命名范围”很棒,但要小心。例如。如果有人在 A11 中输入某些内容(例如“TOTAL”),则命名范围会扩展到包括空白行 8。查看 Excel 表格(插入-> 表格),这将创建一个命名范围作为副产品并给用户一点关于正在发生的事情的更多视觉线索。当然,这些也有自己的取舍。我希望微软将 VBA 'CurrentRegion' 属性移植到 Excel 函数中。
    猜你喜欢
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多