Тема: Можно ли передть пользоательский тип в др. класс

'пользовательский тип в модуле класса VBA
Private Type ffg 
     a as byte
     b as integer
End type

Private  D  as ffg 

Sub Test()
D.a=1
D.b=4
...
end sub

Можно ли передать D в другой класс, и прочитать a и b в нем?

Re: Можно ли передть пользоательский тип в др. класс

Можно, передавайте.
Только пользовательский тип должен быть Public.

Re: Можно ли передть пользоательский тип в др. класс

'Код класса Class1

'пользовательский тип в модуле класса VBA
Public Type ffg
     a As Byte
     b As Integer
End Type

Public D As ffg

Public Sub Test()
    D.a = 1
    D.b = 4
End Sub

'Код класса Class2

Sub Test2()

    Dim M As Class1
    Set M = New Class1
    M.     '<- не видит интерфейс класса Class1????
    
End Sub

Re: Можно ли передть пользоательский тип в др. класс

Извиняюсь, не доглядел что из класса в класс. Так действительно не получится.

Re: Можно ли передть пользоательский тип в др. класс

Спасибо!

Re: Можно ли передть пользоательский тип в др. класс

Но можете создать вместо пользовательского типа ещё один класс и использовать его

Re: Можно ли передть пользоательский тип в др. класс

Может проще вызывать метод в модуле
и там можно увидеть все классы:


Option Explicit

' --> Class1
Private Type ffg
     a As Byte
     b As Integer
End Type

Private D As ffg

Public Sub Test()
    D.a = 1
    D.b = 4
    MsgBox "a = " & D.a & " : " & "b = " & D.b
End Sub

' --> Module1
Option Explicit

Sub Demo()

    Dim M As Class1
    Set M = New Class1
    Call M.Test
     
End Sub

~'J'~

Re: Можно ли передть пользоательский тип в др. класс

Я хотел в одном классе заполнить массив, представленный в виде пользовательского типа. А в другом классе его изменять. Очень понятно получается если использовать пользовательский тип вместо простого массива. А в одном классе две функции объединять не хочу, т.к. тяжело воспринимается длинный модуль класса.

Re: Можно ли передть пользоательский тип в др. класс

Private mDemo As udtDemo

Private Type udtDemo          'Вложенный тип в typeU
    intA As Integer
    lngB As Long
    strC As String
End Type

Пользовательский тип в таком виде.

Re: Можно ли передть пользоательский тип в др. класс

Переместите определение типа, определяемого пользователем, в стандартный модуль и определите его как Общий (Public), а затем укажите переменные этого типа в модуле класса или других модулях. Чтобы данный тип был доступен в том модуле, где он появляется, следует поместить его определение Type...End Type в модуль класса и перед ним поставить ключевое слово Private.

Re: Можно ли передть пользоательский тип в др. класс

"Переместите определение типа, определяемого пользователем, в стандартный модуль и определите его как Общий (Public),"

Module1

Public Type udtDemo         
    intA As Integer
    lngB As Long
    strC As String
End Type

"а затем укажите переменные этого типа в модуле класса или других модулях."

Class1

Public Sub Cla()

    Dim m As udtDemo
    m = Module1.mDemo
    m.intA = 1
    m.lngB = 2
    m.strC = 3

End Sub

"Чтобы данный тип был доступен в том модуле, где он появляется, следует поместить его определение Type...End Type в модуль класса и перед ним поставить ключевое слово Private."

Module2

Public Sub s()
    Dim rt As Class1
    Set rt = New Class1
    rt.Cla
   
End Sub

Класс выполняется. А как мне Module2 прочитать значения "m"?
Очень хочется написать в Class1 следующее:

Public Property Get Num() As udtDemo
    Num = m
End Property

Вот только это не работает :((

Re: Можно ли передть пользоательский тип в др. класс

Вам же выше написали код.
Не очень понятно чего же вы хотите, но всё же вот:


Class1

Option Explicit

Private m As udtDemo

Private Sub Class_Initialize()
    m.intA = 1
    m.lngB = 2
    m.strC = "bbbb"
End Sub

Public Property Get Demo() As udtDemo
Demo = m
End Property

Public Sub Cla()
    With m
        .intA = .intA + 10
        .lngB = .lngB + 20
        .strC = "aaaa"
    End With
End Sub

Re: Можно ли передть пользоательский тип в др. класс

Я бы посоветовал почитать по классам, например здесь - "Разработка настольных приложений в Access 2002. Для профессионалов." Литвин, Гетц. И хотя она по большей части по Access'у. Там есть глава, посвящённая классам.
Взять можно тут

Re: Можно ли передть пользоательский тип в др. класс

Я хочу в одном классе забить данные пользовательского типа (m.intA = 1...), а в другом их прочитать из первого класса, в той же форме пользовательского типа(m.  ...).