Sub Test()
Dim rng As Range
' короткий пример
With Range("A1")
.Value = .Value
Set rng = Range("A1") ' а можно как-то типа «Set rng = .» ?
End With
' почти реальный пример
With ActiveSheet.ListObjects(1).DataBodyRange
If CountA(ActiveSheet.ListObjects(1).DataBodyRange) <> 0 Then ' хотелось бы что-то типа «CountA(.Range)» или «CountA(.)»
.ClearContents
Else
.Value2 = "old"
End If
End With
End Sub
Сократить обращение с помощью переменных или вкладывая несколько With друг в друга могу — вопрос именно в возможности краткого обращения к сокращаемой части (скорее всего нет, т.к. в документации не нашёл)
Итог: к сокращаемой части обратиться нельзя, но для диапазона, например, можно использовать "дублирующее" [к основному обращению] свойство .Cells
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
так нет, однозначно. Можно лишь хитрить. Вроде того:
Код
Set rng = .Cells
ну и соответственно:
Код
' почти реальный пример
With ActiveSheet.ListObjects(1).DataBodyRange
If Application.CountA(.Cells) <> 0 Then ' хотелось бы что-то типа «CountA(.Range)» или «CountA(.)»
.ClearContents
Else
.Value2 = "old"
End If
End With
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
браво! Именно это я и хотел для диапазона (только «.Range» брал) Спасибо большое! В общем случае я понял, что никак, но в основном как раз диапазон был интересен
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
спасибо — я так и делал до совета Димы Иногда так и оставлю - короче будет, но про .Cells, конечно, надо знать — местами намного удобнее будет именно так или комбинацией обращений
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄