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

Posted

技术标签:

【中文标题】尝试在 Excel VBA 中设置 RefersToRange 属性时出现问题【英文标题】:Problems trying to set RefersToRange property in Excel VBA 【发布时间】:2011-04-14 19:34:00 【问题描述】:

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

在我朋友的主工作表中,在 B7 中,她从一个列表中进行数据验证,其中 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】:

RefersToRange 是只读的,至少在 XL 2003 和可能在 2007 年。

【讨论】:

就是这样。当我第一次查看代码时,我已经检查过,然后朝不同的方向走去,忘记了回去再看一遍。谢谢! 不客气。它似乎应该触发运行时错误。

以上是关于尝试在 Excel VBA 中设置 RefersToRange 属性时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在Excel中设置日期倒计时函数,不包含周六周日两天。

在 vba 的插入查询中设置日期参数?

在 VBA 中设置 UDF 描述时出错

如何在 vba 中设置选中的属性(格式或控制工具箱)

2010 Access vba如何将Excel中的displaygridlines设置为false?

如何在 Access VBA 中设置对正在运行的对象的引用