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


应用更正


  1. 来自@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行)没有问题,这就是我要找的答案。

  1. 来自@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

HDaERCloseLRHDaERCloseLC 变量定义中添加了 After:=HDaER.Cells(1,1),在后一版本的 1215 行以及 9 行中和 12 在以前的版本中,分别。

  1. 来自@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

解决了这一行的问题。

  1. 来自@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

非常感谢所有参与解决此问题的人。我希望它也能帮助其他人。