对象必需 - 424尝试将值设置为范围时出错

时间:2017-12-15 16:48:58

标签: excel-vba runtime-error unique advanced-filter vba

我正在尝试获取单元格的引用位置(可以轻松更改),并在已过滤的唯一记录列表中引用该位置,该位置会在用户初始化UserForm时自动更新。

在工作表9(帮助者)单元格AI2上返回工作表1(SA工资核算表单)上单元格的绝对位置。 AI2包含以下公式:

=CELL("address",INDEX('SA Payroll Dist Sheet'!B:B,MATCH(Helpers!AH2,'SA Payroll Dist Sheet'!B:B,0)))

然后单元格AJ2使用以下方法查看AI2中值的最后几位:

=RIGHT(AI2,6)

这正确返回值

$ B $ 547 (这是我想要的单元格引用)

以下是我尝试初始化UserForm时发生的情况:

运行时错误'424': 需要对象

对于以下内容:

Dim ER As Range 

  'I want 'ER' to represent the value in AJ2

Set ER = ActiveWorkbook.Sheets(9).Range("AJ2").Value 

  'Here's where debugger highlights yellow


Worksheets("SA Payroll Dist Sheet").Range("$B$15:ER").Select 

  ' Is this even the proper way to refer to the range I am after? 
  ' In this case, the range would be ("$B$15:$B$457")


Selection.Copy 
Sheet9.Range("AK2").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range _
    ("AK2"), Unique:=True 

  ' Here's where I want the list of unique records 
  ' in Sheet1.Range("$B$15:$B$457") to appear

调试器突出显示以下行:

Set ER = ActiveWorkbook.Sheets(9).Range("AJ2").Value

我试过了:

Set ER = Sheet9.Range("AJ2").Value

Set ER = Worksheets("Helpers").Range("AJ2").Value

但是我得到了同样的错误。我觉得解决这个问题的方法很简单,但我的想法已经用完了。我已经尝试过针对同一错误的其他问题的解决方案,但似乎没有解决我遇到的问题。

2 个答案:

答案 0 :(得分:0)

ER是一个对象(范围)变量,因此您可以将范围分配给变量。该值是变量的属性,因此您可以在需要时访问该属性(Value是默认属性,因此您不必严格指定它,但最好这样做)。您不能将范围的值分配给范围变量。

您还需要在下一行的引号之外使用ER。

不确定为什么要尝试选择/复制,所以离开了,但一般来说最好避免选择。

Sub x()

Dim ER As Range

'I want 'ER' to represent the value in AJ2

Set ER = ActiveWorkbook.Sheets(9).Range("AJ2")

'Here's where debugger highlights yellow

Worksheets("SA Payroll Dist Sheet").Range("$B$15:" & ER.Value).Select

  ' Is this even the proper way to refer to the range I am after?
  ' In this case, the range would be ("$B$15:$B$457")

Selection.Copy
Sheet9.Range("AK2").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range _
    ("AK2"), Unique:=True

End Sub

答案 1 :(得分:0)

谢谢SJR,您的意见和变化使我找到了一个有效的解决方案!

我不知道如何在评论部分发布代码,所以这就是我最终使用的内容:

Dim ER As Range
Set ER = Sheet9.Range("AJ2")
Sheet1.Range("$B$15:" & ER.Value).AdvancedFilter Action:=xlFilterCopy, 
CopyToRange:=Range _
    ("AK2"), Unique:=True

正如你所看到的,我也在我的过滤行中引用了错误的范围(“AK2”),我现在也更正了(“$ B $ 15:”& ER.Value)