2015-04-09 3 views
0

Возможно, я пытаюсь сделать слишком много здесь, но я много часов работал над этим без везения. Я надеюсь, что вы можете помочь.VBA Передача имени диапазона из другого рабочего листа в функцию

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

Моя цель - вызвать функцию для суммирования столбца, указанного именованным диапазоном, на другом листе, называемом клиентскими платежами.

Вот мой код, который работает:

Function PayPerMonth() 
PayPerMonth = Application.WorksheetFunction.Sum(Worksheets("Client Payments").Range("C:C")) 
End Function 

я получаю всего, что является правильным, но, конечно, я указал столбец в функции. Не слишком полезно.

Вот что я пытался, что не работает:

Function PayPerMonth(ColumnToAdd) 
PayPerMonth = Application.WorksheetFunction.Sum(Worksheets("Client Payments").Range("ColumnToAdd")) 
End Function 

Это не работает, когда я удалить кавычки ColumnToAdd, и многие другие варианты я пробовал.

Что я хочу сделать, это ввести = PayPerMonth (MBPADV) или = PayPerMonth (SBTSADV) и т. Д., Чтобы вызвать функцию и нацелиться в правый столбец, где MBPADV и SBTSADV называются столбцами.

Я не вешаю использовать имена столбцов. Это просто делает его более читаемым (для меня, во всяком случае!).

Можно ли это сделать?

ответ

0

Range("named range") возвращает диапазон в Workbook, поэтому должно быть хорошо пройти в вашу функцию, которая принимает диапазон.

Если у вас есть именованный диапазон в книге под названием ColumnToAdd, это должно работать:

Function PayPerMonth(ColumnToAdd) 
    PayPerMonth = Application.WorksheetFunction.Sum(Range("ColumnToAdd") 
End Function 

Обновление за комментарии:

Function PayPerMonth(ColumnToAdd As Range) 
    PayPerMonth = Application.WorksheetFunction.Sum(Range(ColumnToAdd)) 
End Function 

Использование:

Dim MyRange as Range 
MyRange = Sheet.Columns("C") 
Amount = PayPerMonth(MyRange) 

Примечание :

Ваш вызов функции возвращает вариант. Вы можете объявить As Integer, As Single или As Float в конце Function PayPerMonth(ColumnToAdd As Range), чтобы помочь A) ускорить обработку, поскольку Excel не придется тратить время на выяснение, с какой переменной она работает, и B) самостоятельно/следующий кодер, когда приходит время для поддержания кода - явное делает ваш код более удобочитаемым.

+0

Огонь! Спасибо за ваш ответ, FreeMan. Нет имени столбца ColumnToAdd. Я предполагал, что это переменная внутри функции. То, что я хочу сделать, если это возможно, это передать в функцию имя столбца, который я хочу суммировать. Я могу сделать это? – Richard

+0

Я уверен, что мы приближаемся, но все равно нет сигары. В ваших комментариях использования выше вы отмечаете, что функция вызывается из VBA (например, другой функции или Sub). Это не то, что я хочу сделать. – Richard

+0

Я хочу вызвать функцию в нескольких ячейках на листе, например. = PayPerMonth (SBTSADV), = PayPerMonth (MBPADV) и т. Д.где параметр - именованный столбец на другом листе. Фактическая конечная функция намного сложнее этой простой суммы. Вот почему я хочу вызвать функцию в ячейке. Единственный камень преткновения, который у меня есть, - это передать имя столбца в функцию, а затем использовать его в моих расчетах. Я попробовал «Обновление за комментарии:», но это не сработало. – Richard