Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 为什么定义的范围不适用于结束(xlDown)。选择?_Excel_Vba - Fatal编程技术网

Excel 为什么定义的范围不适用于结束(xlDown)。选择?

Excel 为什么定义的范围不适用于结束(xlDown)。选择?,excel,vba,Excel,Vba,我正在运行一个定义了范围的函数,在尝试使用End.(xlDown)时。选择我会收到一条消息“Select method of range class failed” 我编辑了下面的代码,只显示问题部分。几乎每样东西都试了两个小时后,我无法让它工作 令人恼火的是,我必须使用定义的范围,因为该功能是一个更大的子功能的一部分,一旦使用选择和激活,它就不能按预期工作 Function OutputFunction() Dim rng8 As Range Set rng8 = ThisW

我正在运行一个定义了范围的函数,在尝试使用End.(xlDown)时。选择我会收到一条消息“Select method of range class failed”

我编辑了下面的代码,只显示问题部分。几乎每样东西都试了两个小时后,我无法让它工作

令人恼火的是,我必须使用定义的范围,因为该功能是一个更大的子功能的一部分,一旦使用选择和激活,它就不能按预期工作

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
尝试:

尝试:

“几乎每样东西都试了两个小时后,我无法让它工作。”

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

Excel宏的第二条规则:不要在Excel宏中使用Select

第三

“几乎每样东西都试了两个小时后,我无法让它工作。”

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

Excel宏的第二条规则:不要在Excel宏中使用Select

第三个…

尝试使用
End(xlDown)。在我的个人宏中选择
。首先,我在我编写宏的原始excel文件中对此进行了测试,它在每个步骤中都工作得很好。但问题发生在我在另一个文件中使用它时

在一些测试之后,我更改了
。用
选择
。激活
,它就工作了。我不能100%确定我们是否在同一页上交谈,因此请告诉我这是否解决了您的问题,以便我可以改进我的答案。

尝试使用
End(xlDown)。在我的个人宏中选择
。首先,我在我编写宏的原始excel文件中对此进行了测试,它在每个步骤中都工作得很好。但问题发生在我在另一个文件中使用它时


在一些测试之后,我更改了
。用
选择
。激活
,它就工作了。我不能100%确定我们是否在同一页上交谈,因此请告诉我这是否解决了您的问题,以便我可以改进我的答案。

除非该工作表处于活动状态,否则您无法选择范围。通常情况下,最好避免使用
Select
ActiveCell
ActiveSheet
Activate
-请参阅。
“失败得很严重。
这可能是今年最好的评论。关于您的问题,rng8是另一个工作表中的一个范围,它会导致ActiveSheet出错。您可以在活动工作表中使用“仅选择”。以前的所有范围都引用同一工作表,但仅引用不同的范围。它们都工作得很好,但没有一个使用过Select。使用Select的那一刻,Excel就发疯了,开始粘贴到错误的工作表中。如果我试图在代码运行之前指定“ThisWorkbook.Worksheets(5).Activate”以确保Excel理解我所说的工作表,则主子工作表将失败。除非该工作表处于活动状态,否则无法选择范围。通常情况下,最好避免使用
Select
ActiveCell
ActiveSheet
Activate
-请参阅。
“失败得很严重。
这可能是今年最好的评论。关于您的问题,rng8是另一个工作表中的一个范围,它会导致ActiveSheet出错。您可以在活动工作表中使用“仅选择”。以前的所有范围都引用同一工作表,但仅引用不同的范围。它们都工作得很好,但没有一个使用过Select。使用Select的那一刻,Excel就发疯了,开始粘贴到错误的工作表中。如果我试图在代码运行之前指定“ThisWorkbook.Worksheets(5.Activate)”,以确保Excel理解我所说的工作表,那么主子部分将失败。感谢烦扰的爸爸:),只是出于好奇,因为我在这个实例中复制A1:C1(rng2),然后导航到rng8(A2),一直向下,然后向右移动13列,如果我想将A1:C1从下面(比如N60)一直复制到N3,它会是什么样子?目标是rng8.parent.range(“N3:”&mg8.parent.cells(cells.count,13.end(xlup).address)注意我只使用mg8.parent,因为我不知道你的工作表的名称,否则我会使用工作表(“name”)感谢被打扰的爸爸:)我只是出于好奇,因为我在这个例子中复制A1:C1(rng2),然后导航到rng8(A2)并一直向下,然后向右移动13列,如果我想从下面(比如N60)一直复制A1:C1到N3会是什么样子?目标将是rng8.parent.range(“N3:&mg8.parent.cells(cells.count,13).end(xlup).address)注意我只使用mg8.parent,因为我不知道您的工作表的名称-否则我会使用工作表(“名称”)
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
    rng2.Copy destination:= rng8.parent.range(rng8.End(xlDown).Offset(0, 13), rng8.parent.Range("N3"))