Function FtoC(ByVal Temp As Variant) As Variant
FtoC = Round((Temp - 32) * 5 / 9, 1)
End Function
Function CtoF(ByVal Temp As Variant) As Variant
CtoF = Round(Temp * 9 / 5 + 32, 1)
End Function
Private Sub Temp_F_Change()
If Temp_F <> "" Then Temp_C = FtoC(Temp_F)
End Sub
Private Sub Temp_C_Change()
If Temp_C <> "" Then Temp_F = CtoF(Temp_C)
End Sub
我有一个小项目的上述函数/ subs来学习/提高我的VBA技能。逻辑很好,花花公子。但是,理想情况下,我只希望textbox_change事件仅在更改是由键盘输入(或非子输出)引起时才会运行。如果我输入78到Temp_F然后它转换为25.6输出到Temp_C,那么一个工作示例将从每个空白开始。 Temp_C现在已经改变,然后它将25.6转换为78.1并将其输出到Temp_F,当然temp_f已经改变并且它将其转换为25.6,这不是将两个潜艇都带到其终点的变化。理想情况下,我希望它将78F转换为25.6C并且表单识别Temp_C字段更改是由于子输出(或不是由于键盘输入)并退出temp_c_change()sub这甚至可能使用VBA,如果是这样,它有多简单/复杂?我使用了一个由按键事件重置的计数器的想法,但我的脚本技能不够好,无法使其工作。我提前感谢你们,并且道歉我的问题不在于我之前在这个网站上寻找答案的人才。
答案 0 :(得分:0)
嗯,对于这么小的东西,你可以使用一个workheet_change事件,它首先检查目标单元格,看看两个温度单元中的任何一个是否发生了变化(假设它们没有在工作表周围移动 - 如果有的话,考虑一个命名范围) 。如果其中任何一个单元格发生了变化,则将相应的转换公式创建为字符串并将其放在另一个单元格中。
道歉,我刚刚注意到您正在处理文本框事件而不是工作表事件。
数据转换后会发生什么?它是进入单元格还是插入另一个函数/子?现在,您的代码只会执行计算,但不会显示或执行任何其他操作。也许你需要接下来发生的任何事情。