Dynamic Named Range error: 'Run-Time Error '1004 - Method 'Range' of object '_Worksheet' failed'
Dynamic Named Range error: 'Run-Time Error '1004 - Method 'Range' of object '_Worksheet' failed'
我正在尝试在工作表 HDaER 中命名一个动态范围。
范围应为居住区的 .Cells(3, 2)
到 HDaERCloseLR
(最后一行)和 HDaERCloseLR
(最后一列)。
到目前为止我有这个:
1 Dim HDaER As Worksheet
2 Dim HDaERCloseLR As Integer
3 Dim HDaERCloseLC As Integer
4 Dim HDaERCloseDNR As Range
5 Dim HDaER As String
6 Set HDaER = Sheets("HDaER")
7
8 With HDaER.Cells
9 HDaERCloseLR = .Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, _
10 SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
11
12 HDaERCloseLC = .Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, _
13 SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
14
15 Set HDaERCloseDNR = HDaER.Range(HDaER.Cells(3, 2) & _
16 HDaER.Cells(HDaERCloseLR, HDaERCloseLC))
17 End With
18
19 Scope.Names.Add Name:=HDaERClose, RefersTo:=HDaERCloseDNR
20
21 HDaERClose.Select
我明白了
Run-Time Error '1004' - 'Method 'Range' of object '_Worksheet' failed'
在第 15 行,我有 Set HDaERCloseDNR = HDaER.Range(HDaER.Cells(3, 2) & HDaER.Cells(HDaERCloseLR, HDaERCloseLC))
.
我在第 21 行对命名范围 HDaERClose
使用了 .Select
命令来测试代码,但从未去那里。
应用评论和答案中建议的更改后,我得到了这个:
我达到了 select 范围,但我需要的是直到第一个数据集的最后一行(示例中的 105)和最后一列(示例中的 E)的范围。
应排除第 105 行和第 E 列的数据。
我想你是想用逗号 (,
) 而不是 & 符号 (&
)。
15 Set HDaERCloseDNR = HDaER.Range(HDaER.Cells(3, 2) , _
16 HDaER.Cells(HDaERCloseLR, HDaERCloseLC))
除了K.Dᴀᴠɪs提出的解决方案外,我建议进行以下修改以确保准确returns,
9 HDaERCloseLR = .Find(What:="*", AFTER:=.CELLS(1,1), LookIn:=xlFormulas, LookAt:=xlPart, _
10 SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
11
12 HDaERCloseLC = .Find(What:="*", AFTER:=.CELLS(1,1), LookIn:=xlFormulas, LookAt:=xlPart, _
13 SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
对初始代码应用所有建议的更正后,最终版本为:
1 Dim HDaER As Worksheet
2 Dim HDaERCloseLR As Long
3 Dim HDaERCloseLC As Long
4 Dim HDaERReturnLR As Long
5 Dim HDaERReturnLC As Long
6 Dim HDaERCloseDNR As Range
7 Dim HDaERReturnsDNR As Range
8
9 Set HDaER = Sheets("HDaER")
10
11 With HDaER.Cells(3, 2).CurrentRegion
12 HDaERCloseLR = .Find(What:="*", After:=HDaER.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlPart, _
13 SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
14
15 HDaERCloseLC = .Find(What:="*", After:=HDaER.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlPart, _
16 SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
17
18 Set HDaERCloseDNR = HDaER.Range(HDaER.Cells(3, 2), _
19 HDaER.Cells(HDaERCloseLR, HDaERCloseLC))
20 End With
21
22 HDaER.Names.Add Name:="HDaERClose", RefersTo:=HDaERCloseDNR
23
24 Range("HDaERClose").Select
代码的输出是:
(所选范围表示动态命名范围HDaERClose
)
应用更正
- 来自@K.Davis' 答案:
I think you meant to use a comma (,) instead of the ampersand (&).
15 Set HDaERCloseDNR = HDaER.Range(HDaER.Cells(3, 2) , _
16 HDaER.Cells(HDaERCloseLR, HDaERCloseLC))
将错误的&
替换为,
。
改正后,第15
行(最终版本第18
行)没有问题,这就是我要找的答案。
- 来自@Japeed 的回答:
In addition to the solution posed by K.Dᴀᴠɪs, I would suggest the
following modification to ensure accurate returns,
9 HDaERCloseLR = .Find(What:="*", AFTER:=.CELLS(1,1), LookIn:=xlFormulas, LookAt:=xlPart, _
10 SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
11
12 HDaERCloseLC = .Find(What:="*", AFTER:=.CELLS(1,1), LookIn:=xlFormulas, LookAt:=xlPart, _
13 SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
在 HDaERCloseLR
和 HDaERCloseLC
变量定义中添加了 After:=HDaER.Cells(1,1)
,在后一版本的 12
和 15
行以及 9
行中和 12
在以前的版本中,分别。
- 来自@ScottCraner 的评论:
I do not see any where you assign a value to HDaERClose
. I think you
want to enclose it in quotes "HDaERClose"
then you would call it with
Range("HDaERClose").Select
我把HDaERClose
用引号括起来,把Scope
换成了HDaER
,指的是Worksheet("HDaER")
,在后面的代码版本第22行赋值给Range Name的时候如下:
HDaER.Names.Add Name:="HDaERClose", RefersTo:=HDaERCloseDNR
解决了这一行的问题。
- 来自@ScottCraner 的评论:
(关于 编辑 1)
Then you want with hdaer.cells(3,2).currentregion
我将 With
函数从 With HDaER.Cells
更改为 With HDaER.Cells(3,2).CorrentRegion
,并将参考校准为仅我需要的 Range
。
可以找到@ScottCraner 在定义最后一行和最后一列方面非常有用的 link here。
非常感谢所有参与解决此问题的人。我希望它也能帮助其他人。
我正在尝试在工作表 HDaER 中命名一个动态范围。
范围应为居住区的 .Cells(3, 2)
到 HDaERCloseLR
(最后一行)和 HDaERCloseLR
(最后一列)。
到目前为止我有这个:
1 Dim HDaER As Worksheet
2 Dim HDaERCloseLR As Integer
3 Dim HDaERCloseLC As Integer
4 Dim HDaERCloseDNR As Range
5 Dim HDaER As String
6 Set HDaER = Sheets("HDaER")
7
8 With HDaER.Cells
9 HDaERCloseLR = .Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, _
10 SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
11
12 HDaERCloseLC = .Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, _
13 SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
14
15 Set HDaERCloseDNR = HDaER.Range(HDaER.Cells(3, 2) & _
16 HDaER.Cells(HDaERCloseLR, HDaERCloseLC))
17 End With
18
19 Scope.Names.Add Name:=HDaERClose, RefersTo:=HDaERCloseDNR
20
21 HDaERClose.Select
我明白了
Run-Time Error '1004' - 'Method 'Range' of object '_Worksheet' failed'
在第 15 行,我有 Set HDaERCloseDNR = HDaER.Range(HDaER.Cells(3, 2) & HDaER.Cells(HDaERCloseLR, HDaERCloseLC))
.
我在第 21 行对命名范围 HDaERClose
使用了 .Select
命令来测试代码,但从未去那里。
应用评论和答案中建议的更改后,我得到了这个:
我达到了 select 范围,但我需要的是直到第一个数据集的最后一行(示例中的 105)和最后一列(示例中的 E)的范围。
应排除第 105 行和第 E 列的数据。
我想你是想用逗号 (,
) 而不是 & 符号 (&
)。
15 Set HDaERCloseDNR = HDaER.Range(HDaER.Cells(3, 2) , _
16 HDaER.Cells(HDaERCloseLR, HDaERCloseLC))
除了K.Dᴀᴠɪs提出的解决方案外,我建议进行以下修改以确保准确returns,
9 HDaERCloseLR = .Find(What:="*", AFTER:=.CELLS(1,1), LookIn:=xlFormulas, LookAt:=xlPart, _
10 SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
11
12 HDaERCloseLC = .Find(What:="*", AFTER:=.CELLS(1,1), LookIn:=xlFormulas, LookAt:=xlPart, _
13 SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
对初始代码应用所有建议的更正后,最终版本为:
1 Dim HDaER As Worksheet
2 Dim HDaERCloseLR As Long
3 Dim HDaERCloseLC As Long
4 Dim HDaERReturnLR As Long
5 Dim HDaERReturnLC As Long
6 Dim HDaERCloseDNR As Range
7 Dim HDaERReturnsDNR As Range
8
9 Set HDaER = Sheets("HDaER")
10
11 With HDaER.Cells(3, 2).CurrentRegion
12 HDaERCloseLR = .Find(What:="*", After:=HDaER.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlPart, _
13 SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
14
15 HDaERCloseLC = .Find(What:="*", After:=HDaER.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlPart, _
16 SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
17
18 Set HDaERCloseDNR = HDaER.Range(HDaER.Cells(3, 2), _
19 HDaER.Cells(HDaERCloseLR, HDaERCloseLC))
20 End With
21
22 HDaER.Names.Add Name:="HDaERClose", RefersTo:=HDaERCloseDNR
23
24 Range("HDaERClose").Select
代码的输出是:
(所选范围表示动态命名范围HDaERClose
)
应用更正
- 来自@K.Davis' 答案:
I think you meant to use a comma (,) instead of the ampersand (&).
15 Set HDaERCloseDNR = HDaER.Range(HDaER.Cells(3, 2) , _ 16 HDaER.Cells(HDaERCloseLR, HDaERCloseLC))
将错误的&
替换为,
。
改正后,第15
行(最终版本第18
行)没有问题,这就是我要找的答案。
- 来自@Japeed 的回答:
In addition to the solution posed by K.Dᴀᴠɪs, I would suggest the following modification to ensure accurate returns,
9 HDaERCloseLR = .Find(What:="*", AFTER:=.CELLS(1,1), LookIn:=xlFormulas, LookAt:=xlPart, _ 10 SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 11 12 HDaERCloseLC = .Find(What:="*", AFTER:=.CELLS(1,1), LookIn:=xlFormulas, LookAt:=xlPart, _ 13 SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
在 HDaERCloseLR
和 HDaERCloseLC
变量定义中添加了 After:=HDaER.Cells(1,1)
,在后一版本的 12
和 15
行以及 9
行中和 12
在以前的版本中,分别。
- 来自@ScottCraner 的评论:
I do not see any where you assign a value to
HDaERClose
. I think you want to enclose it in quotes"HDaERClose"
then you would call it withRange("HDaERClose").Select
我把HDaERClose
用引号括起来,把Scope
换成了HDaER
,指的是Worksheet("HDaER")
,在后面的代码版本第22行赋值给Range Name的时候如下:
HDaER.Names.Add Name:="HDaERClose", RefersTo:=HDaERCloseDNR
解决了这一行的问题。
- 来自@ScottCraner 的评论:
(关于 编辑 1)
Then you want with
hdaer.cells(3,2).currentregion
我将 With
函数从 With HDaER.Cells
更改为 With HDaER.Cells(3,2).CorrentRegion
,并将参考校准为仅我需要的 Range
。
可以找到@ScottCraner 在定义最后一行和最后一列方面非常有用的 link here。
非常感谢所有参与解决此问题的人。我希望它也能帮助其他人。