Excel VBA需求:修改代码实现C2变动时自动更新E3值
解决方案
修改后的VBA代码如下:
Private Sub Worksheet_Change(ByVal Target As Range) ' 确保即使出错,退出时也能重新启用事件 On Error GoTo errExit Application.EnableEvents = False Dim SpotRate As Double SpotRate = Me.Range("H2").Value ' 处理C3输入,更新E3 If Target.Address = "$C$3" Then If Target.Value <> "" Then Range("E3").Value = Target.Value * SpotRate Else Range("E3").ClearContents End If ' 处理E3输入,更新C3 ElseIf Target.Address = "$E$3" Then If Target.Value <> "" Then Range("C3").Value = Target.Value / SpotRate Else Range("C3").ClearContents End If ' 处理C2或H2变动,更新E3(保持C3不变) ElseIf Target.Address = "$C$2" Or Target.Address = "$H$2" Then If Range("C3").Value <> "" Then Range("E3").Value = Range("C3").Value * SpotRate End If End If errExit: Application.EnableEvents = True End Sub
关键修改说明
- 新增对
$C$2和$H$2单元格变动的判断:由于C2的下拉选择会触发H2汇率值变化,这两个单元格的变动都需要触发E3的更新 - 当C2/H2变动时,仅在C3有值的情况下,用C3当前值乘以最新汇率计算E3,完全保留C3原有数值
- 保留原有C3和E3互相转换的核心逻辑,不影响原有功能
内容的提问来源于stack exchange,提问作者user22168531
相关产品推荐
相关产品推荐

