Thema Datum  Von Nutzer Rating
Antwort
Rot Sonnenuntergang
12.09.2011 20:29:52 Gast35931
*****
NotSolved
13.09.2011 20:02:55 Dekor
NotSolved

Ansicht des Beitrags:
Von:
Gast35931
Datum:
12.09.2011 20:29:52
Views:
1838
Rating: Antwort:
  Ja
Thema:
Sonnenuntergang

Hallo,

habe die folgende VBA-Funktion zur Berechnung des Sonnenuntergangs an einem bestimmten Geo-Punkt:

übergeben werden die Daten: Längengrad, Breitengrad, Tag im Jahr, Zeit in Stunden, Zeitdifferenz zur Weltzeit.

Leider funktioniert die Berechnung nicht. Kann mir jemand sagen, wo der Fehler liegt oder - noch besser - eine funktionierende Lösung hier reinschreiben? Ausserdem interessant: die Berechnung des Zeitpunkts, zu dem die Sonne bei einer bestimmten Gradzahl überm Horizont steht. Diese Daten sind wichtig für eingrößeres Projekt mit dem jüdischen Kalender, das ich zunächst in VBA lösen möchte, um es später zu übertragen.

Option Explicit
Const Pi = 3.14159265358979
Dim Lat, Lng As Double

Function RAD() As Double
  RAD = Pi / 180
End Function

Function SunHeight() As Double
  SunHeight = (-50# / 60#) * RAD
End Function

Function Sun_Declination(ByVal T As Double) As Double
  Sun_Declination = 0.409526325277017 * Sin(1.69060504029192E-02 * (T - 80.0856919827619))
End Function

Function Time_Difference(ByVal Declination As Double) As Double
  Time_Difference = 12# * Application.WorksheetFunction.Acos((Sin(SunHeight) - Sin(Lat * RAD) * Sin(Declination))) / (Cos(Lat * RAD) * Cos(Declination)) / Pi
End Function

Function Time_Equation(ByVal T As Double) As Double
  Time_Equation = -0.170869921174742 * Sin(3.36997028793971E-02 * T + 0.465419984181394) - 0.129890681040717 * Sin(1.78674832556871E-02 * T - 0.167936777524864)
End Function

Function Sunrise(ByVal T As Double) As Double
Dim SD As Double
  SD = Sun_Declination(T)
  Sunrise = 12 - Time_Difference(SD) - Time_Equation(T)
End Function

Function SunDown(ByVal T As Double) As Double
Dim SD As Double
  SD = Sun_Declination(T)
  SunDown = 12 + Time_Difference(SD) - Time_Equation(T)
End Function

Sub Display_Results()
Dim la, ln As String
Dim DiY, hour, td_utc As Double
Dim rise, down, equa, dekl As Double
  la = Replace(Worksheets(1).Range("C6"), ".", ",")
  ln = Replace(Worksheets(1).Range("C5"), ".", ",")
  Lat = CDbl(la)
  Lng = CDbl(ln)
  DiY = CDbl(Worksheets(1).Range("C7"))
  Debug.Print Lng
  Debug.Print Lat
  rise = Sunrise(DiY)
  rise = rise - Lng / 15# + Worksheets(1).Range("C9")
  down = SunDown(DiY)
  down = down - Lng / 15# + Worksheets(1).Range("C9")
  Worksheets(1).Range("C11") = rise
  Worksheets(1).Range("C12") = down
  Worksheets(1).Range("C13") = Time_Equation(DiY)
  Worksheets(1).Range("C14") = Sun_Declination(DiY)
End Sub

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:

 
 

  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Sonnenuntergang
12.09.2011 20:29:52 Gast35931
*****
NotSolved
13.09.2011 20:02:55 Dekor
NotSolved