【问题标题】:VBA Named Range dropping Sheet referenceVBA 命名范围删除工作表参考
【发布时间】:2014-06-18 18:39:18
【问题描述】:

我有一个名为“MyRange”的命名范围。它被定义为='Sheet1'!$A:$A。在 VBA 中,我有公式 LastRow= Cells(Rows.Count, Range("MyRange").Column).End(xlUp).Row。它应该返回命名范围中数据的最后一行。但是,它会返回我当前所在工作表的 A 列中的最后一行。为什么工作表引用从命名范围中删除,我如何让它保持原位?

【问题讨论】:

    标签: vba excel excel-2010 named-ranges


    【解决方案1】:

    代码的语法是这样的,对于 Cells 参数和 Rows 参数,它将引用活动工作表而不是命名范围中的工作表。

    维护工作表引用的语法可以是:

    With Range("myrange").Worksheet
        LastRow = .Cells(.Rows.Count, [myrange].Column).End(xlUp).Row
    End With
    

    注意单元格和行(和列)前面的“点”。

    【讨论】:

      【解决方案2】:

      试试这个:

      LastRow = range("MyRange").Worksheet.Cells(Rows.Count, Range("MyRange").Column).End(xlUp).Row
      

      编辑与另一个答案相同的方法 :) 完成答案的时间太长了!

      失败的原因是 CELLS 默认引用了当前活动的工作表。在 CELLS 之前添加 Range("MyRange").Worksheet 会导致它对包含“MyRange”的工作表进行操作。

      【讨论】:

        【解决方案3】:

        您可以随时尝试:

        With Sheet1
            LastRow = Cells(Rows.Count, Range("MyRange").Column).End(xlUp).Row
        End With
        

        另一个想法:试试没有 MyRange 周围的 "" 的情况

        LastRow= Cells(Rows.Count, Range(MyRange).Column).End(xlUp).Row
        

        【讨论】:

        • 您的第一个建议有效,但不是一种非常可扩展的方法,因为我有数千个对命名范围的引用。这将增加大约 5,000 行代码。第二个选项不起作用。
        • @tannman357,你的答案很好,除了你忘记了一些重点:一个在单元格之前,一个在行之前。所以更正它的内容是:LastRow = .Cells(.Rows.Count, .Range("MyRange").Column).End(xlUp).Row,否则你将再次进入活动表......另外,我猜它是with sheets("Sheet1")
        • @user2242044 - 在您的 OP 中包含 scalable 之类的内容。否则就像试图击中一个移动的目标来给你一个好的答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 2011-09-19
        • 2017-09-25
        • 1970-01-01
        相关资源
        最近更新 更多