UDF работает в VBA, возвращает #REF! в книге - PullRequest
0 голосов
/ 03 ноября 2018

Я написал функцию, которая вычисляет продажи за 2014 год для конкретных рабочих листов внутри рабочей книги, а затем печатает общие продажи за 2014 год в определенной ячейке. Я могу вызвать функцию внутри VBA, никаких проблем. Но если попытаться использовать функцию в рабочей книге, я получаю ошибку ссылки. Я знаю #REF! означает, что формула относится к недопустимой ячейке. Нужно ли возвращать какое-то значение в ячейку, в которую я пытаюсь вызвать функцию? Например, если я ввожу sum2014 ("A1151") в ячейку F25, нужно ли возвращать какое-то логическое значение для правильной работы функции?

Function sum2014(someaccount As String) As Currency
Dim i As Integer
Dim total As Currency
Dim ws As Worksheet
total = 0
Set ws = ActiveWorkbook.Worksheets(someaccount)
     For i = 1 To 50
          If ws.Range("A3").Offset(i, 0) >= DateValue("January 1, 2014") And ws.Range("A3").Offset(i, 0) <= DateValue("December 1, 2014") Then
          total = total + ws.Range("A3").Offset(i, 1)
          sum2014 = total
          End If
     Next
     If Worksheets("New Charges").Range("C3").Offset(i, 0) = someaccount Then
          Worksheets("New Charges").Range("E3").Offset(i, 0) = total
     End If
     For i = 1 To 5
          If Worksheets("New Charges").Range("C3").Offset(i, 0).Value = someaccount Then
          Worksheets("New Charges").Range("E3").Offset(i, 0).Value = total
          End If
     Next  

End Function

Пример вызова функции внутри VBA:

Sub testfunction()
sum2014 ("A1151")
sum2014 ("B1808")
sum2014 ("C3711")
sum2014 ("D3265")
End Sub

Я могу вызвать функцию внутри VBA, и она отлично работает. Продажи рассчитываются и размещаются в нужном месте. Но я не могу назвать UDF внутри рабочей книги. Я вызываю функцию с

 sum2014=("A1151") 

Любые советы или предложения будут с благодарностью. Возможно, я мог бы очистить функцию с помощью do while или do while, а не for for, но сейчас я просто хотел бы заставить функцию работать внутри рабочей книги, а затем вернуться к ее переписыванию позже.

1 Ответ

0 голосов
/ 03 ноября 2018

Хотя верно, что функция, вызываемая из листа , может не изменять листы (и вы можете столкнуться с проблемами , если попытаетесь использовать уловку, чтобы обойти ее), Ваша непосредственная проблема заключается в том, что sum2014 является действительным адресом диапазона Excel (столбец 13403 (SUM), строка 2014), поэтому при попытке сделать =SUM2014("A1151") возникает ошибка #REF!. Это так же, как если бы ваша функция называлась A1.

Имя, используемое в формуле, может не соответствовать допустимому диапазону Excel. Выберите другое имя (и убедитесь, что вы не меняете другие ячейки этой функции, иначе это будет ошибка #VAL!).

Если вам нужно изменить различные ячейки из подпрограммы, сделайте ее вспомогательной и вызовите ее из внешнего события, такого как нажатие кнопки или обработчик Worksheet_Change, но не из формулы в ячейке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...