[Pregunta] VBS [Guardado]


Diese Funktion funktioniert perfekt in Excel. Aus den Attributen @612@, @613@, @163@, @164@ und @221@ soll es die Ausrichtung (Azimut) einer Wandscheibe ergeben VBScriptTester erkennt unverständliche Fehler.

Function Orientacion(ByVal CDGx As Single, ByVal CDGy As Single, ByVal P1x As Single, ByVal P1y As Single, ByVal Gruix As Single, ByVal AngProj As Single) As String

' Devuelve el ángulo de un muro respecto al norte, según el CTE
' Allplan le pasa los atributos a la Function Orientacion. hace los calculos y devuelve el resultado.

' Angulo del punto de medición: angulo del sistema de orientación de Allplan. Atributo 18268
' CDG (x,y,z) coordenadas del CDG del muro (Primera hoja). Son los atributos, respectivamente (612,613,614)
' P1(x,y,z) coordenadas del 1r punto de la primera hoja, idem (163,164,165)
' Las coordenadas Z no se utilizan

' Gruix: Grueso del muro total. Atributo 221

Dim P2x, P2y As Single
'Vectores posición
Dim Argumento(1 To 3), Zeta(1 To 3), Angle As Double

Dim Orient_CTE As String

Pi = 3.14159265358979

'Cambio a coordenadas relativas, centradas en el CDG de cada muro

P2x = P1x - CDGx
P2y = P1y - CDGy

' calculamos los argumentos y angulos de los vectores

Argumento(2) = Gruix / 2

Argumento(1) = Sqr(P2x * P2x + P2y * P2y)

Zeta(1) = Atn(P2x / P2y)

Argumento(3) = Sqr(Argumento(1) * Argumento(1) - Argumento(2) * Argumento(2))

Zeta(2) = Atn(Argumento(2) / Argumento(3))

Zeta(3) = Zeta(1) + Zeta(2)

' las siguientes fórmulas devuelven en radianes el ángulo medido desde el NORTE. Norte = 2pi

If (P2x > 0 And P2y > 0) Or (P2x < 0 And P2y > 0) Then
Zeta(3) = Pi * 3 / 2 + Zeta(3)
End If

If (P2x < 0 And P2y < 0) Or (P2x > 0 And P2y < 0) Then
Zeta(3) = Pi / 2 + Zeta(3)
End If

'Convierto a grados sexagesimales
Angle = Round(Zeta(3) * 180 / Pi, 2)
' corrección por orientación de la parcela
Angle = Angle - AngProj

If Angle < 22.5 Or Angle >= 337.5 Then Orient_CTE = "Norte"
If Angle >= 22.5 And Angle < 60 Then Orient_CTE = "Noreste"
If Angle >= 60 And Angle < 110 Then Orient_CTE = "Este"
If Angle >= 110 And Angle < 162 Then Orient_CTE = "Sureste"
If Angle >= 162 And Angle < 198 Then Orient_CTE = "Sur"
If Angle >= 198 And Angle < 249 Then Orient_CTE = "Suroeste"
If Angle >= 249 And Angle < 300 Then Orient_CTE = "Oeste"
If Angle >= 300 And Angle < 337.5 Then Orient_CTE = "Noroeste"

Orientacion = Orient_CTE

End Function

Show solution Hide solution

VB-Script ist nicht dasselbe wie Excel-VBA!

In VB-Script (in Allplan) sind alle Variablen und Funktionparameter Variants.

As Single, As String, As Double funktionieren nicht in VB-Script, und sollte man deshalb weglassen.
Die Dimensionierung eines Arrays erfolgt nicht mit Dim Argumento(1 To 3) As Double sondern durch Dim Argumento(3)

Wenn man diese Sachen entfernt, kommt "nur noch" ein Laufzeitfehler: Division durch Null bei Zeta(1) = Atn(P2x / P2y)

P1y - CDGy darf eben nicht 0.0 werden.

Mit Orientacion(2,2,0,0,0,250) kommt "Norte" raus (s. vb_script.png)

Adjuntos (2)

Type: image/png
Descargado 65 veces
Size: 75,03 KiB
Type: text/plain
Descargado 359 veces
Size: 1,19 KiB

VB-Script ist nicht dasselbe wie Excel-VBA!

In VB-Script (in Allplan) sind alle Variablen und Funktionparameter Variants.

As Single, As String, As Double funktionieren nicht in VB-Script, und sollte man deshalb weglassen.
Die Dimensionierung eines Arrays erfolgt nicht mit Dim Argumento(1 To 3) As Double sondern durch Dim Argumento(3)

Wenn man diese Sachen entfernt, kommt "nur noch" ein Laufzeitfehler: Division durch Null bei Zeta(1) = Atn(P2x / P2y)

P1y - CDGy darf eben nicht 0.0 werden.

Mit Orientacion(2,2,0,0,0,250) kommt "Norte" raus (s. vb_script.png)

Adjuntos (2)

Type: image/png
Descargado 65 veces
Size: 75,03 KiB
Type: text/plain
Descargado 359 veces
Size: 1,19 KiB

Ich werde einen Scheck eingeben, um eine Division durch Null zu vermeiden. Vielen Dank

Kann VB-Scripting nur in Legend-Dokumenten und Berichten verwendet werden? Unterstützen Legenden und Benutzerattribute die obige Formel nicht?


https://campus.allplan.com/ utiliza cookies  -  Aqui

Acéptalo