2015-12-17 6 views
0

У меня есть макрос, который создает книгу с несколькими листами, названными датами, например. 12-01-2015, 12-02-2015. Данные вводятся вручную в эти рабочие листы. Последнее имя рабочего листа - «TOTAL». Каждый месяц количество рабочих листов и их имена будут разными. Я пытаюсь написать фрагмент кода, который суммирует данные со всех листов на ячейки, расположенные на листе, который называется «Всего». Моя идея состояла в том, чтобы сделать это с помощью цикла, но он не работает, несмотря на то, что во время выполнения макроса не отображаются сообщения об ошибках. Формула, которая должна присутствовать в «B2» листа «Всего» после выполнения макрокоманд, отсутствует, поэтому мое предположение заключается в том, что суммирование работает только во время выполнения макроса. Я не уверен, как ввести формулу «sum» в ячейку «B2» в «Total» листе. Я бы очень признателен за любой совет, который указал бы мне в правильном направлении. Ниже приведен фрагмент кода, который не работает:Сумма за динамическое число листов

Sub Test() 

Dim i as Long 

For i = 1 To Worksheets.Count - 1 

      Worksheets("TOTAL").Range("B2").Formula = Application.WorksheetFunction.Sum(Worksheets(i).Range("B2")) 

     Next i 

     Worksheets(i).Range("B2").Value = Worksheets("TOTAL").Range("B2").Value 

End Sub 
+0

Вы хотите формулу в ячейке или просто общее значение? –

+0

Если вы хотите, чтобы общее значение изменилось, это «Worksheets» («TOTAL»). Диапазон («B2»). Формула = Application.WorksheetFunction.Sum (Рабочие листы (i) .Range («B2»)) 'к этому:' Диапазоны значений («В2»). Диапазон значений («В2»). Значения + Рабочие листы (i) .Range («B2»). Значение « –

+0

Формула только, Пожалуйста. – Trix

ответ

0

Попробуйте это;

Sub Test() 

Dim i As Long 
Dim t As String 


For i = 1 To Worksheets.Count - 1 
    If i = 1 Then 
     t = "=Sum('" & Worksheets(i).Name & "'!B2" 
    Else 
     t = t & ",'" & Worksheets(i).Name & "'!B2" 
    End If 
Next i 

Worksheets("TOTAL").Range("B2").Formula = t & ")" 

End Sub 

Он строит формулу, когда она петли, а затем присваивает формулу ячейке.

+0

Спасибо, Скотт. Когда я пытаюсь запустить этот код, я получаю ошибку времени выполнения «13». У вас есть идея, где может быть проблема? – Trix

+0

@trix используйте код ASH, который просто помещен в фактическую ячейку, вы хотите, чтобы общее количество в таблице было равно '= autosum', как и любая другая формула. Если вы хотите использовать это, каково значение 't', когда оно остановится? –

+0

«Если t = 1 Then» – Trix

2

Вы можете определить пользовательскую пользовательскую функцию (UDF), которая при вводе в ячейку суммирует соответствующие ячейки со всех других листов в одной книге. Назовем его AutoSum:

Function AutoSum() As Variant 
    AutoSum = 0 
    For Each ws In Worksheets 
     If Not ws Is Application.ThisCell.Parent Then AutoSum = AutoSum + ws.Range(Application.ThisCell.Address) 
    Next 
End Function 

Тогда вы можете просто использовать его в формулу в любой ячейке: =AutoSum()

+0

Спасибо, A.S.H. Я пытался использовать его, но я делаю что-то неправильно. Я сохранил эту функцию в отдельном модуле той же книги, где я сохраняю свой код, а затем попытался вызвать его в своей процедуре по следующей строке кода: – Trix

+0

Рабочие листы («ВСЕГО»). Диапазон («B2»). = AutoSum – Trix

+0

@Trix. Нет, вы просто вводите в ячейку B2 рабочего листа «Итого» формулу '= AutoSum()'.Или из VBA, 'Worksheets (« TOTAL »). Диапазон (« B2 »). Formula =« = AutoSum() »'. –

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