powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Классы в VBA
11 сообщений из 11, страница 1 из 1
Классы в VBA
    #34015018
ErmakIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, покажите пожалуйста приер определения классов и объектов в VBA!!!
...
Рейтинг: 0 / 0
Классы в VBA
    #34023722
Фотография A.K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Среда VBA хотя и позволяет создавать собственные классы и их экземпляры, но практическая ценность от этого невелика. В объектно-ориентированной модели VBA отсутствует ее важнейший компонент - принцип наследования. Он заменен так называемым "встраиванием".

Тем не менее, в классах VBA можно определять properties, поля и методы, создавать экземпляры классов и т.п.

Пример объявления класса (Insert -> Class Module):

Код: plaintext
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.
37.
Option Explicit
' Private-атрибуты класса
Private FIndic_ID1 As String 
Private FIndic_Name1 As String 
Private FDB As Database ' Ссылка на базу данных
...
' Описание read-only свойств
Public Property Get DB() As Database
  Set DB = FDB
End Property

' Конструктор класса
Private Sub Class_Initialize()

End Sub

' Деструктор класса
Private Sub Class_Terminate()

End Sub

' Описание public-метода
Public Sub InitData(DB_ As Database, _
          Optional ASignificance As Double =  0 . 05 )
  Set FDB = DB_
  FSignificance = ASignificance
  ...
End Sub

Public Sub ExportToHTML(Optional ByVal FileName As String = "")
...
End Sub

' Описание private-методов
Private Sub GetIndicProperties(ByVal AIndic_ID As String, _
          ByRef OName As String, ByRef OUnit As String)
...
End Sub



Пример создания экземпляра и его использования:

Код: plaintext
1.
2.
3.
4.
5.
6.
Public Correlation As TCorrelation
...
  Set Correlation = New TCorrelation
  Call Correlation.InitData(IndDB, signific)
  Call Correlation.Calculate
  Call Correlation.ExportToHTML
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Классы в VBA
    #38124514
Oegir_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заодно уж подскажите как создать статический метод, так чтобы его можно было вызвать по имени класса без создания объекта, по типу
Код: vbnet
1.
Call MyClassName.mySub


Работаю в Excel 2010
...
Рейтинг: 0 / 0
Классы в VBA
    #38124588
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oegir_,

в VBA нет понятия такого "статичный класс" или "статичный метод". Метод можете поместить в стандартный Модуль, обращаться также mySub или MyModuleName.mySub
...
Рейтинг: 0 / 0
Классы в VBA
    #38124730
Oegir_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо
...
Рейтинг: 0 / 0
Классы в VBA
    #38125181
VSVLAD,

не соблаговолит ли уважаемый джин VSVLAD открыть приложенный файл, проверить, работает ли у него процедура Test, и, если да, то объяснить, почему?
...
Рейтинг: 0 / 0
Классы в VBA
    #38125196
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему она не должна работать?
...
Рейтинг: 0 / 0
Классы в VBA
    #38125282
Akina,

должна. Её хорошо об этом попросили. Только не очень хорошо видно, как. Где объявление объектной переменной, её инициализация?
...
Рейтинг: 0 / 0
Классы в VBA
    #38125283
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й квартал,

Хорошо, предположим что аттрибут PublicNotCreatable сотворил чудо, и не создавая экземпляра мы присвоили значение в свойство. Но если посмотреть поближе, то можно увидеть что разрешено создавать экземпляры класса и присваивать в эти свойства.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Sub T2()
    Dim C1 As New CMyVal
    Dim C2 As New CMyVal
    
    C1.Value = 1
    C2.Value = 2
    
    MsgBox C1.Value & vbTab & C2.Value
End Sub



Компилятор VB.NET нарисует ошибку на подобный код (свойство value объявить shared), так как нельзя статичному полю через объект-экземпляр класса. А если поле не статичное, то мы не сможем к нему обратиться. Итого, то что VBA хитрит и даёт доступ к методам/свойству - не говорит о том что методы и свойства статичные.
...
Рейтинг: 0 / 0
Классы в VBA
    #38125368
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й кварталГде объявление объектной переменной, её инициализация?Это не VB. Тут существует "объект по умолчанию". Или, если хотите, объект-прототип, от которого порождаются объекты этого типа, если объявлены в коде.
...
Рейтинг: 0 / 0
Классы в VBA
    #38125486
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
13-й квартал... проверить, работает ли у него процедура Test, и, если да, то объяснить, почему?
У-у-у, шайтан
Код: vbnet
1.
2.
3.
Attribute VB_PredeclaredId = True
'...
Attribute Value.VB_UserMemId = 0


А где можно почитать об этих атрибутах?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Классы в VBA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]