Я создал ряд математических функций VBA в электронной таблице Excel (т.е. алгоритмы минимизации).Эти функции были проверены, и они, кажется, работают должным образом.Я хочу добавить описание этих функций и их аргументов, поэтому, основываясь на этом вопросе по теме , я попытался написать несколько подпрограмм, которые бы достигли этого:
Сначала я создал подпрограмму, которая фактически инкапсулирует описания:
Sub RegisterUDF()
myFunctionOneDescription = "Long FunctionOne description" & vbLf _
& "myFunctionOne(<...>, ..., <...>)"
myFunctionOneArguments = Array("FunctionOne argument 1 description", _
"FunctionOne argument 2 description", _
"FunctionOne argument 3 description", _
"FunctionOne argument 4 description", _
"[Optional] FunctionOne argument 5 description")
myFunctionTwoDescription = "Long FunctionTwo description" & vbLf _
& "myFunctionTwo(<...>, ..., <...>)"
myFunctionTwoArguments = Array("FunctionTwo argument 1 description", _
"FunctionTwo argument 2 description", _
"FunctionTwo argument 3 description", _
"FunctionTwo argument 4 description", _
"[Optional] FunctionTwo argument 5 description")
myFunctionThreeDescription = "Long FunctionThree description" & vbLf _
& "myFunctionThree(<...>, ..., <...>)"
myFunctionThreeArguments = Array("FunctionThree argument 1 description", _
"FunctionThree argument 2 description", _
"FunctionThree argument 3 description", _
"FunctionThree argument 4 description", _
"[Optional] FunctionThree argument 5 description")
Application.MacroOptions Macro:="myFunctionOne", Description:=myFunctionOneDescription, ArgumentDescriptions:=myFunctionOneArguments, Category:=9
Application.MacroOptions Macro:="myFunctionTwo", Description:=myFunctionTwoDescription, ArgumentDescriptions:=myFunctionTwoArguments, Category:=9
Application.MacroOptions Macro:="myFunctionThree", Description:=myFunctionThreeDescription, ArgumentDescriptions:=myFunctionThreeArguments, Category:=9
End Sub
Затем я создаю следующую подпрограмму в объекте ThisWorkbook:
Private Sub Workbook_Open()
Call RegisterUDF
End Sub
, поэтомучто описания автоматически загружаются при открытии книги.
При создании этих двух подпрограмм и оценке вида описаний функций в пользовательском интерфейсе функций (а именно той, которая появляется принажмите Ctrl + Shift + A или fx
), я начал закрывать и открывать книгу, данные описания обновляются только при выполнении Workbook_Open()
.Затем, в какой-то момент, я начал получать ошибку Out of Memory
сразу после открытия книги;ошибка возникла из третьего описания функции, приведенного выше:
Я начал избавляться от этих двух подпрограмм, но теперь все еще вижу ошибку Out of Memory
при обновлении своей книги(чьи вкладки заполнены экземплярами моих пользовательских функций);Кажется, что каждый раз ошибка Out of Memory
возникает в одном из моих UDF, но не всегда одинакова.Кроме того, когда я пытаюсь отменить отладку путем сброса VBA, сразу после этого я получаю новую ошибку Out of Memory
, прежде чем обновлять книгу или выполнять какие-либо дополнительные действия, таким образом, я попадаю в «цикл» ошибок Out of Memory
.и я вынужден закрыть Excel из диспетчера задач (1) .Этого никогда не было до того, как я попытался закодировать описания функций.
Кто-нибудь может мне помочь в понимании того, что может происходить? Я подозреваю, что это связано с использованием Application.MacroOptions
но я не уверен Любая помощь очень ценится.
(1) Я подозреваю, что это на самом деле объясняется тем фактом, что, когда я обновляю книгу или вкладку, несколько экземпляров моих пользовательских функций будутпоэтому попробуйте переоценить, поэтому каждая ошибка Out of Memory
соответствует одному экземпляру моих UDF.
[EDIT # 1] Я наблюдаю очень странное поведение.Например, на вкладке с ранее существовавшими экземплярами моих пользовательских функций в некоторых ячейках я попытался оценить одну из своих функций в новой ячейке после того, как закомментировал 2 подпрограммы, описанные выше .При записи функции в ячейку и нажатии Enter я получил ошибку Out of Memory
, исходящую из кода этого UDF.Затем я удалил из кода VBA подпрограммы с комментариями и при нажатии введите функцию, оцененную правильно!Однако при обновлении этой вкладки я получил ту же ошибку памяти, но на этот раз из другой UDF.