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 № 1W 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ć.