Excel 2010 a 64 bit non può creare l'oggetto .net
-
02-10-2019 - |
Domanda
Ho una semplice libreria di classi che uso in Excel. Ecco una semplificazione della mia classe ...
using System;
using System.Runtime.InteropServices;
namespace SimpleLibrary
{
[ComVisible(true)]
public interface ISixGenerator
{
int Six();
}
public class SixGenerator : ISixGenerator
{
public int Six()
{
return 6;
}
}
}
In Excel 2007 vorrei creare una macro abilitato cartella di lavoro e aggiungere un modulo con il seguente codice:
Public Function GetSix()
Dim lib As SimpleLibrary.SixGenerator
lib = New SimpleLibrary.SixGenerator
Six = lib.Six
End Function
Poi in Excel ho potuto chiamare la funzione GetSix () e sarebbe tornare a sei. Questo non funziona più in Excel 2010 a 64 bit. Ottengo un errore di run-time '429':. Il componente ActiveX non può creare l'oggetto
Ho provato a cambiare il target piattaforma x64 invece di qualsiasi CPU, ma poi il mio codice non avrei compilare a meno che io incontrollato al Registro per l'interoperabilità COM opzione, così facendo rende così il mio macro abilitare cartella di lavoro non può vedere SimpleLibrary.dll così com'è non è più auto immatricolate.
Tutte le idee come posso usare la mia libreria con Excel 2010 a 64 bit?
Soluzione
Non hai descritto in dettaglio come il vostro creato il .NET assembly. Tuttavia, ci sono un certo numero di passaggi necessari per esporre l'assemblea a COM:
-
Aggiungere i seguenti attributi al codice:
using System; using System.Runtime.InteropServices; namespace SimpleLibrary { [ComVisible(true)] [Guid("71F645D0-AA78-4447-BA26-3A2443FDA691")] public interface ISixGenerator { int Six(); } [ComVisible(true)] [ProgId("SimpleLibrary.SixGenerator")] [Guid("8D59E0F6-4AE3-4A6C-A4D9-DFE06EC5A514")] [ClassInterface(ClassInterfaceType.AutoDispatch)] public class SixGenerator : ISixGenerator { [DispId(1)] public int Six() { return 6; } } }
-
Il montaggio deve essere firmata ( Progetto -> Proprietà ... -> Accesso , creare un file di chiave forte e selezionare la casella per firmare l'assembly
-
Il seguente comando è necessario registrare il gruppo (tutto in una riga):
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe SimpleLibrary.dll /tlb SimpleLibrary.tlb /codebase
Questo crea un file di libreria tipo tlb che si dovrà riferimento dal progetto VBA ( Strumenti -> Riferimenti -> Sfoglia ... nel vostro editor VBA)
-
Regolare il codice VBA:
Public Function GetSix() Dim lib As SimpleLibrary.SixGenerator Set lib = New SimpleLibrary.SixGenerator GetSix = lib.Six End Function
Troverete i passaggi descritti in modo più dettagliato in questo articolo sul database di supporto di Microsoft:
Come chiamare un Visual Basic .NET o Visual Basic 2005 assemblaggio da Visual Basic 6.0