Create VBA class in VB.net

Is it possible (using COM and regasm.exe) the vba function to call the vb.net function, which creates a class in vb.net and then passes the class back to vba, where it is recognized as a vba class?

In VBA, I can work with classes using Insert> Class Module. I created a function that creates a class.

Private length As Double
Private height As Double
Public Sub init(ByRef hgt As Double)
  height = hgt
  length = dbl_height()
End Sub

Public Function dbl_height()
  dbl_height = height * 2
End Function

I can initialize it using this function:

Public Function CreateClassFunction(foo As Integer)
  Dim my_rect As Rectangle
  Set my_rect = New Rectangle
  my_rect.init (foo)
  Set CreateClassFunction = my_rect
End Function

I can also do the same in vb.net with almost identical code.

Public Class Rectangle
   Private length As Double
   Private height As Double
   Public Sub init(ByRef hgt As Double)
     height = hgt
     length = dbl_height()
   End Sub

   Public Function dbl_height()
     dbl_height = height * 2
   End Function
End Class

where this vb.net function creates a class:

Public Function CreateClassFunction(foo As Integer) As Rectangle
    Dim my_rect As Rectangle
    my_rect = New Rectangle
    my_rect.init(foo)
    CreateClassFunction = my_rect
End Function

I can use Variant / Object / Rectangle in vba using:

Function MyCreateClass(a As Double)
  Dim classLib As New MyAnalytics.Class1
  Set MyCreateClass = classLib.CreateClassFunction(a)
End Function

However, this object does not have variable heights or lengths. (He says “no variables” in the viewport)

Edit:

Modified code according to Mat Mug's answer:

Public Class Rectangle
Private plength As Double
Private pheight As Double
Public Property length() As Double
    Get
        Return plength
    End Get
    Set(ByVal value As Double)
        plength = value
    End Set
End Property

Public Property height() As Double
    Get
        Return pheight
    End Get
    Set(ByVal value As Double)
        pheight = value
    End Set
End Property

Public Sub init(ByRef hgt As Double)
    height = hgt
    length = dbl_height()
End Sub

Public Function dbl_height()
    dbl_height = height * 2
End Function

End Class

and testing in VBA:

Function MyCreateClass(a As Double)
  Dim classLib As New MyAnalytics.Class1

  Set MyCreateClass = classLib.CreateClassFunction(a)

  Debug.Print MyCreateClass.Height()
  Debug.Print MyCreateClass.length()

  MyCreateClass.Height = 30
  MyCreateClass.length = 20

  Debug.Print MyCreateClass.Height()
  Debug.Print MyCreateClass.length()

  MyCreateClass.init (100)
  Debug.Print MyCreateClass.Height()
  Debug.Print MyCreateClass.length()


End Function
+4
source share
1

VBA - VBA, COM-.

Rectangle . , , Private. , VBA:

Public Class Rectangle
   Sub init(ByRef hgt As Double)    
   Function dbl_height()
End Class

?

Private length As Double
Private height As Double

- VBA , .

Public - , ; !

getters , , VBA Length Height Rectangle.

+2

Source: https://habr.com/ru/post/1588917/


All Articles