2015-05-05 3 views
1

ШАГ 1: создание Excel 2010 надстройкиActiveX компонент не может создать объект VBA ошибку времени выполнения

Я создал новый проект, Excel 2010 надстройки, .Net 4 рамки

я добавил класс файла, чтобы «Name.cs», интерфейс «iName.cs» и добавил функцию к нему

[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
public interface iName 
{ 
string getName(); 
} 
[ClassInterface(ClassInterfaceType.None)] 
public class Name 
{ 
public string getName() 
{ 
return "Hello"; 
} 
} 

ШАГ 2: Настройка построения событий

Я настроил сборки событий про

"%Windir%\Microsoft.NET\Framework\v4.0.30319\regasm" /codebase /tlb 
"$(MSBuildProjectDirectory)\$(OutputPath)$(AssemblyName).dll" 

Это зарегистрирует Dll так, что он будет доступен в references столбца в Excel

ШАГ 3: Добавление ссылки в Excel макрос

Я создал модуль, в инструменте-> справке я добавил добавление NameProvider (название этой сборки/проекта), которое доступно после создания проекта надстройки Excel

Я попытался создать объект для этой добавленной ссылки

Public Sub test() 
Dim nameObj as NameProvider.Name 
Dim name as string 
Set nameObj = new NameProvider.Name 'error 429 occurs here 
name = nameObj.getName() 'getName function automatically comes after . 
End Sub 
+0

Вы используете Office, 64bit ? – dePatinkin

+1

Да его 64-битный @dePatinkin –

ответ

1

Для офиса 64bit вы должны скомпилировать сборку как x64 совместимых, и зарегистрировать его в рамках 64-битных, используя Regasm из рамок папка.

"%Windir%\Microsoft.NET\Framework64\v4.0.30319\regasm" /codebase /tlb 
"$(MSBuildProjectDirectory)\$(OutputPath)$(AssemblyName).dll" 

% Windir% \ Microsoft.NET \ Framework \ v4.0.30319 \ Regasm ->% Windir% \ Microsoft.NET \ Framework \ v4.0.30319 \ Regasm

+0

спасибо !! Какую модификацию я должен делать, если я хочу, чтобы она работала и для 32-битных os? –

+0

Вам необходимо скомпилировать любой процессор и создать отдельный процесс регистрации для каждой платформы. – dePatinkin

Смежные вопросы