AW: Temp-Umrechner mit Formeln
25.04.2008 20:21:00
ingUR
Hall, @Walter,
folgende Idee liegt der Programmierung zugrunde: Egal welcher Wert verändert wird, ändere diesen in Celsius und forme dann alle Werte auf der Basis von Celsius um.
Option Explicit
Const KELVIN = 3
Const CELSIUS = 5
Const FAHRENHEIT = 7
Const RANKINE = 9
Const REAUMUR = 11
Private Sub Worksheet_Change(ByVal Target As Range)
Static InCalc As Boolean
Dim BasisC As Single
If InCalc Then Exit Sub
If Intersect(Union(Range("E3"), Range("E5"), Range("E7"), Range("E9"), Range("E11")), _
Target) Is Nothing Then Exit Sub
Select Case Target.Row
Case KELVIN: BasisC = Target.Value - 273.15
Case CELSIUS: BasisC = Target.Value
Case FAHRENHEIT: BasisC = (Target.Value - 32) / 1.8
Case RANKINE: BasisC = (Target.Value - 32 - 458.67) / 1.8
Case REAUMUR: BasisC = 1.25 * (Target.Value - 32 - 458.67) / 1.8
End Select
InCalc = True
Range("E3") = BasisC + 237.15
Range("E5") = BasisC
Range("E7") = BasisC * 1.8 + 32
Range("E9") = BasisC * 1.8 + 32 + 459.67
Range("E11") = BasisC * 0.8
InCalc = False
End Sub
Die dieser Programmcode (alles zwischen den Trennstrichen) wird in Deinem VBA-Projek in das Code-Fenster der Tabelle1(Temp.-Umrechner), die sich im "Microsoft Wxcel Objekte"-Ordner des VBA-Ptojektes befindet eingefügt.
Konstanten werden hier wegen der besseren Lesbarkeit mit Namen versehen (Const ... = x Anweisungen)
Ein umfassender Test über alle Kombinationmöglichkeiten wurde nicht von mir durchgeführt; ich hoffe das dennoch die Ergebnisse richtig sind bzw. die Rechenformeln soweit erkannt werden, dass ggf. korrigierend eingegriffen werden kann.
Über die Hilfe wirst Du Dir vielelciht die eine oder nder Info zu den Befehlen einholen können. Wenn weitere Fragen sind, bitte einfach melden.
Besonderheit ist hier, dass zum Einschreivben der anderen Zellenwerte temporär die Wirkung des Ereignis Worksheet_Change supentiert werden mußte, was über dei Steuervariabel InCalc vom Datentyp Boolean hier realisiert wurde. Fehlt diese Anweisung wird ein Encllosdurchlauf gestartet, da jeder Zelleneintrag seinerseit erneut die Umrechnung starten würde.
Gruß,
Uwe