Использовать оператор VBA «С» для ссылки на сам объект? - PullRequest
1 голос
/ 20 апреля 2020

Если я использую ключевое слово «С» в VBA, я должен получить доступ к атрибутам / методам в объектах, для которых «С» заблокирован. Но могу ли я сослаться на сам объект в операторе "With"?

Fe, предположим, у меня есть функция, которая принимает диапазон в качестве входных данных. Я также блокирую «С» в указанном диапазоне c для редактирования нескольких атрибутов в диапазоне:

Function ViewCellColor(inputrange As Range)
    ' This function takes a range as input
    MsgBox inputrange.Interior.Color
End Function

Sub Test()
    With Range("A1")
        .Select
        .Interior.Color = vbRed
        .Value = 10
        .Font.Bold = True
        Run ViewCellColor(Range("A1")) ' Use range as input to function
    End With
End Sub

Здесь я хочу передать сам диапазон функции, но здесь я должен переписать указатель диапазона (A1) для передачи аргумента функции. Можно ли здесь избежать двойного ввода ссылки на диапазон?

1 Ответ

2 голосов
/ 20 апреля 2020

Нельзя, если объект не предоставляет члена, который возвращает себя.

Public Property Get Self() As WhateverThatClassIs
    Set Self = Me
End Property

В случае Excel.Range свойство Cells должно работать:

With ActiveSheet.Range("A1") '<~ always qualify Range with the sheet you're working with
    .Interior.Color = vbRed
    .Value = 10
    .Font.Bold = True
    Run ViewCellColor .Cells
End With

Обратите внимание, что свойство Range.Cells не имеет никаких параметров - когда мы делаем someRange.Cells(x), индекс (x) идет против скрытого Range.[_Default] члена Range объекта, который возвращается свойством Cells.

Поскольку он ничего не возвращает, ViewCellColor должна быть процедурой Sub, а ее параметр inputRange должен быть передан ByVal (неявное и неудачное неявное значение по умолчанию ByRef), поскольку эта область не имеет права переустанавливать эту конкретную ссылку Range.

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