2013-03-09 4 views
0

Я пытаюсь получить этот код, чтобы работать для суммирующих ячеек:Суммирования клетки из другого листа, используя смещение

Worksheets("Sheet2").Range("C3").Offset(i, j).Formula = "=Sum(" 
&Worksheets("Sheet1").Range("A3").Offset(2*i,j).Address & ":" & 
Worksheets("Sheet1").Range("A7").Offset(2*i,j).Address & ")" 

Она продолжает давать мне правильные клетки, но от неправильного листа. Итак, для первой итерации я получаю сумму (A3: A7) в ячейке C3 Sheet2, но A3: A7 остается ссылкой на Sheet2 not Sheet1.

Спасибо!

ответ

2

Вам также необходимо указать название листа в формуле. Ваш код будет работать, если вы пишете так:

Worksheets("Sheet2").Range("C3").Offset(i, j).Formula = "=Sum(Sheet1!" & _ 
Worksheets("Sheet1").Range("A3").Offset(2 * i, j).Address & ":" & _ 
Worksheets("Sheet1").Range("A7").Offset(2 * i, j).Address & ")" 
1

Попробуйте этот код - он использует параметр .AddressExternal:=True для получения полного адреса. В то время как это также включает имя книги, Excel автоматически удалит это, так что вы закончите с Sheet1! A3. Также обратите внимание, что я использовал диапазон A3:A7 в качестве источника, .Address может обрабатывать диапазоны нескольких клеток, и вы не должны заботиться о нем вручную:

Sheets("Sheet2").Range("C3").Offset(i, j).Formula = "=SUM(" & _ 
    Sheets("Sheet1").Range("A3:A7").Offset(2 * i, j).Address(External:=True) & ")" 

Имейте в виду, что жесткое кодирование ссылки, такие как A3 может привести к ошибки в конечном счете, поскольку пользователь (или даже разработчик на определенном этапе) может изменить структуру листа. Лучше всего использовать именованные диапазоны, т. Е. Создать именованный диапазон для каждой ячейки/диапазона, на который вы ссылаетесь, и затем получить к нему доступ в VBA с помощью SheetX.Range("rngStartCell") или аналогичных!

Смежные вопросы