2010-03-22 2 views
12

J'ai été chargé de créer un outil de planification financière dans Excel qui bénéficierait de certaines fonctions/macros personnalisées.Avantages et inconvénients de l'automatisation d'Excel en utilisant VBA vs .Net

Ma réaction initiale était d'utiliser VBA. Je l'ai utilisé pour conduire Excel avant (disons 5 ans). Mais j'ai alors commencé à me demander si je ferais mieux d'utiliser VSTO. Est-ce que quelqu'un a de l'expérience en utilisant les deux technologies et peut énumérer les avantages et les inconvénients afin que je puisse évaluer quel cours serait le meilleur.

+0

http://stackoverflow.com/questions/1348928/pros-and-cons-of-vb-vba –

Répondre

6

Je suggère que vous persévérez avec VBA pour votre norme développement avec Excel, et apprendre .NET de ce côté. Utiliser .NET est certainement la prochaine étape, mais cela rend votre développement Excel beaucoup plus difficile. En outre, VSTO n'autorise pas la création de fonctions de feuille de calcul définies par l'utilisateur ("UDF"), vous avez donc besoin d'un frontal VBA ou créez un complément COM géré sans utiliser VSTO pour cela. . En comparaison, VBA vous permet de créer des fonctions UDF avec pratiquement aucun effort. L'utilisation de .NET présente de nombreux avantages, notamment en termes de typage fort, de capacités de POO complètes et de capacité à organiser des projets de plus grande taille. mais VBA a d'énormes avantages sur .NET quand il s'agit de déploiement, ce qui est assez compliqué avec Excel lorsqu'il s'agit de .NET ou VSTO. VBA est aussi une langue plus facile à apprendre et à utiliser. Dans l'ensemble, je suggère que vous utilisiez VBA pour votre développement au jour le jour, mais apprenez VB.NET ou C# sur le côté afin que vos compétences en programmation puissent croître en dehors de l'arène Excel. Finalement, vos compétences .NET peuvent devenir suffisamment fortes pour que vous préfériez l'utiliser sur VBA, mais vous devrez devenir très bon pour .NET pour ce jour à venir.

(. Pour une autre opinion similaire à ce sujet, voir Do I lose the benefits of macro recording if I develop Excel apps in Visual Studio?)

Edit: Mise à jour concernant le commentaire de Andy, ci-dessous:

Des questions telles que le déploiement, le débogage et UDFs étaient ceux que je cherchait des informations de comparaison sur. A en juger par les réponses à la question que je aurais dû mentionner que je 5+ ans d'expérience avec C#, alors que mes compétences en VBA (ou manque de ceux-ci) ne sortent 3 ou 4 fois par décennie

Ok oui, vous auriez dû dire! La plupart des gens avec des questions comme celles-ci sont des programmeurs VBA qui cherchent à entrer dans .NET. J'ai donc mal compris.

Dans votre cas, vous devriez utiliser C#, mais je suggère fortement d'utiliser C# 4.0 sur Visual Studio 2010 pour cela, cela améliorera grandement la syntaxe requise pour fonctionner avec un modèle d'objet COM tel qu'Excel. VS 2010 est actuellement en beta 2 et la date RTM est fixée au 12 avril, nous y sommes donc presque.

En ce qui concerne le déploiement, avec votre expérience, je ne pense pas que vous aurez trop de problèmes avec les packages d'installation ou les Studio Tools comme et Visual pour Office (VSTO) est excptionally bon pour deux choses:

  1. Création d'un arrangement de ruban personnalisé pour votre complément via un concepteur de glisser-déposer. Sans le concepteur de glisser-déposer, vous devez fournir XML à la place. XML est très bien si vous me demandez, mais le concepteur de glisser-déposer est vraiment un rêve à utiliser

  2. Utilisation des contrôles .NET sur une feuille de calcul. Je ne sais pas si cela fait partie de ce que vous envisagez de faire, mais VSTO permet aux contrôles .NET d'être utilisés sur la feuille de calcul. C'est une très bonne fonctionnalité pour un programmeur .NET car ces contrôles sont un peu plus lisses et sont spécialement conçus pour fonctionner avec .NET.

Malheureusement, VSTO est uniquement disponible pour Excel 2003 et au-dessus et je pense que vous devez créer des compléments séparés pour Excel 2003 et Excel 2007. COM managés compléments faites sans utiliser VSTO, d'autre part , peut être rendu compatible pour Excel 2000 et au-dessus sans difficulté. Enfin, VSTO ne prend pas en charge la création de fonctions UDF et, par conséquent, vous devez créer un complément d'automatisation géré pour cela ou utiliser un frontal VBA qui appelle vos fonctions VSTO.

Dans l'ensemble, je voudrais aller avec VSTO si vous pouvez vous limiter à Excel 2007 et au-dessus. Je considérerais VSTO si vos conditions sont pour Excel 2003 et au-dessus. Et je voudrais aller avec un add-in COM géré si vous devez être en mesure de fonctionner sur les versions Excel 2000 et supérieures.

Pour la prise en charge UDF, je créer un complément d'automatisation géré, qui serait viable pour Excel 2002 et versions ultérieures. Si vous avez besoin d'UDF sur Excel 2000 ou inférieur, vous aurez besoin d'un frontal VBA qui appelle les méthodes COM-visible dans votre assembly .NET.

Ce sont les avantages et les inconvénients de base, comme je le vois. Faites-moi savoir si vous avez besoin d'en savoir plus.

- Mike

+0

Cheers. Des problèmes tels que le déploiement, le débogage et les fonctions UDF étaient ceux sur lesquels je cherchais des informations de comparaison. A en juger par les réponses à la question, j'aurais dû mentionner que j'ai plus de 5 ans d'expérience avec C#, alors que mes compétences VBA (ou leur absence) n'apparaissent que 3 ou 4 fois par décennie. – Andy

+0

Ok, je ne me suis pas rendu compte que vous aviez tellement d'expérience en C#. J'ai maintenant mis à jour ma réponse ci-dessus. –

+0

Pour faire écho au point de vue de Mike concernant le déploiement, vous aurez besoin de VSTO séparés pour 2007 et 2010 - et peut-être 2013. Il faut plusieurs projets pour construire les VSTO. Si vous construisez pour 2003, je crois que vous êtes coincé avec .NET 2.0, et .NET 4 pour le reste. –

2

Je ne pense pas qu'il y ait quelque chose de fondamentalement mauvais dans le codage de VBA dans Excel. Il a l'avantage de fonctionner dans l'espace de processus d'Excel et l'interaction VBA avec le modèle d'objet Excels est très simple. Cependant, vous (et vos utilisateurs) devez vraiment penser à votre outil en tant que complément Excel.

Si vous souhaitez que votre outil possède une identité distincte de celle d'Excel, Automation est votre option. C'est un peu plus lent (vous êtes "hors processus") et le modèle d'objet est légèrement moins propre, mais votre outil aura sa propre identité.

(note si vous utilisez C# et si vous avez l'utilisation de l'option VS2010 et C# 4 il y a un tas d'améliorations d'automatisation qui valent la mise à niveau)

+0

FYI - vous pouvez écrire des compléments en VBA pur et obtenir la séparation de code/données que vous recherchez. Il semble que vous disiez que vous ne pouvez pas écrire des compléments en VBA pur, mais je pourrais vous mal interpréter. – oob

+0

euh, non vous avez mal interprété ce que j'ai dit. En fait, je déclare tout à fait explicitement que "besoin de vraiment penser à votre outil comme un complément Excel" (lors du codage en VBA) –

0

vous permet d'ajouter un composant tableur compatible Excel pour vos applications .NET (WinForms, ASP.NET, etc ...) sans les inconvénients (performances, facilité d'utilisation) de COM Interop .

Vous pouvez en savoir plus sur le SpreadsheetGear Windows Forms contrôle feuille de calcul here, voir des échantillons d'ASP.NET en direct here et télécharger l'essai gratuit here si vous voulez essayer vous-même.

Disclaimer: Je possède SpreadsheetGear LLC

4

Compte tenu de votre familiarité avec C# Je vous recommande de regarder Addin Express (coûts) et Excel ADN (gratuit), ainsi que VSTO. Addin Express a une version PIA neutre qui simplifie le déploiement, peut gérer à la fois les fonctions et les commandes et peut utiliser les interfaces Automation et XLL (XLL est beaucoup plus rapide que Automation). Excel DNA est plus optimisé pour l'interface XLL mais est idéal pour développer des fonctions de feuille de calcul.

Disclaimer: Je n'ai aucun lien avec soit Addin Express ou ADN Excel

0

Beaucoup de grandes réponses ici, donc je vais essayer de faire un point qui n'a pas été encore fait. Je voudrais coller avec VBA. Il y a BEAUCOUP de raisons, mais les facteurs principaux pour moi seraient:

  • Ne nécessite pas le côté client d'avoir spécifié ver. .Net installé

Cependant, VBA est évidemment pas très protégé, donc si vous avez le code que vous voulez cacher, il est préférable d'aller avec .Net probobly.

Questions connexes