Возврат определенного типа данных в ячейке Excel

Я искал в Интернете, и я искал вопросы здесь, в stackoverflow, но я не смог найти решение.

Вот что я хотел бы сделать:

Предположим, у меня есть следующий код в модуле класса с именем «MyClass»

Option Explicit Dim var1 as integer 

Sub Initialize (v как целое) var1 = v End Sub

Функция GetVar1 () GetVar1 = var1 End Function

Тогда у меня есть UDF в отдельном модуле с кодом

 Function InitializeMyClass(v as integer) as MyClass Dim myvar as MyClass Set myvar = new MyClass Call myvar.Initialize(v) Set InitializeMyClass = myvar End Function 

Function InitializeMyClass(v as integer) as MyClass Dim myvar as MyClass Set myvar = new MyClass Call myvar.Initialize(v) Set InitializeMyClass = myvar End Function

Функция GetMyVar (m как MyClass)
GetMyVar = m.GetVar1 ()
Конечная функция

Теперь в ячейке A1 у меня есть «= InitializeMyClass (3)», а в ячейке A2 «= GetMyVar (A1)». Я получаю ошибки #VALUE в обеих ячейках. Это, конечно, связано с тем, что я пытаюсь вернуть определенный пользователем тип данных в ячейку A1. Я чувствую, что это должно быть возможно, но я не знаю, как это сделать.

Редактировать: О да, вопрос в том, «Есть ли способ для меня вернуть пользовательский тип данных в ячейку, а затем его можно вызывать из другого UDF в приведенном выше примере?» Я не знаю, требует COM или нет. Если да, то кто-нибудь знает, как я могу начать? В идеале, если бы у кого-то был пример того, как это сработало, это было бы фантастически! "

Другое Редактирование: здесь мы идем, теперь я знаю, что это можно сделать: прочитайте это описание, оно не количественное, но даст вам представление о том, что они делают, http://www.quanttools.com/index.php?option= com_content & задачи = вид & ID = 19

Как указывают другие ответы, буквальный ответ на ваш вопрос «нет». Вы не можете хранить в ячейке ничего, кроме числа, строки, булевых, ошибок и т. Д. Вы не можете возвращать из UDF ничего, кроме простого значения, такого как те, или массив, или ссылку на диапазон.

Тем не менее, вы можете сделать по существу то, что хотите, передавая (и сохраняя в ячейках) какой-то дескриптор ваших объектов, который является значением юридической ячейки (например, «myclass: instance: 42»). Вероятно, это тот пример, который вы связали с вашим редактированием. Однако ваш код должен иметь возможность интерпретировать значение значений дескриптора и поддерживать объекты в самой памяти. Это может оказаться сложным, если вы не заботитесь о том, чтобы не просачивать объекты, так как есть много способов стереть или перезаписать дескрипторы, которые вы не можете обнаружить, если вы используете VBA для выполнения всего этого.

У меня его нет прямо сейчас, но вы можете взглянуть на книгу Financial Applications, используя Excel Add-in Development в C / C ++ от Steve Dalton:

http://www.amazon.com/Financial-Applications-using-Development-Finance/dp/0470027975/ref=ntt_at_ep_dpt_1

Он обсуждает способы работы с такими ручками более надежно с надстройками XLL.

Это похоже на жесткий файл cookie. Это немного hokey, но вы можете сделать, чтобы ваша функция Initialize вернула имя (строку), а затем добавила параметр name в функцию Get. В основном манипулирование строкой имени вместо объекта напрямую.

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

Вы можете сохранить указатель на объект в ячейке и получить объект через этот указатель, но снова область его убьет. Чтобы получить объект из указателя, он должен оставаться в области видимости, поэтому зачем хранить указатель.

Очевидно, что ваша реальная жизненная ситуация более сложна, чем ваш пример. Поэтому ответ заключается не в том, чтобы хранить объекты в ячейках, но если вы объясните, что вы пытаетесь сделать, могут быть альтернативы.

  • Функция непрерывной суммы
  • Автоматически показывать, какие переменные необходимы при использовании публичной функции vba в excel
  • Пользовательская функция для получения адреса гиперссылки из ячейки
  • Функция поиска в Excel User Defined Function
  • Многоканальная ссылка VBA UDF
  • Как использовать пользовательскую функцию во всех excel без дополнительной операции?
  • Проблема с функцией CDate в VBA
  • Давайте будем гением компьютера.