Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
258 / 199 / 49
Регистрация: 18.12.2015
Сообщений: 416

Создание COM библиотеки для VBA(Excel)

05.10.2017, 18:37. Показов 7818. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Подскажите пожалуйста, кто сталкивался с подобным и как это решается:
пытаюсь создать dll с простой функцией, которая будет возвращать результат, для vba в excel. Действую по этому методу, но ничего не выходит в виду ошибки
activex component can't create object
после того как я пытаюсь назначить объекту свойства класса библиотеки
Visual Basic
1
Set objCalc = New SimpleCalc.Calc
.

Так же действовал по этому методу, ошибка та же самая.

Судя по посту на geeksengine, VS должен зарегистрировать библу, если установлен параметр "Регистрация для COM взаимодействия", но при попытке зарегистрировать через regsvr32 получаю "Модуль загружен, но точка входа DllRegisterServer не найдена".
Что конкретно я делаю не так?
Есть ли возможность загрузить библиотеку более простым способом, т.к. библа планируется ставиться на несколько компьютеров?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.10.2017, 18:37
Ответы с готовыми решениями:

Создание макроса для Word со ссылками на элементы библиотеки переводов в Excel
Всем привет!. начал много и плотно работать с техническими документами на двух языках. Вспомнил , что когда то давно в университете...

Создание файла Excel. Библиотеки
Здравствуйте. Работаю над консольным приложение, хочу реализовать создание листа Excel (или Word) и работать непосредственно уже с его...

Какие Excel библиотеки необходимы для создания CreateObject('Excel.Application') ?
проблема в том что клиент не хочет пользоваться MS Excel. существуют ли возможность работы с Open Office, Star Office, MS Works. или может...

22
 Аватар для Sklifosofsky
1085 / 915 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
05.10.2017, 23:06
Библиотеку после компиляции не перетаскиваете? Сссылка в VBA добаляется?
0
258 / 199 / 49
Регистрация: 18.12.2015
Сообщений: 416
05.10.2017, 23:59  [ТС]
Sklifosofsky, и перетаскивал, и не перетаскивал.Были попытки зарегистрировать из системной папки.
Ссылка добавляется, во втором случае при вводе даже появляется список процедур/функций, т.е. как бы видит библу.
И в любом случае маячит это
0
 Аватар для Sklifosofsky
1085 / 915 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
07.10.2017, 14:57
https://msdn.microsoft.com/que... B)&rd=true
Может что упустили.
VB.NET
1
2
3
    Public Sub New()
        MyBase.New()
    End Sub
Является обязательным для COM объекта

Попробуйте переписать в точности пример по ссылке и, не трогая библиотеку с папки компиляции, подрубиться к ней (.tlb)
При компиляции не забудьте галочку поставить в разделе "компиляция" "регистрация для COM-взаимодействия"
1
258 / 199 / 49
Регистрация: 18.12.2015
Сообщений: 416
08.10.2017, 00:05  [ТС]
Sklifosofsky, я тоже так считаю, что я где-то, что-то упустил(у меня есть подозрение, что дело может быть в самом excel). Код из вышеприведенной вами ссылке я уже пытался использовать(хотя он по сути тот же самый, что я приводил по второй ссылке постом выше), пробую еще раз и подключаюсь к tlb в папке с проектом.
На картинке видно, что при попытке набрать функцию AddNumers, всплывают подсказки параметров, значит все таки связь есть, я прав?
А вот при попытке установить Set'ом объекту obj свойства мы получаем как обычно
Миниатюры
Создание COM библиотеки для VBA(Excel)  
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
08.10.2017, 08:14
Цитата Сообщение от Jungl Посмотреть сообщение
у меня есть подозрение, что дело может быть в самом excel
Включена ли для excel "поддержка программирования .net" ? ... установка/удаление - изменить - добавить или изменить компоненты
1
258 / 199 / 49
Регистрация: 18.12.2015
Сообщений: 416
08.10.2017, 13:26  [ТС]
Step_UA, да.

Вроде разобрался, необходимо было зарегистрировать через RegAsm, независимо от того, стоит ли галочка "Регистрация для COM взаимодействия".
До этой темы моя ошибка была в том, что я пытался скормить путь к dll'ке regasm'у из папки проекта без кавычек и не заметил этого...
И конечно же нужно использовать RegAsm из C:\Windows\Microsoft.NET\Framework64 для х64 системы, иначе будет та же ошибка в excel, проверял для AnyCPU.

Всем спасибо!
0
4 / 4 / 0
Регистрация: 10.07.2017
Сообщений: 52
11.02.2019, 05:31
Здравствуйте.

Столкнулся с той же ошибкой 429 на строке
Visual Basic
1
Set obj = New ClassTest.ComClass1
Раз 10 перечитал/перепробовал все, включая ссылки, - ничего не помогает.

Причем, если после компиляции dll в VS зарегистрировать ее еще и через RegAsm:
C:\Windows\Microsoft.NET\Framework64\v4. 0.30319\RegAsm.exe "E:\Документы\Visual Studio 2017\Projects VB\ClassTest\ClassTest\bin\Release\Class Test.dll",
тогда Excel выдает: "не удается найти указанный файл", (см.скрин),
хотя, при написании кода, VBE показывает даже параметры функции в подсказке,
т.е. библиотека подключена и видна.
Если не регистрировать при компиляции, а только через RegAsm с созданием tlb, - тоже самое.

Куда еще копать?

Win7 (64), Excel 2016 (64), VS 2017 (AnyCPU)
Изображения
 
0
1715 / 1391 / 165
Регистрация: 25.07.2015
Сообщений: 2,551
11.02.2019, 10:13
В качестве размышлений :
Я бы начал копать в сторону разрядности dll. Office крайне критичен к 32 и 64 битным библиотекам, т.е.
64 -битный Office не увидит 32-битную библу. AnyCpu по умолчанию создаёт 32 битное приложение -
подразумевается , что оно должно работать на всех платформах. Попробуйте изменить платформу компиляции.
2
4 / 4 / 0
Регистрация: 10.07.2017
Сообщений: 52
12.02.2019, 00:59
И действительно!

Была мысль в эту сторону , но собственных нейронов не хватило довести до ума.
(Новичок еще в VB.NET, больше в VBA сидел.)

Если тот же AnyCPU-DLL зарегистрировать 32-битным "регазмом", тогда проблем с "поиском файла" нет.
Но все-равно появляется ошибка 429.
А если в VS заменить AnyCPU на x64, (для моего Excel), то и без RegAsm сразу все взлетело!

(Правда непонятно, как же человек смог запустить AnyCPU на 64?
описание выше: https://www.cyberforum.ru/post11234282.html
если я его правильно понял...)

---

И теперь новый подвох!
Если отключить регистрацию в VS и делать ее только через RegAsm, - снова ошибка с поиском файла...

Сравнительный анализ реестра показал, что VS, при регистрации DLL, добавляет в реестр 4 строки с путем к файлу:
Code
1
"CodeBase"="file:///E:/Документы/Visual Studio 2017/Projects VB/ClassTest/ClassTest/bin/x64/Release/ClassTest.dll"
в ветках:
[HKCR\CLSID\{FD53C10F-8590-4D26-84A6-05C57493EFEB}\InprocServer32]
[HKCR\CLSID\{FD53C10F-8590-4D26-84A6-05C57493EFEB}\InprocServer32\1.0.0.0]
[HKLM\SOFTWARE\Classes\CLSID\{FD53C10F-8590-4D26-84A6-05C57493EFEB}\InprocServer32]
[HKLM\SOFTWARE\Classes\CLSID\{FD53C10F-8590-4D26-84A6-05C57493EFEB}\InprocServer32\1.0.0.0]
(или добавка 2-х строк, а реестр сам добавляет еще 2 - тут плохо понимаю...)

В тоже время, если в RegAsm добавить ключ /codebase, то как и сказано в документации,
если DLL не является "сборкой со строгим именем", - работать не будет. :-(

Можно, конечно, еще "нарисовать топор" с "ручным" прописыванием в реестр этих строк с путем... для регистрации DLL на стороннем компе.
Но, по идее, должно же быть как-то проще без этих танцев с бубном?
В общем, я что-то плохо понимаю в этом зоопарке...
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
12.02.2019, 01:15
Цитата Сообщение от SSL-13 Посмотреть сообщение
А если в VS заменить AnyCPU на x64, (для моего Excel)...
а включен ли компонент Экселя "поддержка программирования .net" и аналогичный в средствах офиса?
0
4 / 4 / 0
Регистрация: 10.07.2017
Сообщений: 52
12.02.2019, 03:19
Цитата Сообщение от Step_UA Посмотреть сообщение
а включен ли компонент Экселя "поддержка программирования .net" и аналогичный в средствах офиса?
К сожалению толковой инфы в инете не нашел - что это, что дает и как проверить ее наличие?
У меня сборка офиса, которая не дает выбора отдельных компонентов для каждого приложения...

Добавлено через 1 час 47 минут
Step_UA, и еще, исходя из вопроса, тогда на стороннем компе "поддержка программирования .net" тоже должна присутствовать???
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
12.02.2019, 09:35
SSL-13, мне кажется это наиболее логичным объяснением ... это стандартный компонет: панель управления - офис/эксель - изменить - добавить или удалить компоненты.
Миниатюры
Создание COM библиотеки для VBA(Excel)  
0
4 / 4 / 0
Регистрация: 10.07.2017
Сообщений: 52
12.02.2019, 16:46
Step_UA, на это я уже писал:

Цитата Сообщение от SSL-13 Посмотреть сообщение
У меня сборка офиса, которая не дает выбора отдельных компонентов для каждого приложения...
а потому был и ряд встречных вопросов.

В частности, если бы я писал библу только для себя, тогда мне этот компонент выходит и не нужен,
т.к. достаточно скомпилить DLL в х64, и "на лету" зарегистрировать ее VS-ом - все работает.

А вот если на сторонних компах каждого пользователя заставлять выяснять и устанавливать доп.компоненты для Excel, - это уже никуда не годится.
Тем более у многих, как и у меня, могут также элементарно отсутствовать доп.компоненты.

Тогда проще программно залезть к юзеру в реестр с "топором", как я уже писал выше, и добавить туда недостающие строчки...
Тем более что авто-регистрацию DLL по любому еще придется прикручивать.
Только вот хотелось бы как-то более цивилизованно это сделать.
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
12.02.2019, 17:04
1. Это не дополнительный компонент Excel'я ... Вы используете похоже кастомную сборку, в которой его просто вырезали
2. Никто не мешает создавать два установщика или в одном иметь две библиотеки и регить нужную - но траблов будет больше

А начаилось, то с того что не работает с кодом MSIL, который выполняется под .net ))
0
4 / 4 / 0
Регистрация: 10.07.2017
Сообщений: 52
12.02.2019, 23:36
Цитата Сообщение от Step_UA Посмотреть сообщение
1. Это не дополнительный компонент Excel'я ... Вы используете похоже кастомную сборку, в которой его просто вырезали
Если это не доп.компонент, то сильно сомневаюсь, что известный разработчик продуктов "KMS ...", зная его стиль, (это его же сборка), будет что-то специально вырезать.
Почему и спросил, - как можно убедиться в наличии/отсутствии установленной "поддержки" иным способом, кроме как пере(до)установкой Excel и что конкретно она дает/делает?
Миниатюры
Создание COM библиотеки для VBA(Excel)  
0
4 / 4 / 0
Регистрация: 10.07.2017
Сообщений: 52
12.02.2019, 23:52
К тому же, если бы чего-то не хватало, то вряд ли бы Excel видел и подхватывал эту DLL, да еще правильно показывал ее начинку в подсказках при написании кода.

Добавлено через 10 минут
Цитата Сообщение от Step_UA Посмотреть сообщение
А начаилось, то с того что не работает с кодом MSIL, который выполняется под .net ))
Не "не работает", а в разных случаях выдает разные ошибки, - это не одно и тоже!
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
13.02.2019, 01:08
Цитата Сообщение от SSL-13 Посмотреть сообщение
как можно убедиться в наличии/отсутствии установленной "поддержки" иным способом, кроме как пере(до)установкой Excel
не изучал данный вопрос
Цитата Сообщение от SSL-13 Посмотреть сообщение
что конкретно она дает
взаимодествие с сом написаном в .net - при компиляции anycpu создается код msil выполняемый framewr'ком
Цитата Сообщение от SSL-13 Посмотреть сообщение
о вряд ли бы Excel видел и подхватывал эту DLL, да еще правильно показывал ее начинку в подсказках при написании кода
и зачем же tib
Цитата Сообщение от SSL-13 Посмотреть сообщение
Не "не работает", а в разных случаях выдает разные ошибки, - это не одно и тоже!
я что-то не видел поста, что взлетело для anycpu
Цитата Сообщение от SSL-13 Посмотреть сообщение
что известный разработчик продуктов "KMS ..."
вот совсем не интересна игра в угадай что в черном ящике, как и в целом продолжение этого топика. удачи.
0
0 / 0 / 0
Регистрация: 20.10.2016
Сообщений: 4
13.02.2019, 14:33
Добрый день.
У меня был такая же проблема.
В vba подключал dll и вызывал методы.
Visual Basic
1
2
3
4
5
6
7
8
Dim s As New ClassLibraryCom.Class1   ' ошибка 429
Debug.Print s.Help
 
' или
 
Dim o As Object
  Set o = CreateObject("ClassLibraryCom")   ' ошибка 429
Debug.Print o.Help
На XP32 SP3 писал net dll c# в vs2010 AnyCPU
Эта dll работала на XP в excel 2010 и в COREL DRAW 13 и 16 версиях

А вот в windows 8.1 Работала только в excel , а в Corel Draw 17 и 18 версиях вылезала ошибка 429
(activex component can't create object 429)
Перекомпиляция проекта c# на windows 8.1 В vs2017 AnyCPU ничего не изменила.

Только когда dll скомпилировал в 64 или x86 .а не в AnyCPU ,
ошибка прошла и объект стал создаваться , методы выполняться
0
4 / 4 / 0
Регистрация: 10.07.2017
Сообщений: 52
14.02.2019, 23:29
Суммируя вышесказанное,
(наверняка кто-то будет проходить тот же путь и спотыкаться),
для распространения своих библиотек AnyCPU не годится, - надо делать 2 DLL: x86 и x64.
И не забыть выключить у себя в VS регистрацию библиотеки, чтоб не запортить свой реестр.
Может кому еще пригодится...

Жаль что об этом нигде толком ничего не написано.
Столько материала перелопачено и потрачено времени - мрак. (
---

Добавлено через 50 минут

Регистрация библиотек, (для .NET Framework 4.5 и выше):
для x64: C:\Windows\Microsoft.NET\Framework64\v4. 0.30319\RegAsm.exe MyDLL.dll /tlb
для x86: C:\Windows\Microsoft.NET\Framework\v4.0. 30319\RegAsm.exe MyDLL.dll /tlb
Соответственно заменив наименование "MyDLL" на свое.

А в ветках:
[HKCR\CLSID\{FD53C10F-8590-4D26-84A6-05C57493EFEB}\InprocServer32]
[HKCR\CLSID\{FD53C10F-8590-4D26-84A6-05C57493EFEB}\InprocServer32\1.0.0.0]
[HKLM\SOFTWARE\Classes\CLSID\{FD53C10F-8590-4D26-84A6-05C57493EFEB}\InprocServer32]
[HKLM\SOFTWARE\Classes\CLSID\{FD53C10F-8590-4D26-84A6-05C57493EFEB}\InprocServer32\1.0.0.0]
где {...} - ClassId своей сборки,
добавить параметр с указанием своего пути к библиотеке, например:
Code
1
"CodeBase"="file:///E:/MyPath/MyDLL.dll"
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.02.2019, 23:29
Помогаю со студенческими работами здесь

Создание папок VBA Excel
Добрый день!Пожалуйста помогите с VBA Exсel 1.При начале нового дня создать новую папку с именем даты .Например:27.05.2015г. 2.При...

Создание папок в VBA Excel
Добрый день!Пожалуйста помогите с VBA Exсel 1.При начале нового дня создать новую папку с именем даты .Например:27.05.2015г. 2.При...

Создание теста VBA Excel
Приветствую уважаемые форумчане! У меня курсовая работа по VBA, которую нужно сдать на предстоящей неделе, в связи с чем вынужден просить...

Создание теста в VBA Excel
Создание теста в VBA Excel Помогите пожалуйста. Нужно создать тест в VBA Exsel. А именно есть вопросы записаны в ячейки A1, A2, A3,...

Создание теста VBA Excel UserForm
Как в UserForm внести таблицу к примеру в этом тесте, задание с таблицей ниже...2 пример


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru