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