J'ai le code suivant dans VBA (qui réside dans un classur Excel 2007):
Public Function Multiply(a As Double, b As Double) As Double Multiply = a * b End Function
Si j'invoque Multiplier à partir d'un autre code VBA, il renvoie la valeur correcte. Cependant, lorsque j'appelle Multiplier à partir de C #:
var excel = new Application {Visible = true}; excel.Workbooks.Open(filename); var returned = excel.Run("Sheet1.Multiply", (Double) a, (Double) b);
… la multiplication a lieu (je peux vérifier cela en ajoutant un suivi à la fonction Multiplication dans VBA) mais la valeur renvoyée n'est pas disponible dans mon code C #; returned
est toujours null
.
Quelqu'un pourrait-il me dire comment get à la valeur de return Multiplier à partir de mon code C #?
Avez-vous essayé de déplacer votre fonction vers un module régulier dans Excel (pas un module de feuille)?
Un exemple simple:
La feuille de calcul de Module1
possède Module1
contenant:
Public Function test() As Ssortingng test = "hello 1234" End Function
Avec objExcel
déjà configuré sur la feuille de calcul …
Dim result = objExcel.Run("Module1.test") MsgBox(result)
… produit hello 1234
dans le message contextuel.
Parce que j'avais essayé à l'origine de cela ? module1.test()
? module1.test()
(avec succès) dans la window VBA immédiate, j'essayais d'essayer d'get objExcel.Run("Module1.test()")
, mais j'avais une erreur: Cannot run the macro .... The macro may not be available in this workbook or all macros may be disabled.
– enlever les parenthèses a fait l'affaire.
Essayez de modifier votre fonction Multiply pour être comme le code ci-dessous:
Public Function Multiply(a As Double, b As Double) As Double return a * b End Function