optionale Argumente in einer Function
29.10.2015 10:01:20
Frank
ich habe mir eine Funktion geschrieben mit der ich den Flächeninhalt eines Polygonzuges berechnen kann. Das funktioniert soweit ganz gut. Nun kann es u.U. sein, dass die Fläche Aussparungen enthält. Dafür habe ich optionale Argumente definiert. Da ich damit das erste Mal zu tun habe weiß ich nicht ob ich das richtig gemacht habe. Jedenfalls ist es so, wenn ich diese optionalen Argumente frei lasse, dann ergibt die Funktion #Wert. Kann mir jemand sagen wie ich das umgehe bzw. was in meinem Quellcode falsch ist? Das würde mir weiter helfen.
Leider kann ich die Datei nicht anfügen obwohl sich diese auf C:\ befindet und lediglich 19kB groß ist. Von daher der Quellcode:
Function A_Gauß(yc, zc, Optional ya As Variant = 0, Optional za As Variant = 0) As Double
'Function berechnet den Flächeninhalt eines nicht überschlagenen, geschlossenen, auch unregelmäß _
igen Polygons mit N Polygonpunkten
Dim Anzyc, Anzzc 'Anzahl der y- und z-Werte der Polygonpunkte
Dim Anzya, Anzza 'Anzahl der y- und z-Werte der Aussparungspolygonpunkte
Dim ycVek, zcVek 'ycVek = y-Flächenvektor, zcVek = z-Flächenvektor
Dim yaVek, zaVek 'yaVek = y-Aussparungsvektor, zyVek = z-Aussparungsvektor
Dim i As Integer, nc As Integer, na As Integer
Dim Aa As Double 'Fläche Aussparung
Dim Ac As Double 'Fläche
Anzyc = yc.Count 'Anzahl y-Polygonpunkte aus Array bestimmen
Anzzc = zc.Count 'Anzahl z-Polygonpunkte aus Array bestimmen
ycVek = yc 'übergib die Polygonpunkte zum Vektor ycVek
zcVek = zc 'übergib die Polygonpunkte zum Vektor zcVek
Anzya = ya.Count 'Anzahl y-Aussparungspolygonpunkte aus Array bestimmen
Anzza = za.Count 'Anzahl z-Aussparungspolygonpunkte aus Array bestimmen
yaVek = ya 'übergib die Aussparungspolygonpunkte zum Vektor yaVek
zaVek = za 'übergib die Aussparungspolygonpunkte zum Vektor zaVek
If Anzyc Anzzc Or Anzya Anzza Then 'Prüfe, ob die Anzahl der y-Polygonpunkte = der _
Anzahl der z-Polygonpunkte ist
Exit Function 'ansonsten beende die Function
End If
nc = 1
na = 1
'variable Länge der Polygonpunkte, die letzten Zellen können leer sein
'durch die Loop Anweisung wird die letzte nicht leere Zelle gesucht und nc zugewiesen
Do Until IsEmpty(ycVek(nc, 1)) = True
If nc = Anzyc Then 'wenn der nc-Zähler die maximale Anzahl der y-Daten erreicht hat, _
dann verlasse die Do Until-Anweisung
Exit Do
Else
nc = nc + 1
End If
Loop
i = 1 'beginne die Gaußsche-Flächenformel auszuwerten ab dem i-ten Polygonpunkt
nc = nc - 1 'lass die Gaußsche Flächenformel auswerten bis zum n-ten Polygonpunkt
For i = i To nc
Ac = ycVek(i, 1) * zcVek(i + 1, 1) - ycVek(i + 1, 1) * zcVek(i, 1) 'Berechnung der _
Betonteilflächen
Aa = -1 * (yaVek(i, 1) * zaVek(i + 1, 1) - yaVek(i + 1, 1) * zaVek(i, 1)) 'Berechnung der _
Aussparungsteilflächen
A_Gauß = A_Gauß + Ac + Aa 'Summation der Teilflächen
Next
A_Gauß = A_Gauß / 2 'nach der Gaußschen-Flächenformel wird der A(i)-ten Flächeninhalt durch _
2 geteilt oder eben die Summe aller A(i)'s anschließend durch 2 geteilt
End Function
Vielen Dank und viele Grüße
Frank