试图在Excel VBA中设置RefersToRange属性时出现问题
||
今天,我正在帮助一个朋友解决Excel 2007中VBA的问题,我们遇到了一个我认为过去曾遇到并解决过的问题。更改名称所指向的范围是一个问题。
在我朋友的主工作表上,在B7中,她从“列表”中进行数据验证,其中“源”是命名范围CAT_LOOKUP。她想运行一个子程序,该子程序将过滤另一个工作表上的表,以仅显示与B7中的值相对应的行,然后将这些行用作该工作表上另一个单元格中的验证源。
这是我们正在使用的VBA的相关部分:
Dim strCAT As String
Dim strACT As String
Dim sh As Worksheet
Dim rng As Range
Dim rngDest As Range
If Cells(7, 2) <> \"\" Then
strCAT = Cells(7, 2).Value
Sheets(\"CAT LOOKUP\").Range(\"$A2:$C393\").AutoFilter Field:=1, _
Criteria1:=strCAT
Set sh = Sheets(\"CAT LOOKUP\")
Set rng = sh.Range(\"B34:B56\")
rng.ClearContents
Set rng = sh.Range(sh.Range(\"B1\"), sh.Range(\"B1\").End(xlDown))
rng.Copy
Set rngDest = sh.Range(\"B34\")
rngDest.PasteSpecial
ActiveWorkbook.Names(\"CAT_LOOKUP\").RefersToRange = _
sh.Range(sh.Range(\"B35\"), sh.Range(\"B35\").End(xlDown))
Else
Set sh = Sheets(\"CAT LOOKUP\")
Set rng = sh.Range(\"B34:B56\")
rng.ClearContents
Sheets(\"Ad Hoc Request\").Select
End If
CAT_LOOKUP已经定义。运行此代码时,将清除CAT_LOOKUP范围,并且该范围的定义不变。
我在一个旧项目的笔记中发现,我使用的是RefersToR1C1
而不是RefersToRange
,所以我将这一行更改为:
ActiveWorkbook.Names(\"CAT_LOOKUP\").RefersToR1C1 = _
\"=\'CAT LOOKUP\'!R35C2:R\" & sh.Range(\"B35\").End(xlDown).Row & \"C2\"
并且代码按预期工作,重置了命名范围,以便相应的数据验证正常工作。
这仅仅是RefersToRange
实现中的错误,还是我们使用它的方式有问题?
没有找到相关结果
已邀请:
1 个回复
盟犯涩沟都