...福利局
我正在尝试在工作表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
我收到运行时错误' 1004' - '方法'范围'对象' _Worksheet'失败'在第15行,我有Set HDaERCloseDNR = HDaER.Range(HDaER.Cells(3, 2) & HDaER.Cells(HDaERCloseLR, HDaERCloseLC))
。
我在第21行使用.Select
命令作为命名范围HDaERClose
来测试代码,但从未去过那里。
我该如何解决这个问题?
编辑1:
在向代码申请以下评论和答案中的建议更改后,我得到了这个结果:
我必须选择范围,但我需要的是第一个数据集的最后一行(示例中为105)和最后一列(示例中为E)的范围。
应排除第105行和第E列的数据。
适当的方法是什么?
END OF EDIT 1
答案 0 :(得分:4)
我认为您打算使用逗号(,
)代替&符号(&
)。
15 Set HDaERCloseDNR = HDaER.Range(HDaER.Cells(3, 2) , _
16 HDaER.Cells(HDaERCloseLR, HDaERCloseLC))
答案 1 :(得分:2)
除K.Dᴀᴠɪs提出的解决方案外,我建议进行以下修改以确保准确回报,
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
答案 2 :(得分:1)
将所有建议的更正应用于初始代码后,最终版本为:
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
)
我认为您打算使用逗号(,)而不是&符号(&)。
15 Set HDaERCloseDNR = HDaER.Range(HDaER.Cells(3, 2) , _ 16 HDaER.Cells(HDaERCloseLR, HDaERCloseLC))
将错误的&
替换为,
。
更正之后,行15
(最终版本中的行18
)没有问题,所以这就是我正在寻找的答案。
除了K.Dᴀᴠɪs提出的解决方案之外,我建议 以下修改以确保准确的退货,
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
将After:=HDaER.Cells(1,1)
添加到HDaERCloseLR
和HDaERCloseLC
变量定义,后一版本12
和15
行9
和12
前一版本分别为{1}}。
我没有看到您为
HDaERClose
分配值的位置。我觉得你 想把它括在引号"HDaERClose"
中然后你会用它来调用它Range("HDaERClose").Select
我在引号中关闭了HDaERClose
并将Scope
替换为HDaER
,引用Worksheet("HDaER")
,在后一代码版本的第22行中将其指定为范围名称,如下所示:
HDaER.Names.Add Name:="HDaERClose", RefersTo:=HDaERCloseDNR
用这一行对问题进行了分类。
(关于编辑1 )
然后你需要
hdaer.cells(3,2).currentregion
我将With
函数从With HDaER.Cells
更改为With HDaER.Cells(3,2).CorrentRegion
,并将引用仅校准为我需要的Range
。
可以找到@ScottCraner关于定义最后一行和最后一列的非常有用的链接here。
非常感谢所有参与解决该问题的人。我希望它也能帮助别人。