Относительные диапазоны в коде VBA и именованные диапазоны

У меня есть следующая формула Range("D3" , "D" & Total_Rows) = "=sum(A1:A10)" Если я вставлю столбец перед D, эта формула теперь помещается в неправильный столбец. Мне сказали использовать именованный диапазон для столбца D, но с этим типом кода я не понимаю, как я мог бы включить именованный диапазон, потому что в одном случае мне нужно, чтобы он ссылался на одну ячейку, а в другом я нужно, чтобы он ссылался на столбец.


person user2242044    schedule 24.04.2014    source источник
comment
Как сейчас выглядит часть кода с одной ячейкой?   -  person Blackhawk    schedule 24.04.2014
comment
Вы уже пробовали что-нибудь?   -  person David Zemens    schedule 24.04.2014


Ответы (1)


Я не понимаю, как я мог бы включить именованный диапазон, потому что в одном случае мне нужно, чтобы он ссылался на одну ячейку, а в другом — на столбец.

Ну, вы можете попробовать работать со свойствами диапазона Name, а затем вы можете использовать обычные методы диапазона, такие как .Resize или .Offset и т. д.

Sub Test()

'Assume there is a named range in the worksheet 
Dim nm As Name
Dim rngName As Range
Dim rngCell As Range
Dim rngColumn As Range


Set nm = ActiveSheet.Names(1)

Set rngName = Range(nm)
    MsgBox "myName address: " & rngName.Address
Set rngCell = Range(nm).Resize(1, 1)
    MsgBox "the first cell in myRange is " & rngCell.Address
Set rngCell = Range(nm).Resize(1, 1).Offset(3)
    MsgBox "the third cell in myRange is " & rngCell.Address
Set rngColumn = Range(nm).EntireColumn
    MsgBox "the column of myRange is " & rngColumn.Address

'Now insert a column in front of D

rngName.Insert

'Then view the addresses again, see that they have changed

Set rngName = Range(nm)
    MsgBox "myName address: " & rngName.Address
Set rngCell = Range(nm).Resize(1, 1)
    MsgBox "the first cell in myRange is " & rngCell.Address
Set rngCell = Range(nm).Resize(1, 1).Offset(3)
    MsgBox "the third cell in myRange is " & rngCell.Address
Set rngColumn = Range(nm).EntireColumn
    MsgBox "the column of myRange is " & rngColumn.Address


End Sub
person David Zemens    schedule 24.04.2014