Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/74: Рейтинг темы: голосов - 74, средняя оценка - 4.72
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
1

Как создать DLL для VBA

23.07.2014, 21:23. Показов 13255. Ответов 35
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Скажите, пожалуйста, как создать dll для VBA.

У меня "Visual Studio 2013 Express".
В dll хочу вставить такой код:
VB.NET
1
2
3
4
5
Public Class Class1
    Private Sub Procedure1()
        MsgBox(Prompt:="Сообщение.")
    End Sub
End Class
Что мне нужно сделать, чтобы я смог подключить этот dll-файл из VBA?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2014, 21:23
Ответы с готовыми решениями:

dll для VBA
Доброе время суток. Создаю dll в VB.NET. В нее хочу запихнуть часть кода vba. Но после создания...

Как создать отдельную папку для dll при компоновки приложения в VS2008
У меня в одном проекте соединено несколько других проектов. Главный проект при компиляции...

Как создать *.dll ?
В принципе в этом и вопрос. Если где эта тема уже встречалась (и ответы на неё уже давали), то не...

Создать свою dll, общую для двух приложений
Здравствуйте. Помогите разобраться! Необходимо создать глобальную переменную, которая хранила бы...

35
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
11.08.2014, 10:27 21
Author24 — интернет-сервис помощи студентам
Скрипт, ну по той ссылке что Вы привели все довольно прозрачно.
Сейчас я написал на .NET библиотеку классов, подключил ее в VB6 и вызвал функцию из библиотеки.

Библиотеку прилагаю (вместе с tlb)
Попробуйте ее подключить в VBA (я не умею работать с VBA)
Код библы

VB.NET
1
2
3
4
5
Public Class Class1
    Function Test() As String
        Return "Test"
    End Function
End Class
Если это то, что надо, напишите, объясню пошагово
Вложения
Тип файла: rar Release.rar (4.5 Кб, 19 просмотров)
2
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
11.08.2014, 10:31  [ТС] 22
Памирыч, я обратил внимание, что в этой ссылке http://www.geeksengine.com/article/create-dll.html есть файл "tlb". Но я подставлял свой код в этот пример. Или "tlb" нужно обязательно использовать?
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
11.08.2014, 10:38 23
Цитата Сообщение от Скрипт Посмотреть сообщение
Или "tlb" нужно обязательно использовать?
Он у меня сгенерировался сам.

В VB6 я подключал именно tlb (через проект - ссылки), ибо сама библиотека напрямую не пожелала импортироваться.


Еще один вопрос - а Вы в .NET библиотеку хотите вставлять VBA-шный код?
Тогда, скорее всего, ничего не выйдет, ибо .NET понимает только .NET-код
1
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
11.08.2014, 10:42  [ТС] 24
Пункт 1

Я делал инструкции по этой ссылке http://www.geeksengine.com/article/create-dll.html, но у меня не сформировался в папке "bin" tlb-файл. Надо ещё раз попробовать сделать действия по инструкции.

Пункт 2
Цитата Сообщение от Памирыч Посмотреть сообщение
Еще один вопрос - а Вы в .NET библиотеку хотите вставлять VBA-шный код?
Я буду переделывать одну процедуру или один модуль с VBA на VB .Net.

Пункт 3

Попробую Ваш dll-файл и отпишусь.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
11.08.2014, 10:43 25
Цитата Сообщение от Памирыч Посмотреть сообщение
Еще один вопрос - а Вы в .NET библиотеку хотите вставлять VBA-шный код?
Тогда, скорее всего, ничего не выйдет, ибо .NET понимает только .NET-код
Памирыч, ну да. Придется автору СОМ -интерфейсы юзать.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
11.08.2014, 10:58  [ТС] 26
Памирыч, сейчас сделал "Release" (до этого было "Debug") и сформировался tlb-файл.
Сейчас проверю, может начнёт работать.
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
11.08.2014, 11:05 27
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Я уже скринов наделал, уж выложу, на всякий
Как создать DLL для VBA


Как создать DLL для VBA


Как создать DLL для VBA


Как создать DLL для VBA


Как создать DLL для VBA
2
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
11.08.2014, 11:24  [ТС] 28
Памирыч, в VBA я подключил класс. Затем в VBA-коде сделал:
Visual Basic
1
2
3
4
5
Sub Procedure1()
 
    Dim myClass As New ClassLibrary2.Class1
    
End Sub
Но VBA не видит члены класса. Т.е. я печатаю дальше в коде "myClass", ставлю точку, но всплывающий список с членами класса не появляется. В Вашем примере, VBA не видит функцию "Test", а в моём - процедуру "Procedure1".
Видимо, чего-то не хватает.
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
11.08.2014, 11:28 29
Скрипт, у меня тоже не видит. Ни в вба, ни в шестом. Дописал сам
1
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
11.08.2014, 11:46  [ТС] 30
Памирыч, да, Ваш пример заработал (с функцией "Test").


Памирыч, а чтобы надстройка стала работать на другом компьютере, нужно будет создать инсталляционный пакет? В "VS 2013 Professional" инсталляционный пакет делается так:
Файл - Создать проект... - Другие типы проектов - Установка и развертывание.

Правильно я думаю? Или нужно будет что-то добавить в проект, чтобы DLL-файл работал на всех компьютерах?
0
1710 / 1198 / 227
Регистрация: 23.12.2010
Сообщений: 1,527
11.08.2014, 12:01 31
Цитата Сообщение от Скрипт Посмотреть сообщение
В Вашем примере, VBA не видит функцию "Test", а в моём - процедуру "Procedure1".
Дык надо не Sub Procedure1(), а PUBLIC sub. Аналогично в функции test. Не?
1
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
11.08.2014, 12:04  [ТС] 32
Юпатов Дмитрий, да, я перепутал: я думал, что Private даст доступ к содержимому класса, а оказалось, что Private, наоборот, закрывает доступ к внутренностям. Просто в VBA я очень редко что-то делаю со словами Private и Public, поэтому плохо ориентируюсь в этом.
0
1710 / 1198 / 227
Регистрация: 23.12.2010
Сообщений: 1,527
11.08.2014, 12:07 33
Цитата Сообщение от Скрипт Посмотреть сообщение
я думал, что Private даст доступ к содержимому класса, а оказалось, что Private, наоборот, закрывает доступ к внутренностям.
ну да:
private - доступна только внутри класса/модуля
friend - доступна внутри данного проекта из других классов/модулей (ну и из родного тоже)
public - доступна извне
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
11.08.2014, 12:10 34
Насчет переносимости не подскажу, попробовал сейчас перенести книгу на другой ПК вместе с файлами, при вызове функции возникла ошибка, мол ActiveX что-то там не может создать.

Зарегистрировать DLL тоже не получается, она для этого как есть непригодна
1
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
11.08.2014, 12:28 35
Цитата Сообщение от Юпатов Дмитрий Посмотреть сообщение
Дык надо не Sub Procedure1(), а PUBLIC sub. Аналогично в функции test. Не?
Sub по умолчанию Public
1
1710 / 1198 / 227
Регистрация: 23.12.2010
Сообщений: 1,527
11.08.2014, 13:57 36
Цитата Сообщение от SoftIce Посмотреть сообщение
Sub по умолчанию Public
Действительно...
0
11.08.2014, 13:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.08.2014, 13:57
Помогаю со студенческими работами здесь

Как создать DLL на С++, чтобы его можно было подключить к VBA?
Нужно, чтобы можно было создавать в VBA объекты классов, которые описаны в C++. Как подключить к...

Как создать файл DLL так, чтобы его можно было подключить к VBA Excel?
Пытаясь научиться подключать к VBA хотя бы самую тривиальную функцию на C++. Для примера написал...

Как сделать DLL для VBA?
Что нужно сделать, чтобы сделать DLL? Я так понимаю, что нужен какой-то язык программирования....

Как написать Dll для использования в VBA (MS Access 2003)
Добрый день! По статье сделал Dll: using System; using System.Collections.Generic; using...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru