Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím. Mám problém s následujícím programem. Resp. částí programu. Problém je v tom že po zadání první číslice do druhého pole se provede výpočet a poté již program nepřepočítává.
Dim Odpor As Boolean
Dim Proud As Boolean
Dim Napeti As Boolean
Private Sub Ohm_Change()
If Not IsNumeric(Ohm.Text) Or Ohm.Text = "," Then Ohm.Text = ""
If Ohm.Text <> "" Then Odpor = True Else Odpor = False
If Odpor = True And Napeti = True Then
Amper.Text = Volt.Text / Ohm.Text
Proud = False
End If
If Proud = True And Odpor = True Then
Volt.Text = Ohm.Text * Amper.Text
Napeti = False
End If
End Sub
Private Sub Amper_Change()
If Not IsNumeric(Amper.Text) Or Amper.Text = "," Then Ohm.Text = ""
If Amper.Text <> "" Then Proud = True Else Proud = False
If Proud = True And Napeti = True Then
Ohm.Text = Volt.Text / Amper.Text
Odpor = False
End If
If Proud = True And Odpor = True Then
Volt.Text = Ohm.Text * Amper.Text
Napeti = False
End If
End Sub
Private Sub Volt_Change()
If Not IsNumeric(Volt.Text) Or Volt.Text = "," Then Ohm.Text = ""
If Volt.Text <> "" Then Napeti = True Else Napeti = False
If Proud = True And Napeti = True Then
Ohm.Text = Volt.Text / Amper.Text
Odpor = False
End If
If Napeti = True And Odpor = True Then
Amper.Text = Volt.Text / Ohm.Text
Proud = False
End If
End Sub
Napadlo mne nacpat veškeré výpočty pod hodiny a přepočítávat s tikáním hodin, ale to mi přijde jako obcházení problému.
Offline

Ahoj. Je to zacyklený. Já bych to udělal tak, aby se Text_Change procedury vykonaly jen po změně z klávesnice, ne způsobeném přepočtem.
'*****************************************************
Option Explicit
'=====================================================
' R (Odpor, Ohm) = U (Napeti, Volt) / I (Proud, Amper)
'-----------------------------------------------------
' R = U / I *Odpor = Napeti / Proud
' I = U / R *Proud = Napeti / Odpor
' U = I * R *Napeti = Proud * Odpor
'=====================================================
Dim Proud As Single
Dim Napeti As Single
Dim Odpor As Single
Dim UpdatingControls As Boolean
Private Sub Ohm_Change()
If UpdatingControls = True Then
Exit Sub
Else
UpdatingControls = True
If Val(Amper.Text) = 0 Then
Amper.Text = VypoctiProud
Else
Volt.Text = VypoctiNapeti
End If
UpdatingControls = False
End If
End Sub
Private Sub Amper_Change()
If UpdatingControls = True Then
Exit Sub
Else
UpdatingControls = True
If Val(Ohm.Text) = 0 Then
Ohm.Text = VypoctiOdpor
Else
Volt.Text = VypoctiNapeti
End If
UpdatingControls = False
End If
End Sub
Private Sub Volt_Change()
If UpdatingControls = True Then
Exit Sub
Else
UpdatingControls = True
If Val(Ohm.Text) = 0 Then
Ohm.Text = VypoctiOdpor
Else
Amper.Text = VypoctiProud
End If
UpdatingControls = False
End If
End Sub
Public Function VypoctiProud() As String
If Val(Ohm.Text) > 0 Then
Proud = Val(Volt.Text) / Val(Ohm.Text)
VypoctiProud = Trim
(Proud))
Else
VypoctiProud = "Err"
End If
End Function
Public Function VypoctiNapeti() As String
Napeti = Val(Amper.Text) * Val(Ohm.Text)
VypoctiNapeti = Trim
(Napeti))
End Function
Public Function VypoctiOdpor() As String
If Val(Amper.Text) > 0 Then
Odpor = Val(Volt.Text) / Val(Amper.Text)
VypoctiOdpor = Trim
(Odpor))
Else
VypoctiOdpor = "Err"
End If
End Function
'*****************************************************Offline