Avantages et inconvénients de l'automatisation D'Excel à L'aide de VBA vs.Net

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.

ma première réaction a été D'utiliser VBA. Je l'ai déjà utilisé pour piloter Excel (disons il y a 5 ans). Mais j'ai alors commencé à me demander si Je ne serais pas mieux à l'aide de VSTO.

est-ce que quelqu'un a de l'expérience en utilisant les deux tech et peut énumérer les avantages et les inconvénients afin que je puisse évaluer quel cours serait le meilleur.

12
demandé sur Andy 2010-03-22 06:14:04

5 réponses

je suggère que vous vous en teniez à VBA pour votre développement standard avec Excel, et que vous appreniez .NET de ce côté. Utiliser .NET est certainement la prochaine étape, mais il rend votre développement Excel beaucoup plus difficile.

en outre, VSTO ne permet pas la création de fonctions de feuille de travail définies par l'utilisateur ("UDFs"), de sorte que vous auriez besoin d'un front-end VBA, ou de créer un com géré add-in sans utiliser VSTO, afin de le faire. En comparaison, VBA vous permet de créer des UDFs avec pratiquement aucun effort.

L'utilisation de .NET présente de nombreux avantages, surtout en ce qui a trait à la frappe forte, aux capacités complètes en OOP et à la capacité d'organiser des projets de plus grande envergure. mais VBA a d'énormes avantages par rapport à .NET quand il s'agit de déploiement, ce qui est assez compliqué avec Excel quand il s'agit de traiter avec .NET ou VSTO. VBA est également une langue plus facile à apprendre et de commencer avec.

dans l'ensemble, je suggère que vous utilisez VBA pour votre développement quotidien, mais apprendre VB.NET or C# on the side so que vos compétences en programmation peuvent se développer en dehors de L'arène Excel. Finalement, vos compétences .NET peuvent devenir assez forts de sorte que vous préférerez l'utiliser plutôt que VBA, mais vous devrez devenir assez bon à .NET pour ce jour à venir.

est-ce que je perds les avantages de l'enregistrement macro si je développe des applications Excel dans Visual Studio?.)

Edit: mise à Jour concernant Andy commentaire, ci-dessous:

Questions comme le déploiement, le débogage et UDFs étaient ceux que je a la recherche d'informations de comparaison sur. À en juger par les réponses à la question j'aurais dû mentionner que J'ai 5+ années d'expérience avec C#, alors que mes compétences VBA (ou manque il n'en sort que 3 ou 4 fois par décennie

Ok, oui, vous devriez avoir dit! La plupart des gens avec des questions comme celle-ci sont des programmeurs VBA qui cherchent à entrer .NET. J'ai mal compris.

dans votre cas, vous devriez utiliser C#, mais je suggérerais fortement D'utiliser C# 4.0 sur Visual Studio 2010 pour cela, il améliorera grandement la syntaxe qui est requise lors de l'exploitation contre un modèle D'objet COM tel Qu'Excel. VS 2010 est actuellement en bêta 2 et la date de la RTM est fixée au 12 avril, donc nous y sommes 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 paquets de configuration ou les outils similaires et Visual Studio Tools for Office (VSTO) est exceptionellement bon pour deux choses:

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

  2. utiliser les commandes .NET sur une feuille de travail. Je ne sais pas si cela fait partie de ce que vous prévoyez de faire, mais VSTO permet d'utiliser les commandes .NET sur la feuille de travail. C'est un très belle capacité pour un programmeur. net puisque ces contrôles sont un peu plus lisse et sont spécifiquement conçus pour travailler avec .NET.

malheureusement, VSTO est seulement disponible pour Excel 2003 et au-dessus et je pense que vous devez créer des add-ins séparés pour Excel 2003 et Excel 2007. En revanche, les add-ins com gérés sans utiliser VSTO peuvent être rendus compatibles avec Excel 2000 et les versions supérieures sans aucune difficulté. Enfin, la VSTO ne soutient pas la création de UDFs et, par conséquent, vous devez soit créer un add-in d'automatisation gérée pour cela ou utiliser une VBA front-end qui appelle vos fonctions VSTO.

dans l'ensemble, je dirais VSTO si vous pouvez vous limiter à Excel 2007 et au-dessus. Je considérerais VSTO si vos exigences sont pour Excel 2003 et au-dessus. Et j'utiliserais un managed COM add-in si vous avez besoin de pouvoir exécuter sur Excel versions 2000 et supérieures.

pour le support UDF, je créerais une automation managée add-in, qui serait viable pour Excel 2002 et au-dessus. Si vous avez besoin D'UDFs sur Excel 2000 ou moins, vous aurez besoin d'une interface VBA qui appelle les méthodes COM-visible dans votre assemblage .NET.

ce sont les pour et les contre de base, comme je le vois. Laissez-moi savoir si vous avez besoin d'en savoir plus.

-- Mike

6
répondu Mike Rosenblum 2017-05-23 10:30:45

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

Avertissement: je n'ai pas de connexion que ce soit avec Addin Express ou Excel DNA

4
répondu Charles Williams 2011-01-13 15:03:57

Je ne pense pas qu'il y ait quelque chose d'intrinsèquement mal à coder ceci en VBA dans Excel. Il a l'avantage de fonctionner dans l'espace process 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 comme un Add-in Excel.

si vous voulez que votre outil ait une identité distincte de celle D'Excel, alors L'automatisation est votre option. C'est un peu plus lent (vous êtes "hors de") et le modèle d'objet est légèrement moins propre, mais votre outil aura sa propre identité.

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

2
répondu Tim Jarvis 2010-03-22 03:41:38

SpreadsheetGear for .NET vous permet d'ajouter une composante de tableur compatible Excel à votre .NET (WinForms, ASP.NET, etc...) applications sans les inconvénients (performances, facilité d'utilisation) de COM Interop.

vous pouvez en savoir plus sur le tableur Windows Forms spreadsheet control ici, Voir live ASP.NET Echantillons ici et téléchargez le procès gratuit ici si vous voulez essayer vous-même.

Avertissement: I own SpreadsheetGear LLC

0
répondu Joe Erickson 2010-03-22 14:54:05

beaucoup de bonnes réponses ici donc je vais essayer de faire un point qui n'a pas encore été fait. Je m'en tiendrais à l'aide de VBA. Il y a beaucoup de raisons, mais les principaux facteurs pour moi seraient:

  • N'exige pas que le côté client ait une ver spécifiée. de .Installée nette

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

0
répondu aevanko 2011-08-08 09:36:34