Les objects Excel tels que la feuille de calcul, le classur, la plage, etc. peuvent être transmis de VBA à .net en tant que parameters lorsque l'assembly interop de Microsoft est référencé:
Classe .NET:
using Excel = Microsoft.Office.Interop.Excel; [ComVisible(true)] [ClassInterface(ClassInterfaceType.AutoDual)] public class MyExcelLib { public MyExcelLib() {} // default constructor public void InsertTable(Excel.Workbook wbook, ssortingng TableName, ...) { ... } }
.composé avec l'option Register for Interop COM dans Visual Studio, ou avec l'utilitaire Regasm (voir l'article de Newman pour une belle vue d'set).
Script VBA (macro excel) appelant méthode .net InsertTable () :
Dim xLib As New MyExcelLib Call xLib.InsertTable(ThisWorkbook, "Price", ..)
Cela marche; L'object Workbook peut être transmis de VBA à .NET comme paramètre. Mais le même schéma ne fonctionne pas avec les assemblages NetOffice:
using Excel = NetOffice.ExcelApi; using NetOffice.ExcelApi.GlobalHelperModules; using NetOffice.ExcelApi.Enums;
Dans la mesure où je comprends, la propriété Intégrer Interop Types de ces assemblages ne peut pas être définie sur true car cela provoque des erreurs de compilation. Apparemment, il n'est pas possible de passer des objects Excel en tant que parameters à l'aide de NetOffice. Est-ce vrai, ou existe-t-il un moyen de le faire avec NetOffice?
Utilisez le proxy natif au lieu de NO wrapper comme premier argument dans votre méthode de bibliothèque. Quelque chose comme ça:
public void InsertTable(object wbook, ssortingng TableName, ...) { Excel.Workbook myBook = new Excel.Workbook(null, wbook); myBook.Dispose(); }