为了开始这种情况,我是VBA编程的新手,所以任何帮助都将不胜感激。
我有两列;一个用户可以输入美元值(“AL”),另一个用户可以输入百分比值(“AK”)。对象是使用户能够输入值(%或$)并计算其他值。例如,如果用户在“AL”中输入10%,则适用的$值将在“AK”中生成,反之亦然。
以下是我迄今为止提出的代码,但它不起作用。任何想法/建议将不胜感激!谢谢!
if (callback != null) {
callback.onDoSomething(someArg);
}
答案 0 :(得分:2)
您需要删除Exit Sub
Application.EnableEvents = True
需要在if。
第一次使用Application.EnableEvents = False
行启用它时,它会关闭事件,因为您在将它们重新打开之前退出了子目录,所以它保持关闭状态,并且从未再次调用该子目录。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
Set cell = Range("AK9:AL50")
Application.EnableEvents = False
If Not Application.Intersect(cell, Range(Target.Address)) Is Nothing Then
If Target.Column = 37 Then ' Value in first column changed
Range("AL" & Target.Row).Value = Range("AK" & Target.Row).Value / Range("V" & Target.Row).Value
ElseIf Target.Column = 38 Then ' value in second column changed
Range("AK" & Target.Row).Value = Range("AL" & Target.Row).Value * Range("V" & Target.Row).Value
End If
Application.EnableEvents = True
End If
End Sub
我的猜测是你的事件被禁用了。
将上面的正确代码放入工作表后运行此代码:
Sub foooo()
Application.EnableEvents = True
End Sub
这将重新启用事件。它只需要一次。
答案 1 :(得分:1)
您可以更好地使用Worksheet_Change
参数,例如Target
。
1.而不是:
Range("AL" & Target.Row).Value
你可以使用:
Target.Offset(, 1).Value
2.而不是:
Range("AK" & Target.Row).Value
你可以使用:
Target.Value
3.另外Range(Target.Address)
实际上是Target
<强>代码强>
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
Set cell = Range("AK9:AL50")
Application.EnableEvents = False
If Not Application.Intersect(cell, Target) Is Nothing Then
If Target.Column = 37 Then ' Value in first column changed
Target.Offset(, 1).Value = Target.Value / Range("V" & Target.Row).Value
ElseIf Target.Column = 38 Then ' value in second column changed
Target.Offset(, 2).Value = Target.Value * Range("V" & Target.Row).Value
End If
End If
Application.EnableEvents = True '<-- RESTORE SETTING OUTSIDE THE IF
End Sub