Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1616to1620
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

VBA Programmierung einer Leistungsberechnung

VBA Programmierung einer Leistungsberechnung
05.04.2018 18:09:05
miepton
Hallo Forumscomunity,
bin gerade drüber eine Excel Tabelle bzw. ein VBA Programm zu schreiben um Leistungen einer Lüftungsanlage zu berechnen. Diese Leistungen errechne ich aus stündlichen Werten die auf einem Sheet stehen, also 8760 Werte. Jetzt zu meinem Problem: Ich habe mir das so vorgestellt, dass ich anhand eines Select Case Befehls, der anhand der Temperatur und Feuchte eines von 6 Unterprogrammen startet sowie bei nichtzuordnung eine Fehlermeldung ausgibt. Mein Problem besteht darin, dass ich dieses Vorgehen für alle 8760 Stunden machen möchte und dabei jede Stunde die Variablen Außenlufttemperatur und Feuchte überschreiben und die ganze Prozedur neu durchlaufen lassen möchte. Also als kleines Beispiel:
Stunde Temperatur Feuchte
1 -6,2 0,9
2 24 10
3 15 2,5
Bei Stunde 1 Call Programm 1
Bei Stunde 2 Call Programm 2
Bei Stunde 3 Call Programm 3
Bei dem Versuch das ganze über einen Range Befehl zu machen scheitere ich, ebenso wie beim Versuch einer Zählschleife und die Variable als Arry zu definieren.
Ich hoffe ich konnte mein Problem darstellen und ihr könnt mir helfen.
Gruß,
miepton

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Programmierung einer Leistungsberechnung
05.04.2018 21:15:56
Martin
Hallo miepton,
also dein VBA-Level mit "VBA gut" anzugeben ist mutig.
Gehen wir mal davon aus, dass es sich bei "Stunde" um eine Integer-Variable handelt. Dann gäbe es zum Beispiel folgende Lösungen:
'Variante1:
Select Case Stunde
Case 1
Call Makro1
Case 2
Call Makro2
Case 3
Call Makro3
End Select
'Variante 2
If Stunde = 1 Then
Call Makro1
ElseIf Stunde = 2 Then
Call Makro2
ElseIf Stunde = 3 Then
Call Makro3
End If
Viele Grüße
Martin
AW: VBA Programmierung einer Leistungsberechnung
06.04.2018 08:03:18
miepton
Hallo Martin,
das löst mein Problem leider nicht, vielleicht habe ich das falsch dargestellt.
Ich verusche das ganze nochmal:
Mein Select Case befehl sieht so aus:
Select Case tAUL & xAUL & hAUL
Case Winterfallv = xAUL = 6 & xAUL = 18
Call UnterRaum
Case Befeuchtenv = hAUL > 38.5 & xAUL = 6 & xAUL = 23
Call Trockenkühlen
Case Sommerv = xAUL > 10
Call Sommer
Case Raumkonditionv = xAUL >= 6 & xAUL = 18
Call Raumkondition
Case Fehlerv
MsgBox ("Es ist ein Fehler aufgetreten")

Die Variablen sind vorher natürlich definiert.
Jetzt geht es mir darum, dass sobald eines dieser Unterprogramme durchlaufen wurde, die ganze Prozedur von vorne startet und dabei sich die Zeilennummer um 1 erhöht. Bildlich gesprochen als erstes beginne die Zeile 1 auszuwerten, wenn fertig werte Zeile 2 aus usw. ende bei 8760.
Um den Select Case Befehlgeht es mir gar nicht, der erfüllt meines erachtens, seinen Zweck. Es geht darum die Variablen tAUL xAUL und hAUL so zu definieren, dass sie sich nach jeder beendigung des Programms selbstständig um 1 Zeile nach unten erhöht. Und das Programm sich neu startet, das sehe ich durch einen Loop möglich zu bewältigen.
Ich hoffe es ist jetzt etwas klarer geworden.
Gruß,
miepton
PS: Was ich vielleicht noch vergessen habe zu erwähnen, die Variablen des Select Case (tAUL, xAUL und hAUL) werden nach dem Select Case in den einzelnen Unterprogrammen weiter verarbeitet.
Anzeige
AW: VBA Programmierung einer Leistungsberechnung
06.04.2018 08:18:21
Martin
Hallo miepton,
für dein Vorhaben ist Select Case ungeeignet, da solltest du mit einer Wenn-Abfrage arbeiten:
Sub Beispiel()
If xAUL = 6 And xAUL = 18 Then
Call UnterRaum
ElseIf hAUL > 38.5 And xAUL = 6 And xAUL = 23 Then
Call Trockenkühlen
ElseIf xAUL > 10 Then
Call Sommer
ElseIf xAUL >= 6 And xAUL = 18 Then
Call Raumkondition
Else
MsgBox "Es ist ein Fehler aufgetreten", 48, "Fehler"
End If
End Sub
Viele Grüße
Martin
AW: VBA Programmierung einer Leistungsberechnung
06.04.2018 08:47:12
miepton
Warum ist denn hier die Wenn abfrage besser?
Mein versuch die Variable so zu deklarieren wie ich mir das vorstelle, sieht so aus:

Dim tAUL As Variant
Dim xAUL As Variant
Dim hAUL As Variant
tAUL = Workbooks("Master Tabelle").Worksheets("TRY2015 Sommer").Range("F2").Value
xAUL = Workbooks("Master Tabelle").Worksheets("TRY2015 Sommer").Range("L2").Value
hAUL = Workbooks("Master Tabelle").Worksheets("TRY2015 Sommer").Range("T2").Value

Nachdem ich ein Freund davon bin, erst ein sicheres "Grundprogramm" zu haben und anschließend es "aufzublähen" sollte dies zunächst nur die Daten der ersten Zeile auswerten. Bekomme so aber die Fehlermeldung 'Laufzeitfehler 9 ' Index außerhalb des gültigen Berreichs. Dies liegt aber an hAUl, sobald ich dies ausklammere, und es nur mit den anderen Variablen laufen lasse, passiert gar nichts, weder Fehlermeldung noch irgenwas. Wo liegt denn mein Fehler?
Gruß,
miepton
Anzeige
AW: VBA Programmierung einer Leistungsberechnung
06.04.2018 09:07:05
Martin
Hallo miepton,
auch ich arbeite lieber mit der Select Case-Anweisung, aber in deinem Fall kann man damit nicht arbeiten. Du kannst mit Select Case nur einen Ausdruck verarbeiten, aber du hast mit xAUL, tAUL und hAUL gleich drei Ausdrücke.
Viele Grüße
Martin
AW: VBA Programmierung einer Leistungsberechnung
06.04.2018 09:13:08
miepton
@ Martin, alles klar, danke!
AW: VBA Programmierung einer Leistungsberechnung
06.04.2018 09:14:43
Martin
Hallo Miepton,
da du schreibst, dass der Quellcode nicht aufgebläht werden soll, kann ich dir gleich noch zwei Tipps mit auf den Weg geben: Beim Deklarieren von Variablen werden alle Variablen automatisch als Variant erzeugt, wenn du keinen Variablentyp angibst (...obwohl Double wahrscheinlich in deinem Fall besser wäre).
Bei der Wertzuweisung deiner Variablen kannst du etwas Quellcode sparen:
Dim tAUL, xAUL, hAUL
With Workbooks("Master Tabelle").Worksheets("TRY2015 Sommer")
tAUL = .Range("F2").Value
xAUL = .Range("L2").Value
hAUL = .Range("T2").Value
End With
Viele Grüße
Martin
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige