Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1480to1484
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
Formel in VBA läuft nicht ( Excel 2016 )
09.03.2016 09:43:39
Ali
Hallo,
ich versuche als Neuling in VBA die eingebene nummerische Formel für das Berechnen eines Kegelausschnittvolumens zum Laufen zu bringen. Leider funktioniert es nicht. Die Formel wurde von mir wie folgt in ein Modul eingeben:
Private Sub Command1_Click()
On Error GoTo Meldung                                   'Bei Fehler gehe zu Sprungmarke
Command2.SetFocus                                   'Fokus aus Button "Neu"
hk = Val(Tabelle2(Berechnung!H32))                  'Eingabegröße Kegelhöhe
dk = Val(Tabelle2(Berechnung!K31))                  'Grundkreisdurchmesser
lx = Val(Tabelle2(Berechnung!K30))                  'Abstand des Abschnitts von Kegelachse
N = Val(Tabelle2(Berechnung!K33))                   'Schichtanzahl
V = Kegelabschnitt(hk, dk, lk, N)                   'Rückgabewert
Tabelle2(Berechnung!K34) = V: Exit Sub              'Str nicht nötig
Meldung:
MsgBox "Bitte Werte eingeben!", 20, "Hinweis"
Tabelle2(Berechnung!H32).SetFocus
End Sub

Public Function Kegelabschnitt(hk, dk, lk, N) As String
If lx = 0 Then lx = 0.000001                            'lx darf nicht 0 werden, da es im  _
TangensW im Nenner steht
rk = dk / 2: hA = (rk - lx) * hk / rk: dy = hA / N
For i = 1 To N
y = hk - (i * dy - dy / 2)
R = y * rk / hk                                     'Zelle *
Bx = R - lx                                         'Zelle **
s = 2 * Sqr(R ^ 2 - lx ^ 2)                         'Zelle ***
tangensW = s / 2 / lx                               'Tangenswert von Winkel/2
WB = Atn(tandgensW)                                 'Winkel W in rad (Bogen)
b = R * WB * 2                                      '(#)Bogenlänge B
dA = b * R / 2 - s * (R - Bx) / 2                   '(##)Kreisabschnitt
dV = dA * dy                                        'Schichtvolumen
V = V + dV                                          '(###)Summenbildung
Next                                                'dann V dem Funktionsnamen zuweisen
Kegelabschnitt = V                                  'Rückgabewert
End Function
Es wird mir nur meine Fehlermeldung "Bitte Werte eingeben!" angezeigt.
Kann mir da jemand weiterhelfen? Vielen Dank schon mal

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formel in VBA läuft nicht ( Excel 2016 )
09.03.2016 09:47:54
Ali
Userbild
Userbild
Userbild

AW: Formel in VBA läuft nicht ( Excel 2016 )
09.03.2016 10:04:24
hary
Moin Ali
Past es so?
Private Sub Command1_Click()
On Error GoTo Meldung                                   'Bei Fehler gehe zu Sprungmarke
'Fokus aus Button "Neu"
hk = Worksheets("Berechnung").Range("H32")                  'Eingabegröße Kegelhöhe
dk = Worksheets("Berechnung").Range("K31")                  'Grundkreisdurchmesser
lx = Worksheets("Berechnung").Range("K30")                  'Abstand des Abschnitts von  _
Kegelachse
N = Worksheets("Berechnung").Range("K33")                   'Schichtanzahl
V = Kegelabschnitt(hk, dk, lk, N)                   'Rückgabewert
Worksheets("Berechnung").Range("K34") = V: Exit Sub              'Str nicht nötig
Meldung:
MsgBox "Bitte Werte eingeben!", 20, "Hinweis"
Worksheets("Berechnung").Range("H32").Select
End Sub
Public Function Kegelabschnitt(hk, dk, lk, N) As String
If lx = 0 Then lx = 0.000001                            'lx darf nicht 0 werden, da es im _
TangensW im Nenner steht
rk = dk / 2: hA = (rk - lx) * hk / rk: dy = hA / N
For i = 1 To N
y = hk - (i * dy - dy / 2)
R = y * rk / hk                                     'Zelle *
Bx = R - lx                                         'Zelle **
s = 2 * Sqr(R ^ 2 - lx ^ 2)                         'Zelle ***
tangensW = s / 2 / lx                               'Tangenswert von Winkel/2
WB = Atn(tandgensW)                                 'Winkel W in rad (Bogen)
b = R * WB * 2                                      '(#)Bogenlänge B
dA = b * R / 2 - s * (R - Bx) / 2                   '(##)Kreisabschnitt
dV = dA * dy                                        'Schichtvolumen
V = V + dV                                          '(###)Summenbildung
Next                                                'dann V dem Funktionsnamen zuweisen
Kegelabschnitt = V                                  'Rückgabewert
End Function

gruss hary

Anzeige
AW: Formel in VBA läuft nicht ( Excel 2016 )
09.03.2016 10:56:20
Ali
Vielen Dank für die schnelle Antwort. Ja die Berechnung läuft. Nur gibt er mit irgendwie ein negatives Volumen aus. Kann allerdings nicht sein.
Ich hab nochmal geschaut, aber die Formeln sind soweit richtig eingegeben. Vielleicht könntest du auch nochmal drüber schauen. Vier Augen sehen mehr ;)
Eine Frage habe ich noch. Wie kann ich Excel sagen, dass er diese Berechnung permanent durchführen soll, sobald in den entsprechenden Zellen die Werte für dk, hk, lx errechnet wurden?

AW: Da muss ich passen....
09.03.2016 11:16:21
hary
Moin
...die Berechnung uebersteigt mein "Rechenzentrum". ;-))
Frage auf offen.
gruss hary

Anzeige
AW: Formel in VBA läuft nicht ( Excel 2016 )
09.03.2016 13:00:28
JoWE
Hallo,
da stimmt was nicht: lx = Worksheets("Berechnung").Range("K30")
Die Funktion erwartet aber eine Variable 'lk'.
Bei lk = lx ändert das aber nichts am negativen Ergebnis.
Formel korrekt angewendet? Keine Verwechselung '+' und '-'?
Gruß
Jochen

AW: Formel in VBA läuft nicht ( Excel 2016 )
09.03.2016 13:14:44
Ali
Ja diese Fehler mit lk habe ich auch schon bereinigt. Ich denke du hast Recht, es muss irgendwo ein Vorzeichen falsch gesetzt worden sein.
Kannst du mir verraten, wie ich bei Excel eingeben kann, dass er diese Rechnung permanent durchführt, sobald sich die Werte für die Variablen lx, dk, hk ändern?

Anzeige
AW: Formel in VBA läuft nicht ( Excel 2016 )
09.03.2016 13:26:19
Ali
Hmm, also ich habe gerade eine Handrechnung durchgeführt und die Vorzeichen scheinen alle richtig zu sein.

AW: Formel in VBA läuft nicht ( Excel 2016 )
09.03.2016 13:36:22
JoWE
Hallo Ali,
nutze statt der Prozedur für einen CommandButton die Funktion 'Kegelabschnitt' (die hast Du ja schon). Die gehört in ein Modul (nicht in die Klasse der Tabelle!!). Dann steht sie nach Speichern der Arbeitsmappe im Funktionsassistenten schon zur Verfügung. In die Zelle K34 gibst Du dann ein: '=Kegelabschnitt(H32;K31;K30;K33)'. Änderungen der Parameter (Zellen H32,K31,K30;K33) bewirken eine automatische Neuberechnung.
Gruß
Jochen

AW: Formel in VBA läuft nicht ( Excel 2016 )
09.03.2016 14:29:37
Ali
Als Neuling in VBA muss ich gestehen, dass ich nicht genau weiß was eine Klasse ist. Ich habe, wenn ich deinen Rat richtig verstanden habe, nun ein Modul das wie folgt aussieht:
Public Function Kegelabschnitt(hk, dk, lx, N) As String
On Error GoTo Meldung                                           'Bei Fehler gehe zu Sprungmarke
'Fokus aus Button "Neu"
hk = Worksheets("Berechnung").Range("Q28")                  'Eingabegröße Kegelhöhe
dk = Worksheets("Berechnung").Range("Q30")                  'Grundkreisdurchmesser
lx = Worksheets("Berechnung").Range("Q29")                  'Abstand des Abschnitts von  _
Kegelachse
N = Worksheets("Berechnung").Range("Q31")                   'Schichtanzahl
V = Kegelabschnitt(hk, dk, lx, N)                           'Rückgabewert
Worksheets("Berechnung").Range("Q32") = V: Exit Sub         'Str nicht nötig
Meldung:
MsgBox "Bitte Werte eingeben!", 20, "Hinweis"
Worksheets("Berechnung").Range("Q28").Select
If lx = 0 Then lx = 0.000001                            'lx darf nicht 0 werden, da es im  _
TangensW im Nenner steht
rk = dk / 2
hA = (rk - lx) * hk / rk
dy = hA / N
For i = 1 To N
y = hk - (i * dy - dy / 2)
R = y * rk / hk                                     'Zelle *
Bx = R - lx                                         'Zelle **
s = 2 * Sqr(R ^ 2 - lx ^ 2)                         'Zelle ***
arctangensW = (s / lx) / 2                          'Tangenswert von Winkel/2
WB = Atn(tandgensW)                                 'Winkel W in rad (Bogen)
b = R * WB * 2                                      '(#)Bogenlänge B
dA = b * R / 2 - s * (R - Bx) / 2                   '(##)Kreisabschnitt
dV = dA * dy                                        'Schichtvolumen
V = V + dV                                          '(###)Summenbildung
Next                                                'dann V dem Funktionsnamen zuweisen
Kegelabschnitt = V                                  'Rückgabewert
End Function
Die Berechnung will aber so nicht starten :) Den Rest habe ich so wie du mir empfohlen hast eingegeben ( In die Zelle K34 gibst Du dann ein: '=Kegelabschnitt(H32;K31;K30;K33)'. Änderungen der Parameter (Zellen H32,K31,K30;K33) bewirken eine automatische Neuberechnung. )

Anzeige
AW: Formel in VBA läuft nicht ( Excel 2016 )
09.03.2016 14:31:32
Ali
PS: Die Zellen habe ich verschoben aber richtig angepasst in '=Kegelschnitt(Q28;Q30;Q29;Q31)'.

AW: Formel in VBA läuft nicht ( Excel 2016 )
09.03.2016 15:47:09
EtoPHG
Hallo Ali,
1. Wenn du schon eine UDF (User Defined Function) schreibst, erübrigt sich das ganze Geduddel mit Command_buttons und Parameterübergaben aus Zellen an die Funktion. Du schreibst einfach in eine Zelle die Formel =Kegelabschnitt(und referenzierst hier die Zellen mit den Parametern), also z.B.
in Q32:
=Kegelabschnitt(Q28;Q30;Q29;Q31)

und schon müsste das richtige Resultat erscheinen, wenn denn
2. Die UDF keinen falschen Code enthält. Empfehlung an VBA-Rookies: Benutzt in allen Modulen als erste Codezeile
Option Explicit

das erfordert eine Daten-Deklaration aller Variablen. Im VBE und Extras - Optionen - |Editor| [x] Variabledeklaration erforderlich einstellbar!
Du benutzt z.B. eine Variable TangensW und anschliessend eine tandgensW. Sowas würdest sehr schnell als Fehler entdecken, da Excel den Code gar nicht ausführen würde, sondern dich darauf hinweisen, dass da Variablen nicht definiert sind.
3. Der Code müsste also so aussehen:
Public Function Kegelabschnitt(hk As Double, dk As Double, lx As Double, N As Integer) As  _
Double
Dim rk As Double, hA As Double, dy As Double, y As Double, b As Double, dA As Double
Dim R As Double, Bx As Double, s As Double, WB As Double, dV As Double
Dim TangensW As Double
Dim i As Integer
If lx = 0 Then lx = 0.000001         'lx darf nicht 0 werden
rk = dk / 2: hA = (rk - lx) * hk / rk: dy = hA / N
For i = 1 To N
y = hk - (i * dy - dy / 2)
R = y * rk / hk                                     'Zelle *
Bx = R - lx                                         'Zelle **
s = 2 * Sqr(R ^ 2 - lx ^ 2)                         'Zelle ***
TangensW = s / 2 / lx                               'Tangenswert von Winkel/2
WB = Atn(TangensW)                                  'Winkel W in rad (Bogen)
b = R * WB * 2                                      '(#)Bogenlänge B
dA = b * R / 2 - s * (R - Bx) / 2                   '(##)Kreisabschnitt
dV = dA * dy                                        'Schichtvolumen
Kegelabschnitt = Kegelabschnitt + dV                '(###)Summenbildung
Next i
End Function
und kann dann als Formel, wie oben beschrieben verwendet werden!
Gruess Hansueli

Anzeige
AW: Formel in VBA läuft nicht ( Excel 2016 )
10.03.2016 08:54:03
Ali
Tausend Dank nochmal. Jetzt fundktioniert auch die Berechnug der Formel :)

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige