Hodně v kostce:
Např. můžeš vytvořit class library a tu registrovat pro COM interop. To se může hodit pro zachování xlam a "ukrytí" pouze části kódu jako jsou connectionstringy a hesla.
Tady je postup jak na to:
http://stackoverflow.com/questions/3217014/how-to-securely-store-connection-string-details-in-vba
Problém je s registrováním ve VBE nebo spíše z odreferencováním. S distribucí pomocí xlam nemám zkušenosti.
Další varianta se zachováním xlam je pomocí nástrojů třetích stran např. Secure ++ VBA pro aplikaci Microsoft Office Excel. Slibují ochranu jako u VB6 knihovny. Nemám vyzkoušené a licenci jsem nezkoumal - jen mi to vypadlo z googlu.
S přepisem do dotnetu to bude složitější. O konvertoru, který by spolehlivě převedl xlam/vba do COM-Addin jsem neslyšel. Tzn., manuální přepis do C# nebo VB.NET a použít VSTO. U COM-addin se z pohledu dotnetu bude jednat o unmanaged. Přečti si něco o PIA. Pro tebe tzn., že budeš muset, kromě jiného, řídit i svoz odpadků a uvolňování paměti.
Něco jako:
GC.Collect();
GC.WaitForPendingFinalizers();
excelApp.Quit();
Marshal.FinalReleaseComObject(excelApp);
K tomu všemu budeš potřebovat Visual studio + Office Developer Tools. Bude tě zajímat VSTO Add-in for Excel, pomocí kterého můžeš vytvořit COM doplněk. S Microsoft.Office.Interop.Excel přeprogramovat obsah xlam. Můžeš k tomu využít i API dotNetu. Doporučují si vše řádně nastudovat včetně licencování.
citovat