为什么定义的范围不能与End(xlDown).Select一起使用?

时间:2019-06-07 12:48:12

标签: excel vba

我正在运行具有定义范围的函数,并尝试使用End。(xlDown).Select。我收到一条消息“ Range类的选择方法失败”。

我已经编辑了下面的代码,以仅显示问题片段。经过几乎两个小时的尝试,我无法正常工作。

烦人的部分是我必须使用定义的范围,因为该函数是更大的Sub的一部分,一旦使用Select和Activate,它就无法按预期工作。

Function OutputFunction()

    Dim rng8 As Range
    Set rng8 = ThisWorkbook.Worksheets(5).Range("A2")

    rng1.ClearContents 'Works like a charm.
    rng2.Copy 'No problem here either.

    rng8.End(xlDown).Select 'Fails misserably.
    ActiveCell.Offset(0, 13).Select
    Range(Selection, Range("N3")).Select
    ActiveSheet.Paste

3 个答案:

答案 0 :(得分:0)

尝试:

Option Explicit

Sub test()

    Dim rng8 As Range

    'Have in mind that you refer to a sheet based on it s index, NOT with its name!
    'If sheets order change you will refer to another sheet
    With ThisWorkbook.Worksheets(5)

        Set rng8 = .Range("A2")
        rng8.Select

        .Range(rng8, rng8.End(xlDown)).Select
    End With

End Sub

答案 1 :(得分:0)

    rng2.Copy destination:= rng8.parent.range(rng8.End(xlDown).Offset(0, 13), rng8.parent.Range("N3"))

“经过几乎两个小时的尝试,我无法正常工作。”

Excel宏的第一条规则:永远不要在Excel宏中使用SELECT。

Excel宏的第二条规则:不要在Excel宏中使用“选择”

第三个.....

答案 2 :(得分:0)

尝试在我的个人宏中使用 End(xlDown).Select。首先,我在我编写宏的原始 excel 文件中对此进行了测试,并且它在每个步骤中都运行良好。但是当我在另一个文件中使用它时出现了问题。

经过一些测试后,我将 .Select 更改为 .Activate 并且它起作用了。我不能 100% 确定我们是否在同一页面上讨论,所以请告诉我这是否解决了您的问题,以便我改进我的答案。