Какова великая мудрость в определении вашего собственного объекта, если я не могу этого сделать? - PullRequest
0 голосов
/ 01 сентября 2009

Это для Excel и VBA. Предположим, что BondClass был правильно определен в модуле класса. Я получаю # ЗНАЧЕНИЕ! когда я набираю «= GetBondPrincipal ()» в ячейку Excel. Я сделал что-то синтаксически неправильно или это просто невозможно в Excel / VBA? Я спрашиваю, потому что я действительно хочу это: Возвращает пользовательский тип данных в ячейку Excel

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

<code>
Option Explicit</p>

<p>Function InitializeBond(ir As Double, p As Double) As BondClass
   Dim mybond As BondClass
   Set mybond = New BondClass
   Call mybond.Initialize(ir, p)
   InitializeBond = mybond
End Function</p>

<p>Function GetBondPrincipal()
   Dim b As BondClass
   Set b = New BondClass
   b = InitializeBond(0.03, 100) //the code quits here, 
                                 //it doesn't like the BondClass return type?
   GetBondPrincipal = b.GetPrincipal()
End Function

Я знаю, что в приведенном мной примере мне не нужно вызывать InitializeBond, и я могу просто напечатать «Call b.Initialize (.03,100)». Код будет работать нормально, если я сделаю это. Но я не могу заставить UDF возвращать тип, отличный от встроенного. Есть ли способ сделать что-нибудь из этого? Нужно ли определять назначение для не встроенных типов?

Ответы [ 2 ]

1 голос
/ 01 сентября 2009

Подсказка: используйте «SET».

(наиболее распространенная ошибка, допущенная программистами VB в VB6 и VBA).

0 голосов
/ 01 сентября 2009

Во всяком случае, я не нахожу это очень элегантным.
Я бы лучше написал:

Function GetBondPrincipal()
   Dim b As BondClass
   Set b = New BondClass
   with b
     .param1 = 0.03
     .param2 = 100
     .InitializeBond
     GetBondPrincipal = .GetPrincipal()
   end with
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...