尝试在Excel VBA中设置RefersToRange属性时出现问题

时间:2011-04-14 19:34:01

标签: excel vba excel-2007

我正在帮助一位朋友解决今天在Excel 2007中使用VBA的问题,我们遇到了一个问题,我认为我过去曾经遇到并解决过这个问题。更改名称所指的范围是一个问题。

在我朋友的主要工作表中,在B7中,她从List中进行数据验证,其中Source是命名范围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 个答案:

答案 0 :(得分:3)

RefersToRange是只读的,至少在XL 2​​003中,可能在2007年。