J'ai été en mesure d'exécuter avec succès mon propre code .Net en suivant les étapes affichées ici Execute .NET 3.0 code from Office 2003Utilisation de bibliothèques standard .Net avec VBA
Est-il possible d'utiliser les bibliothèques standard .Net sans avoir à écrire une enveloppe ? De cette façon, nous pouvons éviter d'avoir à enregistrer et installer une DLL personnalisée dans le GAC sur la machine du client.
J'ai déjà trouvé des fichiers tlb dans les dossiers C: \ Windows \ Microsof.NET \ Framework, et j'ai pu ajouter une référence à mscorlib.dll. En regardant la documentation pour RijndaelManaged, cette classe semble être COM visible.
Je suis capable de créer une instance, mais dès que j'essaie de travailler avec elle, j'obtiens des erreurs (par exemple, "Type mismatch").
Sub Macro1()
Dim aesImplementation As New RijndaelManaged
Set key = aesImplementation.GenerateKey()
Set iv = aesImplementation.GenerateIV()
End Sub
Je suis prêt à accepter tous les hacks que vous avez à offrir!
Je ne dispose pas d'une nouvelle réponse: à l'aide. NET sans wrapper, mais si vous êtes nouveau sur VBA, vous devez savoir que déclarer quelque chose comme "As New" n'instancie pas réellement quelque chose à ce point comme il le fait dans .NET. Ce n'est pas clair pour moi si votre erreur est soulevée sur l'instanciation ou sur le 'Set'. (Je suppose que vous avez déclaré votre variable 'clé' comme le type correct, etc.) Voir http://stackoverflow.com/questions/2478097/vba-difference-in-two-ways-of-declaring-a -new-object-essay-to-understand-why/2480559 # 2480559 – jtolle
C'est fou Pourquoi avoir une nouvelle syntaxe valide si elle n'instancie pas un nouvel objet ?! Cela semble créer une instance dans ce cas, cependant, je me souviendrai au moins que "As New" n'est pas la meilleure pratique. La raison pour laquelle je n'ai pas déclaré explicitement l'objet clé est parce que j'obtiens l'erreur "Can not assign to array" si je le fais. Apparemment, cette erreur se produit lorsque vous essayez et affecter à un tableau d'un type différent. –
N'est-ce pas beaucoup de travail pour économiser un peu de travail? Je veux dire, si votre utilisateur vous permet d'exécuter une macro, pourquoi ne pas exécuter une application .NET réelle? L'interopérabilité du bureau en .NET semble assez bonne, donc vous pouvez manipuler les documents de manière égale ou supérieure! –