2014-07-11 2 views
0

У меня есть макрос Excel, который отображает каждый месяц в виде отдельного рабочего листа excel. В моем макросе «Воскресные» листы содержат часовые часы работы на одного сотрудника и дают мне еженедельную сумму. Я попытался создать функцию, которая позволит мне выбрать, какие листы мне нужны до верхнего и нижнего диапазона, но я не могу заставить его работать. В чем проблема? В настоящее время у меня есть:Вызов функции VBA

Function SampleSum(ByVal ZZ As Integer, ByVal XX As Integer) As Integer 
Application.Volatile 
SampleSum = Sheets(ZZ).Range("BA5") + Sheets(XX).Range("BA5") 
Sheets(XX).Range("BB5") = SampleSum 
End Function 

Я хотел бы быть в состоянии «назвать» функцию с любым числом или 2 переменных занимает место ZZ & XX.

+0

функции, которые вы описали работает ... – Nicolai

+1

функция, называемая из рабочего листа может ** ** только возвращает значение к вызывающей ячейке. Вы не можете использовать UDF для управления другими диапазонами/ячейками. –

+1

См. [Это сообщение] (http://stackoverflow.com/questions/23433096/using-a-udf-in-excel-to-update-the-workheet) для объяснения и возможного обходного пути. в противном случае вы должны сделать это как подпрограмму. –

ответ

1

Прежде всего, так как вы объявили приложение «летучий», я бы не программно редактировать таблицу оттуда, так как он может пойти в цикле: http://msdn.microsoft.com/en-us/library/office/ff195441%28v=office.15%29.aspx Во-вторых, функция возвращает что-то. Подпрограмма не работает. Если вам нужно написать только в ячейке, я бы рекомендовал использовать подпрограмму.

Function SampleSum(ByVal ZZ As Integer, ByVal XX As Integer) As Integer 
    Application.Volatile 
    SampleSum = Sheets(ZZ).Range("BA5") + Sheets(XX).Range("BA5") 
End Function 

Sub Main() 
    Sheets(XX).Range("BB5") = SampleSum(ZZ, XX) 
End Sub 

ZZ и XX в «Main» Sub могут быть номера вашего выбора

+0

Приносим извинения, что это была просто пробная функция, с которой я пытался найти работу. В исходном подкоде сумма была равна 0 'Для a = 5 to 97 ' sum = 0 'Для g = (c - 7) В c ' sum = sum + Листы (g) .Цели (a, 53) 'wbMain.Worksheets (c) .Cells (a, 54) = sum ' Следующий g 'Следующий a. Мне нужна функция, которая будет принимать 2 указателя листа по моему выбору, вместо повторения этого кода. Я не могу заставить его работать как функция. И вышеприведенная функция выборки не обновляет еженедельную итоговую сумму, если я обновляю любой из ежедневных итогов после запуска макроса. Я думал, что Application.Volatile будет исправлять это: – Stove

+0

Вы пытались использовать событие «On workheet change»? – Noldor130884

+0

Я не думаю, что когда-либо слышал об этом. Как это работает? – Stove

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