/ / Użyj funkcji utworzonej w klasie - VBA - vba, excel-vba, excel

Użyj funkcji stworzonej w klasie - VBA - vba, excel-vba, excel

Uczę się, jak klasa pracująca. Pomóż mi, jak zrobić coś takiego.

Przygotowałem w Excelu tę klasę:

Nazwa klasy „Complex”

Option Explicit

Public Re As Double   "Real
Public Im As Double "Imaginary

Public Function CCAdd(ParamArray Complex1() As Variant) as Complex
Dim i As Variant
Dim ZXC As Complex
Set ZXC = New Complex

For i = 0 To UBound(Complex1) "Numer of arguments passed to the function
If Not IsMissing(Complex1(i)) Then "Omit arguments which don"t exist
If TypeName(Complex1(i)) = "Complex" Then " Check is it Complex
ZXC.Re = Complex1(i).Re + ZXC.Re
ZXC.Im = Complex1(i).Im + ZXC.Im
End If
End If
Next i
Set Add = ZXC
Set ZXC = Nothing
End Function

W Module I umieściłem:

sub asd()
Dim K As Complex
Dim Z As Complex
Dim A As Complex

Set K = New Complex
Set Z = New Complex
Set A = New Complex

K.Re = 1
K.Im = 2

Z.Re = 3
Z.Im = 4

A = K.CCAdd(K, Z)
end sub

Po wykonaniu funkcji CCAdd otrzymuję błąd z przekazaniem wartości do „A”. Jak to rozwiązać? Może funkcja nie może przekazać niestandardowego typu danych.

Odpowiedzi:

3 dla odpowiedzi № 1

W klasie Complex ta linia:

Set Add = ZXC

musi być:

Set CCAdd = ZXC

Następnie w module wystarczy:

Sub asd()
Dim K As Complex
Dim Z As Complex
Dim A As Complex

Set K = New Complex
Set Z = New Complex

K.Re = 1
K.Im = 2

Z.Re = 3
Z.Im = 4

Set A = K.CCAdd(K, Z)
End Sub

Więc nie musisz używać Set A = New Complex ale musisz użyć Set przy przypisywaniu go do wyniku CCAdd funkcjonować.