J'ai le code suivant dans VBA (qui réside dans un classeur Excel 2007): Si j'invoque la multiplication à partir d'un autre code VBA, il renvoie la valeur correcte. Cependant, lorsque j'appelle multiplier de C #: p> ... La multiplication a lieu (je peux vérifier cela en ajoutant un traçage à la fonction multipliée dans VBA) mais la valeur renvoyée n'est pas disponible dans mon code C #; peut-être que quelqu'un pourrait me dire comment obtenir la valeur de retour de Multiple de mon code C #? p> < / p> renvoyé code> est toujours
null code>. p>
3 Réponses :
Essayez de modifier votre fonction multiplier pour être comme le code ci-dessous:
Public Function Multiply(a As Double, b As Double) As Double return a * b End Function
Ce n'est même pas valide VBA. Voir: Office. microsoft.com/en-in/excel-help/...
Vous ne pouvez pas utiliser le mot-clé de retour dans VBA - vous devez définir la valeur de retour sur le nom de la fonction E.G. Multipliez = A * B, qui était dans la question initiale.
Ceci est vb.net, pas VBA.
Avez-vous essayé de déplacer votre fonction à un module régulier dans Excel (pas un module de feuille)? P>
J'ai créé un nouveau module, déplacé la fonction à cela et j'ai changé "feuille1.Multiphe" sur "myModule.Multiphe". Travaillé parfaitement, merci :-) Une seule question: Était-ce une perspicacité que vous avez acquise par expérience ou est-ce réellement documenté quelque part? Les informations sur MSDN, etc. sont assez clairsemées pour appeler VBA via. Interop.
@Ducanbayne feuille1 code> est un objet i>, une instance i> d'une feuille de calcul i> code> classe. Afin de faire appel à des membres d'une classe, vous avez besoin d'une instance - et de l'instance
FILLED1 CODE> Vit uniquement dans l'exécution VBA, .NET ne le voit pas. Les modules standard sont juste que: les modules procéduraux exposant le code exécutable par les membres du public; Vous n'avez pas besoin (vous ne pouviez quand même pas) instancier i> pour appeler ses membres. C'est pourquoi cela fonctionne dans
module1 code> et non dans la feuille
code>.
Un exemple simple:
Le test tableur.xlsm em> a avec < Code> objexcel code> Déjà défini sur la feuille de calcul ... p> ... produit Parce que j'avais testé à l'origine cela avec module1 code> contenant: p>
Bonjour 1234 code> dans le message contextuel. P>
? module1.test () code> (avec succès) em> dans la fenêtre immédiate VBA, j'essaie initialement d'obtenir
objexcel.run ("module1.test ()") code> Pour travailler - mais je recevais une erreur:
ne peut pas exécuter la macro .... La macro peut ne pas être disponible dans ce classeur ou toutes les macros peuvent être désactivées. Code> - Suppression des supports ont fait le tour. < / p> p>
J'ai été capable de contourner cela en modifiant multiplier () pour définir la valeur d'une cellule sur la valeur de retour et lire la valeur de cette cellule de C #. Moche mais ça marche.
Une idée de la raison pour laquelle cela fonctionne d'un module mais pas de la feuille?
Aucun que j'ai peur. En fait, je n'ai pas fait de travail significatif sur Microsoft Stuff depuis 2011, cela va probablement aller non-répondre à moins que quelqu'un d'autre puisse aider ...