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

Подключить свою dll к модулю VBA

30.01.2016, 17:32. Показов 2957. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,
это мой первый пост на этом форуме - прошу сильно не ругать.

Я пытаюсь сделать свою dll на VB.NET и подключить ее к модулю VBA (как .tlb). И почти все получается за исключением того, что в коде VBA не видно метода класса из dll. То есть:

- имею код dll:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Public Class MainClass
 
    Private _Name As String
 
    Public Property Name As String
        Get
            Return _Name
        End Get
 
        Set(ByVal val As String)
            _Name = val
        End Set
    End Property
 
    Public Function Current(ByRef P As Integer, ByRef U As Integer, ByRef Cos As Double, ByRef KPD As Double) As Double
        Select Case U
            Case 220
                Return P / (U * Cos * KPD)
            Case 380
                Return P / (Math.Sqrt(3) * U * Cos * KPD)
            Case Else
                Return 0
        End Select
    End Function
 
End Class
- имею код модуля VBA:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Test()
Dim Mine As third.MainClass, MyInt As Double
 
    'отсюда все работает нормально
    Set Mine = New third.MainClass
    Mine.Name = "Ilya"
    MsgBox Mine.Name
    
   'а вот с этого места не работает. Пишет "Object doesn't support this property or method"
    MyInt = Mine.current(1000, 220, 0.9, 1)
 
End Sub
Почему из модуля VBA не доступна функция Current? Почему не появляется выпадающего списка с членами классов при наборе кода?
Заранее спасибо
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2016, 17:32
Ответы с готовыми решениями:

Как подключить свою dll к другой DLL (не своей) с проверкой?
Привет всем. Не знаю куда написать, напишу сюда. Вопрос такой: хочу подключить свою dll к другому...

Как подключить dll к VBA?
пробовал так, Private Declare Function Suma Lib "D:\testDLL.dll" (x As Integer, y As Integer) As...

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

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

5
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
30.01.2016, 17:51 2
Зделайте функцию как
VB.NET
1
Public Shared Function Current(....) As Double
1
1047 / 898 / 211
Регистрация: 29.09.2015
Сообщений: 1,004
30.01.2016, 17:54 3
Добавьте после Public Shared

Public Shared Function Current...

Опередили =)
1
0 / 0 / 0
Регистрация: 30.01.2016
Сообщений: 3
30.01.2016, 19:40  [ТС] 4
увы, так то же не работает...
может, в свойствах dll что-то подправить?
а то что это VS Express может играть роль?
0
1047 / 898 / 211
Регистрация: 29.09.2015
Сообщений: 1,004
01.02.2016, 19:35 5
Лучший ответ Сообщение было отмечено igushchin как решение

Решение

Так должно заработать.
Ссылка для дополнительной инфы https://msdn.microsoft.com/lib... .100).aspx

Технология Interop работает как с библиотеками созданные вне среды СIL (.net), так и в обратную сторону, но для этого надо указать атрибуты в класса.

Guid ключи можно сгенерировать при помощи GuidGen.exe, находится обычно в "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools". Сразу скажу, что некоторые фишки из .Net работать не будут.

Visual Basic
1
Dim a as New MainClass
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<Microsoft.VisualBasic.ComClass(MainClass.ClassId, MainClass.InterfaceId, MainClass.EventsId)> _
Public Class MainClass
 
    Public Const ClassId As String = "7666AC25-855F-4534-BC55-27BF09D49D46"
    Public Const InterfaceId As String = "54388137-8A76-491e-AA3A-853E23AC1217"
    Public Const EventsId As String = "EA329A13-16A0-478d-B41F-47583A761FF2"
 
    Private _Name As String
 
    Public Property Name As String
        Get
            Return _Name
        End Get
 
        Set(ByVal val As String)
            _Name = val
        End Set
    End Property
 
    Public Function Current(ByRef P As Integer, ByRef U As Integer, ByRef Cos As Double, ByRef KPD As Double) As Double
        Select Case U
            Case 220
                Return P / (U * Cos * KPD)
            Case 380
                Return P / (Math.Sqrt(3) * U * Cos * KPD)
            Case Else
                Return 0
        End Select
    End Function
 
 
    Sub New()
        MyBase.New()
    End Sub
 
End Class
3
0 / 0 / 0
Регистрация: 30.01.2016
Сообщений: 3
02.02.2016, 17:20  [ТС] 6
Спасибо! Все получилось!
0
02.02.2016, 17:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2016, 17:20
Помогаю со студенческими работами здесь

Как подключить к VBA Excel файл DLL, лежащий в той же папке, с использованием относительного пути?
С использованием этой инструкции создал dll на С++ для подключения к VBA Excel. Подключил...

Динамическое подключение DLL, которая в свою очередь использует другие DLL
Здравствуйте! Направьте на путь истинный, как поступить след. образом: Пишу небольшое...

Как подключить dll (SmartCOM3.dll) к php через расширение php_com_dotnet?
Доброе время суток. Передо мной встала задача через php подцепить SmartCOM3.dll. В мануале...

Как при создании своей dll подключить туда сторонние dll
Здравствуйте, я работаю в связке C# - Oracle. Если коротко, то вопрос звучит так: &quot;Как при создании...


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

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