试图在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
实现中的错误,还是我们使用它的方式有问题?     
已邀请:
RefersToRange是只读的,至少在XL 2​​003中(可能在2007年)。     

要回复问题请先登录注册