For next schleifen kombinieren und Summenbildung

Hallo,
ich bin absoluter VB Anfänger und muß dringend folgendes mit VB6
lösen. Ich bin am verzweifeln! Hilfääää!

Gegeben:
Uhzeit erster Tag in Tagesminuten =>> TagesminutenStart
Uhrzeit letzter Tag in Tagesminuten =>> TagesminutenEnde
Datum erster Tag in Tagen im Jahr =>> TagImJahrStart
Datum letzter Tag in Tagen im Jahr =>> TagImJahrEnde
Anzahl der Tage in Tagen =>> Tagesdifferenz
Ein Tag = 1440 Minuten
Gesucht:
Aufsummierte Sonnenenergie zwischen zwei Zeitpunkten

Meine Idee:

Schritt 1 (Erster Tag)
For Tagesminuten = TagesminutenStart To 1440 Step 1
1.Berechnungsformel = A+Tagesminuten+B…
2 Berechnungsformel = A+TagImJahrStart+B…
3.Berechnungsformel = 1.Berechnungsformel+2.Berechnungsformel
Next Tagesminuten

Schritt 2 (zweiter bis vorletzter Tag)
For TagImJahr = (TagImJahrStart+1) To (TagImJahrEnde-1) Step 1
For Tagesminuten = 1 To 1440 Step 1
1.Berechnungsformel = A+Tagesminuten+B…
2.Berechnungsformel = A+ TagImJahr+B…
3.Berechnungsformel = 1.Berechnungsformel+2.Berechnungsformel
Next Tagesminuten
Next TagImJahr

Schritt 3 (letzter Tag)
For Tagesminuten = 1 To TagesminutenEnde Step 1
1.Berechnungsformel = A+Tagesminuten+B…
2. Berechnungsformel = A+TagImJahrEnde+B…
3.Berechnungsformel = 1.Berechnungsformel+2.Berechnungsformel
Next Tagesminuten

Schritt4 (Aufsummierte Sonnenenergie)
Summe aller 3.Berechnungsformeln aus Schritt 1-3

Wie sieht der Syntax richtig aus?
Ich hoffe die Aufgabe ist klar -Ansonsten fragt bitte, ich Antworte
natürlich gerne!
Danke

Hallo,

Hi Dominik,
ich schau da nicht ganz durch.
Suchst du einfach die Differenz zwischen zwei Zeiten (in Minuten)?

Dim startdatum, enddatum As Date
Dim startminuten, endminuten, gesamtminuten As Integer
startminuten = 1300
endminuten = 0
startdatum = #5/22/2005#
enddatum = #5/26/2005#
gesamtminuten = DateDiff("n", d1, d2) - startminuten + endminuten 'n steht hierbei für die Minuten

Gruß.Timo

Hallo,

Du machst das viel zu kompliziert. :smile:
Ich habe gerade mal …

Text1.Text = Now

… getippt und erhalte:

28.05.2006 14:15:02

Gibst Du Datum und Uhrzeit so an, kannst Du die Differenz zwischen zwei Zeitpunkten mit ‚DateDiff‘ bestimmen. Eine Funktion statt eines Programms. :smile: Beispiel:

Option Explicit

Private Sub Command1\_Click()
 Dim Startzeit As String
 Dim Jetzt As String
 Startzeit = "28.05.2006 14:15:02"
 Jetzt = Now
 Label1.Caption = DateDiff("s", Startzeit, Jetzt)
End Sub

Das „s“ sagt, daß die Differenz in Sekunden gebraucht wird. Minuten Tage … geht auch, wie sagt Dir die Hilfe von VB.

Gruß, Rainer

Vielen Dank für Eure Mühe,
aber es geht nicht nur um die Zeitdifferenz. Meine Formeln
benötigen zwei Variablen. Die Tagesminuten und der Tag im Jahr.
Für jede Minute am Tag bekomme ich eine andere Sonnenenergie heraus.
Jeden Tag steht die Sonne anders am Himmel deshalb ist auch der Tag
im Jahr wichtig.
Zudem muss ich nun die Sonnenenergie die ich jede Minute am
jeweiligen Tag im Jahr herausbekomme aufsummieren.
Das wär´s.
Ich glaube mein Vorschlag ist prinzipiell richtig. -Aber wie ist der
Syntax dazu?
Danke

Hallo Dominik,

Ich glaube mein Vorschlag ist prinzipiell richtig. -Aber wie
ist der
Syntax dazu?

hmmm, wie soll man ‚Pseudocode‘ debuggen? Was mir aufgefallen ist, ist daß ‚Step 1‘ überflüssig ist, stört aber auch nicht.
Die Schleife ist richtig geschrieben, was Du dann als ‚Formel‘ als Code schreibst, können wir nicht wissen. Du willst duch da nicht einen Stzring eintragen, der eine Formel samt Rechenzeichen enthält eintragen?

Gruß, Rainer

hmmm, wie soll man ‚Pseudocode‘ debuggen? Was mir aufgefallen
ist, ist daß ‚Step 1‘ überflüssig ist, stört aber auch nicht.
Die Schleife ist richtig geschrieben, was Du dann als ‚Formel‘
als Code schreibst, können wir nicht wissen. Du willst duch da
nicht einen Stzring eintragen, der eine Formel samt
Rechenzeichen enthält eintragen?

Gruß, Rainer

Hallo Reiner,
also ich versuch das jetzt mal mit den For-Schleifen.
-Aber wie bekomme ich die Summe der 3.Formel von jedem Schritt und
jedem Step???
Danke

Ich kopier mal den bisherigen Syntax rein. Funktioniert für einen
bestimmten Zeitpukt.

Option Explicit

Dim arMonat
Dim iBreitengr As Integer
Dim iBreitenGrad As Integer
Dim iBreitenmin As Integer
Dim iBreitensec As Integer
Dim iLaengengr As Integer
Dim iLaengenGrad As Integer
Dim iLaengenmin As Integer
Dim iLaengensec As Integer
Dim iDatumDay As Integer
Dim iDatumMonth As Integer
Dim iTagNr As Integer
Dim iUhrzeitStd As Integer
Dim iUhrzeitMin As Integer
Dim iTagesMin As Integer
Dim iNeigungswinkel As Integer
Dim iAzimutwinkel As Integer

Dim iDeklination As Double
Dim iZeitgleichung As Double
Dim iEinstrahlwinkel As Double
Dim PHI As Double
Dim iStrahlungsenergie As Integer
Dim iSonnenZeit As Double
Dim iStundenWinkel As Double
Dim iZeitdifferenz As Double
Dim iAufgangMez As Double
Dim iUntergangMez As Double
Dim arTageseinstrahlung(1, 24) As Integer 'Tageseinstrahlung Diagramm
Dim pi As Currency

Dim tmp As Double

Private Sub Command2_Click()
If Ortsauswahl = „Konstanz“ Then
tbBreitengrad(1).Text = „47“
tbBreitenmin(5).Text = „40“
tbBreitensec(6).Text = „5“
tbLaengengrad(2).Text = „9“
tbLaengenmin(3).Text = „10“
tbLaengensec(4).Text = „11“
End If

If Ortsauswahl = „München“ Then
tbBreitengrad(1).Text = „48“
tbBreitenmin(5).Text = „8“
tbBreitensec(6).Text = „5“
tbLaengengrad(2).Text = „11“
tbLaengenmin(3).Text = „34“
tbLaengensec(4).Text = „11“
End If

If Ortsauswahl = „Stuttgart“ Then
tbBreitengrad(1).Text = „48“
tbBreitenmin(5).Text = „47“
tbBreitensec(6).Text = „12“
tbLaengengrad(2).Text = „9“
tbLaengenmin(3).Text = „11“
tbLaengensec(4).Text = „4“
End If

If Ortsauswahl = „New York“ Then
tbBreitengrad(1).Text = „40“
tbBreitenmin(5).Text = „43“
tbBreitensec(6).Text = „6“
tbLaengengrad(2).Text = „74“
tbLaengenmin(3).Text = „1“
tbLaengensec(4).Text = „15“
End If

If Ortsauswahl = „Berlin“ Then
tbBreitengrad(1).Text = „52“
tbBreitenmin(5).Text = „30“
tbBreitensec(6).Text = „0“
tbLaengengrad(2).Text = „13“
tbLaengenmin(3).Text = „20“
tbLaengensec(4).Text = „15“
End If
End Sub

Private Sub Form_Load()
'Ortsauswahl
Ortsauswahl.AddItem „Konstanz“
Ortsauswahl.AddItem „München“
Ortsauswahl.AddItem „Stuttgart“
Ortsauswahl.AddItem „New York“
Ortsauswahl.AddItem „Berlin“

'Zeit h
ZeitStd(0).AddItem „1“
ZeitStd(0).AddItem „2“
ZeitStd(0).AddItem „3“
ZeitStd(0).AddItem „4“
ZeitStd(0).AddItem „5“
ZeitStd(0).AddItem „6“
ZeitStd(0).AddItem „7“
ZeitStd(0).AddItem „8“
ZeitStd(0).AddItem „9“
ZeitStd(0).AddItem „10“
ZeitStd(0).AddItem „11“
ZeitStd(0).AddItem „12“
ZeitStd(0).AddItem „13“
ZeitStd(0).AddItem „14“
ZeitStd(0).AddItem „15“
ZeitStd(0).AddItem „16“
ZeitStd(0).AddItem „17“
ZeitStd(0).AddItem „18“
ZeitStd(0).AddItem „19“
ZeitStd(0).AddItem „20“
ZeitStd(0).AddItem „21“
ZeitStd(0).AddItem „22“
ZeitStd(0).AddItem „23“
ZeitStd(0).AddItem „24“
'Zeit min
ZeitMin(1).AddItem „0“
ZeitMin(1).AddItem „5“
ZeitMin(1).AddItem „10“
ZeitMin(1).AddItem „15“
ZeitMin(1).AddItem „20“
ZeitMin(1).AddItem „25“
ZeitMin(1).AddItem „30“
ZeitMin(1).AddItem „35“
ZeitMin(1).AddItem „40“
ZeitMin(1).AddItem „45“
ZeitMin(1).AddItem „50“
ZeitMin(1).AddItem „55“
'DatumTag
DatumTag.AddItem „1“
DatumTag.AddItem „2“
DatumTag.AddItem „3“
DatumTag.AddItem „4“
DatumTag.AddItem „5“
DatumTag.AddItem „6“
DatumTag.AddItem „7“
DatumTag.AddItem „8“
DatumTag.AddItem „9“
DatumTag.AddItem „10“
DatumTag.AddItem „11“
DatumTag.AddItem „12“
DatumTag.AddItem „13“
DatumTag.AddItem „14“
DatumTag.AddItem „15“
DatumTag.AddItem „16“
DatumTag.AddItem „17“
DatumTag.AddItem „18“
DatumTag.AddItem „19“
DatumTag.AddItem „20“
DatumTag.AddItem „21“
DatumTag.AddItem „22“
DatumTag.AddItem „23“
DatumTag.AddItem „24“
DatumTag.AddItem „25“
DatumTag.AddItem „26“
DatumTag.AddItem „27“
DatumTag.AddItem „28“
DatumTag.AddItem „29“
DatumTag.AddItem „30“
DatumTag.AddItem „31“
'DatumMonat
DatumMonat(3).AddItem „1“
DatumMonat(3).AddItem „2“
DatumMonat(3).AddItem „3“
DatumMonat(3).AddItem „4“
DatumMonat(3).AddItem „5“
DatumMonat(3).AddItem „6“
DatumMonat(3).AddItem „7“
DatumMonat(3).AddItem „8“
DatumMonat(3).AddItem „9“
DatumMonat(3).AddItem „10“
DatumMonat(3).AddItem „11“
DatumMonat(3).AddItem „12“

End Sub

Private Sub Command1_Click()

’ Einlesen der Textfelder
iDatumDay = DatumTag.Text
iBreitenGrad = tbBreitengrad(1).Text
iBreitenmin = tbBreitenmin(5).Text
iBreitensec = tbBreitensec(6).Text
iLaengenGrad = tbLaengengrad(2).Text
iLaengenmin = tbLaengenmin(3).Text
iLaengensec = tbLaengensec(4).Text
iDatumMonth = DatumMonat(3).Text
iUhrzeitStd = ZeitStd(0).Text
iUhrzeitMin = ZeitMin(1).Text
iNeigungswinkel = Neigung.Text
iAzimutwinkel = Azimut.Text
pi = 3.141592654

'Anpassung der Variablen
'Tag im Jahr
arMonat = Array(0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304,
334, 365)
iTagNr = arMonat(iDatumMonth - 1) + iDatumDay

'Tagesminuten
iTagesMin = iUhrzeitStd * 60 + iUhrzeitMin

'Breitengrad
iBreitengr = iBreitenGrad + ((iBreitenmin + (iBreitensec / 60)) /
60)

'Laengengrad
iLaengengr = iLaengenGrad + ((iLaengenmin + (iLaengensec / 60)) /
60)

'Formeln - Deklination
tmp = 360 * (pi / 180) * ((284 + iTagNr) / 365)
iDeklination = ((23.45 * (pi / 180)) * Sin((tmp))) * (180 / pi)

'Sonnenaufgang h=-50 Bogenminuten = -0.0145
'Zeitdifferenz
iZeitdifferenz = 12 * ((Cos((Sin(-0.0145)) ^ -1) - Sin(0.9163) *
Sin(iDeklination)) / (Cos(0.9163) * Cos(iDeklination))) / pi

'Zeitgleichung
tmp = ((iTagNr - 81) * 0.989 * (pi / 180))
iZeitgleichung = 9.87 * Sin(2 * tmp) - 7.53 * Cos(tmp) - 1.5 *
Sin(tmp)

'MEZ in dezimal
iAufgangMez = (12 - iZeitdifferenz) + (15 - iLaengenGrad) * 4 /
60

'Untergang MEZ in dezimal
iUntergangMez = (12 + iZeitdifferenz) - (15 - iLaengenGrad) * 4 /
60

'Sonnenzeit
iSonnenZeit = iTagesMin + (4 * (15 - iLaengengr)) +
iZeitgleichung

'Stundenwinkel
iStundenWinkel = 0.25 * (720 - iSonnenZeit)

'Einstrahlwinkel
tmp = (pi / 180)

PHI = (Cos(iNeigungswinkel * (tmp)) * Sin(iBreitengr * (tmp)) -
Cos(iBreitengr * (tmp)) * Cos(iAzimutwinkel * (tmp)) *
Sin(iNeigungswinkel * (tmp))) * Sin(iDeklination * (tmp)) +
(Sin(iBreitengr * (tmp)) * Cos(iAzimutwinkel * (tmp)) *
Sin(iNeigungswinkel * (tmp)) + Cos(iNeigungswinkel * (tmp)) *
Cos(iBreitengr * (tmp))) * Cos(iDeklination * (tmp)) *
Cos(iStundenWinkel * (tmp)) + Sin(iAzimutwinkel * (tmp)) *
Sin(iNeigungswinkel * (tmp)) * Cos(iDeklination * (tmp)) *
Sin(iStundenWinkel * (tmp))

iEinstrahlwinkel = ((PHI))

'Strahlungsenergie
iStrahlungsenergie = iEinstrahlwinkel * 1357

'Ergebnis
If (iStrahlungsenergie > 0) Then
tbErg.Text = iStrahlungsenergie
Else
tbErg.Text = iStrahlungsenergie
End If

'Zwischenergebnisse
TagNr.Text = iTagNr
Deklination.Text = iDeklination
Zeitgl.Text = iZeitgleichung
SonnenZeit.Text = iSonnenZeit
Stundenwinkel.Text = iStundenWinkel
Sonnenaufgang.Text = iAufgangMez
Sonnenuntergang.Text = iUntergangMez
cosphi.Text = PHI

'MSChart definieren
With MSChart1.DataGrid
.ColumnCount = 1
.RowCount = 7
.SetData 1, 1, -800, False
.SetData 2, 1, -200, False
.SetData 3, 1, 100, False
.SetData 4, 1, 800, False
.SetData 5, 1, 900, False
.SetData 6, 1, 700, False
.SetData 7, 1, -50, False
End With

End Sub

Private Sub tbTag_Change()

End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X
As Single, Y As Single)
Select Case Neigung(0).ListIndex

End Sub

Private Sub VScroll2_Change()

End Sub

OK
Ich glaube das war verwirrend.
Die Schleifen sollen vereinfacht so aussehen:

Option Explicit

Private Sub Command1_Click()
Dim TagesminutenStart As Currency
Dim TagesminutenEnde As Currency
Dim TagImJahrStart As Currency
Dim TagImJahrEnde As Currency
Dim Tagesminuten As Currency
Dim A As Currency
Dim B As Currency
Dim C As Currency
Dim D As Currency
Dim E As Currency
Dim TagImJahr As Currency

’ Einlesen der Textfelder
TagesminutenStart = 550
TagesminutenEnde = 200
TagImJahrStart = 20
TagImJahrEnde = 120

'Schritt 1 (Erster Tag)
For Tagesminuten = TagesminutenStart To 1440 Step 1
A = Tagesminuten
B = TagImJahrStart
C = A + B
Next Tagesminuten

'Schritt 2 (zweiter bis vorletzter Tag)
For TagImJahr = (TagImJahrStart + 1) To (TagImJahrEnde - 1) Step 1
For Tagesminuten = 1 To 1440 Step 1
A = Tagesminuten
B = TagImJahr
C = A + B
Next Tagesminuten
Next TagImJahr

'Schritt 3 (letzter Tag)
For Tagesminuten = 1 To TagesminutenEnde Step 1
A = Tagesminuten
B = TagImJahrEnde
C = A + B
Next Tagesminuten

'Schritt4 (Aufsummierte Sonnenenergie)
'Summe aller C aus Schritt 1-3
Text1.Text = C

End Sub

Meine Frage ist wie Summiere ich C auf (Summe C von jedem Step)???
Vielen Dank

Hallo,

Ich kopier mal den bisherigen Syntax rein. Funktioniert für
einen
bestimmten Zeitpukt.

OK, sehen wir uns das mal an.

Option Explicit

Dim arMonat

Dim tmp As Double

bis hier her sieht das schon mal sehr kompliziert aus. Ob ich da durchsteige? Ein wenig Ahnung von Astronomie wäre sicher hilfreich, habe ich leider nicht. :frowning:

Private Sub Command2_Click()
If Ortsauswahl = „Konstanz“ Then
tbBreitengrad(1).Text = „47“
tbBreitenmin(5).Text = „40“
tbBreitensec(6).Text = „5“
tbLaengengrad(2).Text = „9“
tbLaengenmin(3).Text = „10“
tbLaengensec(4).Text = „11“
End If

If Ortsauswahl = „München“ Then
tbBreitengrad(1).Text = „48“
tbBreitenmin(5).Text = „8“
tbBreitensec(6).Text = „5“
tbLaengengrad(2).Text = „11“
tbLaengenmin(3).Text = „34“
tbLaengensec(4).Text = „11“
End If

If Ortsauswahl = „Stuttgart“ Then
tbBreitengrad(1).Text = „48“
tbBreitenmin(5).Text = „47“
tbBreitensec(6).Text = „12“
tbLaengengrad(2).Text = „9“
tbLaengenmin(3).Text = „11“
tbLaengensec(4).Text = „4“
End If

If Ortsauswahl = „New York“ Then
tbBreitengrad(1).Text = „40“
tbBreitenmin(5).Text = „43“
tbBreitensec(6).Text = „6“
tbLaengengrad(2).Text = „74“
tbLaengenmin(3).Text = „1“
tbLaengensec(4).Text = „15“
End If

If Ortsauswahl = „Berlin“ Then
tbBreitengrad(1).Text = „52“
tbBreitenmin(5).Text = „30“
tbBreitensec(6).Text = „0“
tbLaengengrad(2).Text = „13“
tbLaengenmin(3).Text = „20“
tbLaengensec(4).Text = „15“
End If
End Sub

Das sieht nicht gut aus. Das würde ich mit Arrays lösen.
ein Array ‚Ort()‘ könnte die Namen enthalten. Dann kannst Di in ‚Form_Load‘ zuweisen:
Ort(0) = „Berlin“
und kannst dann den Index dem Namen zuordnen.
Damit kannst Du dann auch
Breitengrad(0)= 52 … oder … Breitengrad(0) = „52“
zuweisen.

Private Sub Form_Load()
'Ortsauswahl
Ortsauswahl.AddItem „Konstanz“
Ortsauswahl.AddItem „München“
Ortsauswahl.AddItem „Stuttgart“
Ortsauswahl.AddItem „New York“
Ortsauswahl.AddItem „Berlin“

in eine Liste? OK, dann …

For i = 0 to Ortsauswahl.ListCount -1
Ort(i) = Ortsauswahl.List(i)
Next

… und schon stehen die namen im Array. :smile:

'Zeit h
ZeitStd(0).AddItem „1“
ZeitStd(0).AddItem „2“
ZeitStd(0).AddItem „3“
ZeitStd(0).AddItem „4“
ZeitStd(0).AddItem „5“
ZeitStd(0).AddItem „6“
ZeitStd(0).AddItem „7“
ZeitStd(0).AddItem „8“
ZeitStd(0).AddItem „9“
ZeitStd(0).AddItem „10“
ZeitStd(0).AddItem „11“
ZeitStd(0).AddItem „12“
ZeitStd(0).AddItem „13“
ZeitStd(0).AddItem „14“
ZeitStd(0).AddItem „15“
ZeitStd(0).AddItem „16“
ZeitStd(0).AddItem „17“
ZeitStd(0).AddItem „18“
ZeitStd(0).AddItem „19“
ZeitStd(0).AddItem „20“
ZeitStd(0).AddItem „21“
ZeitStd(0).AddItem „22“
ZeitStd(0).AddItem „23“
ZeitStd(0).AddItem „24“

Oder …

For i = 1 to 24
ZeitStd(0).Additem i
Next

… das ist kürzer und übersichtlicher.

'Zeit min
ZeitMin(1).AddItem „0“
ZeitMin(1).AddItem „5“
ZeitMin(1).AddItem „10“
ZeitMin(1).AddItem „15“
ZeitMin(1).AddItem „20“
ZeitMin(1).AddItem „25“
ZeitMin(1).AddItem „30“
ZeitMin(1).AddItem „35“
ZeitMin(1).AddItem „40“
ZeitMin(1).AddItem „45“
ZeitMin(1).AddItem „50“
ZeitMin(1).AddItem „55“

Mit Step 5 ist das auch ein fall für eine Schleife.

'DatumTag
DatumTag.AddItem „1“
DatumTag.AddItem „2“
DatumTag.AddItem „3“
DatumTag.AddItem „4“
DatumTag.AddItem „5“
DatumTag.AddItem „6“
DatumTag.AddItem „7“
DatumTag.AddItem „8“
DatumTag.AddItem „9“
DatumTag.AddItem „10“
DatumTag.AddItem „11“
DatumTag.AddItem „12“
DatumTag.AddItem „13“
DatumTag.AddItem „14“
DatumTag.AddItem „15“
DatumTag.AddItem „16“
DatumTag.AddItem „17“
DatumTag.AddItem „18“
DatumTag.AddItem „19“
DatumTag.AddItem „20“
DatumTag.AddItem „21“
DatumTag.AddItem „22“
DatumTag.AddItem „23“
DatumTag.AddItem „24“
DatumTag.AddItem „25“
DatumTag.AddItem „26“
DatumTag.AddItem „27“
DatumTag.AddItem „28“
DatumTag.AddItem „29“
DatumTag.AddItem „30“
DatumTag.AddItem „31“
'DatumMonat
DatumMonat(3).AddItem „1“
DatumMonat(3).AddItem „2“
DatumMonat(3).AddItem „3“
DatumMonat(3).AddItem „4“
DatumMonat(3).AddItem „5“
DatumMonat(3).AddItem „6“
DatumMonat(3).AddItem „7“
DatumMonat(3).AddItem „8“
DatumMonat(3).AddItem „9“
DatumMonat(3).AddItem „10“
DatumMonat(3).AddItem „11“
DatumMonat(3).AddItem „12“

Und noch zwei Schleifen.

End Sub

Private Sub Command1_Click()

’ Einlesen der Textfelder
iDatumDay = DatumTag.Text
iBreitenGrad = tbBreitengrad(1).Text
iBreitenmin = tbBreitenmin(5).Text
iBreitensec = tbBreitensec(6).Text
iLaengenGrad = tbLaengengrad(2).Text
iLaengenmin = tbLaengenmin(3).Text
iLaengensec = tbLaengensec(4).Text
iDatumMonth = DatumMonat(3).Text
iUhrzeitStd = ZeitStd(0).Text
iUhrzeitMin = ZeitMin(1).Text
iNeigungswinkel = Neigung.Text
iAzimutwinkel = Azimut.Text
pi = 3.141592654

'Anpassung der Variablen
'Tag im Jahr
arMonat = Array(0, 31, 59, 90, 120, 151, 181, 212, 243,
273, 304,
334, 365)

Was ist das? Das kann so nicht stimmen! Einen so großen Speicher hat Dein Computer nicht, daß er das verwalten kann.

Dim Array(10) as Byte

Verbraucht 10 Bytes Speicher.

Dim Array (10,10) As Byte verbraucht 10*10 = 100 Bytes Speicher, das sind 100 Variablen in ein Array gepresst. Nun sieh dir dein Array an, ich kann noch nicht mal schätzen, wie viele Nullen die Zahl hat. :smile: Brauchst Du wirklich 1 * 10 hoch 99 Variablen oder noch mehr? Das kann nicht gut sein.

Den Rest verstehe ich nicht, kann ich nicht kommentieren.

Allgemein habe ich den Eindruck, daß du zu viel in den Steuerelementen rechnst, statt in Variablen. Das macht das Programm langsam. Schreib nur in Listen, was der Anwender sehen soll. Zum rechnen sind Arrays besser, weil schneller.

Gruß, Rainer

Meine Frage ist wie Summiere ich C auf (Summe C von jedem
Step)???
Vielen Dank

Hallo Dominik,

Private Variablenname as Variablentyp ( Long, Single, Double etc)

Nach jeder Schleife einfach

Variablenname = variablenname + c

Somit hast du nach Ablauf der 3 Schleifen die Gesamt Summe im Variablenname. :smile:

Aber habe ich das richtig verstanden.

Du hast ein Startdatum und Startzeit
ein Enddatum und eine Endzeit.

Nun möchtest du für JEDE MINUTE die dazwischen liegt eine Berechnung machen oder nur für einen bestimmten Tag und eine bestimmte zeit?

Mfg Alex

Hi Dominik,

ich versuche auch erst mal das Ziel zu definieren.

Willst Du für einen bestimmten Ort, der angegeben werden kann berechnen, wie viel Minuten zwischen zwei Zeitpunkten es an dem Ort hell war? Vom Wetter abgesehen, die gasamte Sonnenscheindauer ermittlen?
Damit willst Du dann die theoretische Energieausbeute von Sonnenkollektoren / Fotovoltaikanlagen abhängig vom Ort berechnen?

Gruß, Rainer

Hallo Dominik,

Private Variablenname as Variablentyp ( Long, Single, Double
etc)

Nach jeder Schleife einfach

Variablenname = variablenname + c

Somit hast du nach Ablauf der 3 Schleifen die Gesamt Summe im
Variablenname. :smile:

Vielen Dank Alex -ich werd´s mal versuchen

Aber habe ich das richtig verstanden.

Du hast ein Startdatum und Startzeit
ein Enddatum und eine Endzeit.

Ja!

Nun möchtest du für JEDE MINUTE die dazwischen liegt eine
Berechnung machen

Ja für jede Minute die dazwischen liegt.

Mfg Alex

Hallo Dominik,

Private Variablenname as Variablentyp ( Long, Single, Double
etc)

Nach jeder Schleife einfach

Variablenname = variablenname + c

Somit hast du nach Ablauf der 3 Schleifen die Gesamt Summe im
Variablenname. :smile:

Hallo Alex,
sorry aber ich habe nichts zur „Private“ -funktion in meinem Buch
gefunden. Visual Basic motzt auch wegen ungültigem Attribut.
Ich bin absoluter VB Anfänger. Könntest Du so nett sein und Deine
Idee in den Syntax einfügen? Vielleicht verstehe ich es dann.
Vielen Dank

Option Explicit

Private Sub Command1_Click()
Dim TagesminutenStart As Currency
Dim TagesminutenEnde As Currency
Dim TagImJahrStart As Currency
Dim TagImJahrEnde As Currency
Dim Tagesminuten As Currency
Dim A As Currency
Dim B As Currency
Dim C As Currency
Dim D As Currency
Dim E As Currency
Dim TagImJahr As Currency

’ Einlesen der Textfelder
TagesminutenStart = 550
TagesminutenEnde = 200
TagImJahrStart = 20
TagImJahrEnde = 120

'Schritt 1 (Erster Tag)
For Tagesminuten = TagesminutenStart To 1440 Step 1
A = Tagesminuten
B = TagImJahrStart
C = A + B
Next Tagesminuten

'Schritt 2 (zweiter bis vorletzter Tag)
For TagImJahr = (TagImJahrStart + 1) To (TagImJahrEnde - 1) Step 1
For Tagesminuten = 1 To 1440 Step 1
A = Tagesminuten
B = TagImJahr
C = A + B
Next Tagesminuten
Next TagImJahr

'Schritt 3 (letzter Tag)
For Tagesminuten = 1 To TagesminutenEnde Step 1
A = Tagesminuten
B = TagImJahrEnde
C = A + B
Next Tagesminuten

'Schritt4 (Aufsummierte Sonnenenergie)
'Summe aller C aus Schritt 1-3
Text1.Text = C

End Sub

Hallo Dominik,

also wenn ich dich richtig verstanden habe. dann suchst du folgendes

Private Sub Command1\_Click()
On Error Resume Next 
 Dim d1 As Double, d2 As Double
 d1 = CDate("01.01.2006 12:36:24")
 d2 = Now
 Do While d1 

MfG Alex

Hallo Dominik,

im vorhergehenden Thread habe ich dir eine Lösung geschrieben.

Du musst lediglich die Variablen d1 und d2 anpassen.

D2 haben ich auf die derzeit aktuelle zeit gesetzt! ( Now)
D1 habe ich zu Testzwecken einen Wert zugewiesen.

Möchtest du ihn ändern, dann mache es in der Form

TT.MM.YYYY HH:MM:SS

Dieses wird dann in ein Datum geaendert und durch die Zuweisung dann dieser Wert in ein Wert vom Typ Double gewandelt ( Kann man machen da VB intern eh mit Double arbeitet bei Datumswerten )

Zwischen do und Loop wird die Bearbeitung so oft durchgefuehrt wie Minuten dazwischen liegen.

Bsp.

d1 = 28.05.2006 12:00:00
d2= 28.05.2006 12:05:00

–> Do Loop Schleife wird 5 mal ausgefuehrt :wink:

Mfg Alex

Hi Alex,
das Problem ist das meine Berechnungen den Tag im Jahr und die
Tagesminuten am jeweiligen Tag im Jahr braucht.
z.B. 15.Jan 2.00Uhr - 16.Jan 12.00Uhr
Erster Tag
Tag im Jahr = 15,15,15,15…15
Tagesminuten = 61,62,63,64…1440
letzter Tag
Tag im Jahr = 16,16,16,16,16…16
Tagesminuten = 1, 2, 3, 4, 5…720

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Dominik,

auch das sollte nicht das Problem sein :wink:

Ändere mal alles wiefolgt ab.

Private Sub Berechne(Startdatum As String, Enddatum As String)
On Error Resume Next
 Dim d1 As Double, d2 As Double
 Dim Jahr%, Monat%, Tag%, Stunde%, Min%, Sekunde%, Wochentag%
 Dim d As Date
 d1 = CDate(Startdatum)
 d2 = CDate(Enddatum)
 Do While d1 

Die Sub Berechne macht das was du möchtest :smile:
Aufrufen musst du sie wie ich es in der Sub Command1 gemacht habe, jedoch mit den richtigen Werten :wink:
Unter den Variablen Jahr, Monat, Tag, Stunde, Min(Min = Minute) , Sekunde und Weekday hast du nun deine gewünschten Informationen :wink:

LG Alex


> <small>[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]</small>

Hallo Rainer,
ganz genau die theoretische Energieausbeute einer Solaranlage
abhängig vom Ort. Wobei nicht bestimmt werden soll ob es hell ist
sondern wie hell es ist bzw. die Strahlungsenergie.
MfG Dominik

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Dominik,

Wobei nicht bestimmt werden soll ob es hell
ist
sondern wie hell es ist bzw. die Strahlungsenergie.

ja, verstanden. Du berechnest den Einstrahlungswinkel aus Datum, Uhrzeit und Ort. Datum und Uhrzeit liefert Dir ja jetzt der Code von Alex. Das KnowHow, um dann aus dem Ort damit die Energie zu berechnen hast Du selbst. Wo klemmt’s jetzt noch?

Gruß, Rainer

Hallo Alex,(-Hallo Rainer),
danke erstmal. Ich sitze hier mit meinem VB6 Buch und versuche erst
mal nachzuvollziehen was Du mir vogeschlagen hast. Wie gesagt ist das
erste was ich programmiere -ich brauch jetzt erst mal paar min.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]