Проблемы при попытке установить свойство RefersToRange в Excel VBA - PullRequest
1 голос
/ 14 апреля 2011

Сегодня я помогал другу решить проблему с VBA в Excel 2007, и мы столкнулись с проблемой, с которой, как мне кажется, я сталкивался в прошлом, и обходили ее.Это проблема с изменением диапазона, к которому относится имя.

На главном рабочем листе моей подруги, в 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 Ответ

3 голосов
/ 15 апреля 2011

RefersToRange доступен только для чтения, по крайней мере в XL 2003 и, вероятно, в 2007 году.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...