2017-05-16 1 views
0

J'ai une fonction définie par l'ADN c# Excel:ref un paramètre macro appelant une fonction ADN excel avec Application.Run

[ExcelFunction(Description = "does stuff", IsVolatile = false, IsMacroType = true, IsThreadSafe = true)] 
public object AFunction(long k \* other parameters *\) 
{ 
    // do stuff 
} 

qui est appelé en VBA comme suit:

Dim v As Variant 
v = Application.Run("AFunction", k) 

maintenant, je modifie mon ADN Excel c# comme suit:

[ExcelFunction(Description = "Retrieves valo folio", IsVolatile = false, IsMacroType = true, IsThreadSafe = true)] 
public object AFunction(ref double x, long k \* other parameters *\) 
{ 
    // do stuff 
    // update x 
} 

l'idée étant que je vais passer à un double qui sera mis à jour, et que je vais utiliser après.

Je l'appelle en VBA comme suit:

Dim v As Variant 
v = Application.Run("AFunction", x, k) 

Mais x ("rationnés" as Double) n'est pas mis à jour. J'ai essayé un

Dim x() as Double 
Redim x(1) 

et

Dim v As Variant 
v = Application.Run("AFunction", x(1), k) 

mais ici aussi x(1) n'est pas mis à jour.

Y at-il un problème avec le ref dans le c#, ou est le problème causé par le?

+1

'Application.Run' ne prend pas en charge les paramètres byref de par leur conception. Il enveloppe les valeurs passées en variantes et les transmet en avant. – GSerg

+0

Vous pouvez mettre ceci dans une réponse pour que je l'accepte. Thx de toute façon. –

+0

Au contraire, 'CallByName' supporte' byref'. Y a-t-il une classe sur laquelle vous pouvez appeler 'CallByName'? – GSerg

Répondre