Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1804to1808
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Einzelergebnisse aus Subroutine

Einzelergebnisse aus Subroutine
09.01.2021 12:06:32
AL
Hallo zusammen,
ich habe eine Frage zu Subroutinen: Ich habe eine Subroutine namens Quertraeger(), in der mehrere Berechnungen durchgeführt werden. Nun möchte ich aus dieser Subroutine einzelne Ergebnisse auslesen lassen. Grund hierfür ist, dass ich eine einzige Subroutine haben möchte, damit bei Änderung/Anpassung nicht viel Aufwand betrieben werden müsste.
Da meine VBA Kenntnisse bescheiden sind, dachte ich an die Option FUNCTION mit der ich das realisieren könnte. Leider weiß ich aber nicht, wie ich auf Einzelergebnisse der Subroutine zugreifen kann.
Hat jemand eine Idee?
Anbei ein Beispiel FUNCTION mit der ich das Einzelergebnis für P1ox aus Quertraeger() ausgeben möchte:
Public Function P1ox(BA9, BB9, BZA9, BZB9, HTu9, HTo9, beta9, BT9, HTs9, LT9, HSo9, _
XT9, YT9, ZT9 As Double, Art9 As String) As Double
Call Quertraeger(BA9, BB9, BZA9, BZB9, HTu9, HTo9, beta9, BT9, HTs9, LT9, _
HSo9, XT9, YT9, ZT9, Art9)
P1ox = P1ox
End Function

Sub Quertraeger(BA, BB, BZA, BZB, HTu, HTo, beta, BT, HTs, LT, HSo, XT, YT, ZT As Double, Art As String)
Dim BAu, BBu, BAo, BBo, LTx, LTy, x, y, vorz, Pi, beta2, vorz2 As Double
Dim P1ux, P1uy, P1uz As Double
Dim P1ox, P1oy, P1oz As Double
Dim P2ux, P2uy, P2uz As Double
Dim P2ox, P2oy, P2oz As Double
Dim P3ux, P3uy, P3uz As Double
Dim P3ox, P3oy, P3oz As Double
Dim P4ux, P4uy, P4uz As Double
Dim P4ox, P4oy, P4oz As Double
Pi = Application.WorksheetFunction.Pi
BAu = BA + BZA * (HTu - HSo)
BBu = BB + BZB * (HTu - HSo)
BAo = BA + BZA * (HTo - HSo)
BBo = BB + BZA * (HTo - HSo)
If HTu vorz2 = -1
Else
vorz2 = 1
End If
'---Fall beta = 0° oder beta = 180°------------------------------------------------------------------------------------------------------
If (beta = 0 Or beta = 180) Then
Select Case beta
Case 180
vorz = -1
Case 0
vorz = 1
End Select
If Art = "Traverse" Then
'Punktkoordinaten Untergurt Pi,u,j = [ X / Y / Z ]
P1ux = vorz * LT: P2ux = vorz * LT
P1uy = vorz * -BT: P2uy = vorz * BT
P1uz = HTu: P2uz = HTu
'Punktkoordinaten Obergurt Pi,o,j = [ X / Y / Z ]
P1ox = vorz * LT: P2ox = vorz * LT
P1oy = vorz * -BT: P2oy = vorz * BT
P1oz = HTu - vorz2 * HTs: P2oz = HTu - vorz2 * HTs
ElseIf Art = "Erdseilhorn" Then
'Punktkoordinaten Untergurt Pi,u,j = [ X / Y / Z ]
P1ux = XT + vorz * HTs / 2: P2ux = XT + vorz * HTs / 2
P1uy = vorz * (-BT) / 2: P2uy = vorz * BT / 2
P1uz = ZT: P2uz = ZT
'Punktkoordinaten Obergurt Pi,o,j = [ X / Y / Z ]
P1ox = XT - vorz * HTs / 2: P2ox = XT - vorz * (-HTs) / 2
P1oy = vorz * (-BT) / 2: P2oy = vorz * BT / 2
P1oz = ZT: P2oz = ZT
End If
'Punktkoordinaten Untergurt Pi,u,j = [ X / Y / Z ]
P3ux = vorz * BAu / 2: P4ux = vorz * BAu / 2
P3uy = vorz * BBu / 2: P4uy = vorz * (-BBu / 2)
P3uz = HTu: P4uz = HTu
'Punktkoordinaten Obergurt Pi,o,j = [ X / Y / Z ]
P3ox = vorz * BAo / 2: P4ox = vorz * BAo / 2
P3oy = vorz * BBo / 2: P4oy = vorz * (-BBo / 2)
P3oz = HTo: P4oz = HTo
'-------Fall 0° ElseIf ((0 If (0 vorz = 1
beta2 = beta
ElseIf (180 vorz = -1
beta2 = beta - 180
End If
x = Sin(beta2 * Pi / 180) * BT
y = Cos(beta2 * Pi / 180) * BT
LTy = Sin(beta2 * Pi / 180) * LT
LTx = Cos(beta2 * Pi / 180) * LT
'Punktkoordinaten Untergurt Pi,u,j = [ X / Y / Z ]
P1ux = vorz * (LTx + x / 2): P2ux = vorz * (LTx - x / 2): P3ux = vorz * (-BAu / 2): P4ux = vorz * BAu / 2
P1uy = vorz * (LTy - y / 2): P2uy = vorz * (LTy + y / 2): P3uy = vorz * BBu / 2: P4uy = vorz * (-BBu / 2)
P1uz = HTu: P2uz = HTu: P3uz = HTu: P4uz = HTu
'Punktkoordinaten Obergurt Pi,o,j = [ X / Y / Z ]
P1ox = vorz * (LTx + x / 2): P2ox = vorz * (LTx - x / 2): P3ox = vorz * (-BAo / 2): P4ox = vorz * BAo / 2
P1oy = vorz * (LTy - y / 2): P2oy = vorz * (LTy + y / 2): P3oy = vorz * BBo / 2: P4oy = vorz * (-BBo / 2)
P1oz = HTu - vorz2 * HTs: P2oz = HTu - vorz2 * HTs: P3oz = HTo: P4oz = HTo
'---------------Fall beta = 90° oder beta = 270°------------------------------------------------------------------------------------------
ElseIf (beta = 90 Or beta = 270) Then
Select Case beta
Case 270
vorz = -1
Case 90
vorz = 1
End Select
'Punktkoordinaten Untergurt Pi,u,j = [ X / Y / Z ]
P1ux = vorz * BT / 2: P2ux = vorz * (-BT / 2): P3ux = vorz * (-BAu / 2): P4ux = vorz * BAu / 2
P1uy = vorz * LT: P2uy = vorz * LT: P3uy = vorz * BBu / 2: P4uy = vorz * BBu / 2
P1uz = HTu: P2uz = HTu: P3uz = HTu: P4uz = HTu
'Punktkoordinaten Obergurt Pi,o,j = [ X / Y / Z ]
P1ox = vorz * BT / 2: P2ox = vorz * (-BT / 2): P3ox = vorz * (-BAo / 2): P4ox = vorz * BAo / 2
P1oy = vorz * LT: P2oy = vorz * LT: P3oy = vorz * BBo / 2: P4oy = vorz * BBo / 2
P1oz = HTu - vorz2 * HTs: P2oz = HTu - vorz2 * HTs: P3oz = HTo: P4oz = HTo
'-------------------Fall 90° ElseIf ((90 If (90 vorz = 1
beta2 = beta - 90
ElseIf (270 vorz = -1
beta2 = beta - 270
End If
x = Cos(beta2 * Pi / 180) * BT
y = Sin(beta2 * Pi / 180) * BT
LTy = Cos(beta2 * Pi / 180) * LT
LTx = Sin(beta2 * Pi / 180) * LT
'Punktkoordinaten Untergurt Pi,u,j = [ X / Y / Z ]
P1ux = vorz * (-LTx + x / 2): P2ux = vorz * (-LTx - x / 2): P3ux = vorz * (-BAu / 2): P4ux = vorz * BAu / 2
P1uy = vorz * (LTy + y / 2): P2uy = vorz * (LTy - y / 2): P3uy = vorz * (-BBu / 2): P4uy = vorz * BBu / 2
P1uz = HTu: P2uz = HTu: P3uz = HTu: P4uz = HTu
'Punktkoordinaten Obergurt Pi,o,j = [ X / Y / Z ]
P1ox = vorz * (-LTx + x / 2): P2ox = vorz * (-LTx - x / 2): P3ox = vorz * (-BAo / 2): P4ox = vorz * BAo / 2
P1oy = vorz * (LTy + y / 2): P2oy = vorz * (LTy - y / 2): P3oy = vorz * (-BBo / 2): P4oy = vorz * BBo / 2
P1oz = HTu - vorz2 * HTs: P2oz = HTu - vorz2 * HTs: P3oz = HTo: P4oz = HTo
End If
End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einzelergebnisse aus Subroutine
09.01.2021 12:10:56
Oberschlumpf
Hi,
erkennst du selbst nicht, wie unübersichtlich dein - getexteter - Code hier aussieht?!
Wieso zeigst du deinen Code + Bsp-Datenzeilen nicht per Upload in einer Bsp-Datei?
Ciao
Thorsten
AW: Einzelergebnisse aus Subroutine
09.01.2021 12:34:06
Oberschlumpf
Hi,
welches Zeichen von "+ Bsp-Datenzeilen" hast du nicht gesehen?
Oder anders:
Was bitte sollen wir mit so einer Datei?
Müssten in der Datei nicht irgendwo Zahlen stehen, die halt das "Futter" sind für deine Subs + Functions?
Weiter viel Erfolg - ich mag nicht mehr.
Ciao
Thorsten
Anzeige
AW: Einzelergebnisse aus Subroutine
09.01.2021 12:12:51
Hajo_Zi
schreibe die Variablen definition nach der ersten Zeile
Option Explicit

Ansatz, unvollendet mangel Kompetenz
12.01.2021 12:47:36
MCO
Hallo AL,
Ich hab aus der Sub Quertraeger auch eine Function Quertraeger gemacht mit Ausgabe als string.
Hier werden ja alle gewünschten Variablen errechnet.
Versuch: Als Textergebnis wiedergeben und dann nach gewünschtem Rückgabewert einzeln ausgeben.
Ergebnis: Läuft :-)
https://www.herber.de/bbs/user/142952.xlsm
Ein paar Sachen versteh ich aber nicht:
  • Warum tauchen die Ausgabewerte nacher mehrfach wieder auf? die letzten 15 sind oben schon bezeichnet.

  • Warum rechnest du Variable 2x wenn dahinter die gleiche Rechnung steckt?

  • P1ux = vorz * LT:       P2ux = vorz * LT
    P1ox = vorz * LT:       P2ox = vorz * LT
    P1ux = XT + vorz * HTs / 2:   P2ux = XT + vorz * HTs / 2
    P3ux = vorz * BAu / 2:     P4ux = vorz * BAu / 2
    P3ox = vorz * BAo / 2:      P4ox = vorz * BAo / 2
    
    Wenn du jedenfalls die langen Kommazahlen loswerden möchtest geht das so:
    Format(vorz * BAu / 2, "0.000")
    Gruß, MCO
    Anzeige
    ... eingentlich doch gelöst :-)
    14.01.2021 06:00:00
    MCO
    fertig und geschlossen
    @MCO: Besten Dank
    14.01.2021 11:28:24
    AL
    Hallo MCO,
    besten Dank für deine Unterstützung. Diese Vorgehensweise kannte ich bisher nicht.
    Zu den beiden Punkten, die noch unklar sind:
    Punkt 1: ... ist auf meine begrenzten VBA Kenntnisse zurückzuführen. Ich nahm an, dass ich die Variablen mehrfach deklarieren müsste, damit die Übergabe von Sub zu Function funktioniert.
    Punkt 2: Falls du die Berechnung für die Punkte P1ux, P2ux, P1ox und P2ox meinst, können diese bei entsprechender Bedingung für "beta" bzw. "Art" gleich sein, müssen es aber nicht. Außerdem wollte ich mir die Fehlersuche für die Punktergebnisse vereinfachen.
    Gruß, AL
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige