试图在Excel VBA中设置RefersToRange属性的问题

我今天正在帮助一个朋友在Excel 2007中解决VBA的一个问题,而且我们遇到了一个我认为在过去遇到和解决的问题。 改变名称引用的范围是一个问题。

在我的朋友的主要工作表中,在B7中,她从列表中进行数据validation,其中源是命名范围CAT_LOOKUP。 她希望运行一个将过滤另一个工作表上的表的子表,以仅显示与B7中的值相对应的行,然后将这些行用作该工作表上另一个单元格中validation的源。

以下是我们使用的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" 

代码按照需要工作,重新设置指定范围,以便相应的数据validation正常工作。

这只是一个在RefersToRange的实现中的错误,或者我们使用它的方式有问题吗?

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