[英]Why won't any of my IF/ELSEIF statements execute?
Below I my code written in VBA for excel.下面我是用 VBA 编写的用于 excel 的代码。 My main concern is why none of this will execute.我主要担心的是为什么这些都不会执行。 Whenever I change a cell value it doesn't go through any of the if else statements.每当我更改单元格值时,它都不会通过任何 if else 语句。 My understanding is that this subroutine should execute whenever a cell value within the worksheet is changed.我的理解是,只要工作表中的单元格值发生更改,就应该执行此子例程。 I then use if else statements to determine which cells are being change, then perform the correct calculations.然后我使用 if else 语句来确定正在更改哪些单元格,然后执行正确的计算。 Any help would be greatly appreciated.任何帮助将不胜感激。
Thanks!谢谢!
Private Sub Worksheet_Change(ByVal Target As Range)
'////////////////////COLUMN C & E CALCULATION STEPS///////////////////////////
If (Target.Column = 3) Then
If (Target.Row = 11) Then
Range("D11").Value = Range("C11").Value / Range("C5").Value
ElseIf (13 <= Target.Row <= 19) Then
Range("D13").Value = Range("C13").Value / Range("C5").Value
Range("D14").Value = Range("C14").Value / Range("C5").Value
Range("D15").Value = Range("C15").Value / Range("C5").Value
Range("D16").Value = Range("C16").Value / Range("C5").Value
Range("D17").Value = Range("C17").Value / Range("C5").Value
Range("D18").Value = Range("C18").Value / Range("C5").Value
Range("D19").Value = Range("C19").Value / Range("C5").Value
ElseIf (21 <= Target.Row <= 27) Then
Range("D21").Value = Range("C21").Value / Range("C5").Value
Range("D22").Value = Range("C22").Value / Range("C5").Value
Range("D23").Value = Range("C23").Value / Range("C5").Value
Range("D24").Value = Range("C24").Value / Range("C5").Value
Range("D25").Value = Range("C25").Value / Range("C5").Value
Range("D26").Value = Range("C26").Value / Range("C5").Value
Range("D27").Value = Range("C27").Value / Range("C5").Value
ElseIf (29 <= Target.Row <= 30) Then
Range("D29").Value = Range("C29").Value / Range("C5").Value
Range("D30").Value = Range("C30").Value / Range("C5").Value
ElseIf (32 <= Target.Row <= 33) Then
Range("D32").Value = Range("C32").Value / Range("C5").Value
Range("D33").Value = Range("C33").Value / Range("C5").Value
ElseIf (Target.Row = 35) Then
Range("D35").Value = Range("C35").Value / Range("C5").Value
ElseIf (37 <= Target.Row <= 39) Then
Range("D37").Value = Range("C37").Value / Range("C5").Value
Range("D38").Value = Range("C38").Value / Range("C5").Value
Range("D39").Value = Range("C39").Value / Range("C5").Value
ElseIf (Target.Row = 41) Then
Range("D41").Value = Range("C41").Value / Range("C5").Value
ElseIf (43 <= Target.Row <= 44) Then
Range("D43").Value = Range("C43").Value / Range("C5").Value
Range("D44").Value = Range("C44").Value / Range("C5").Value
ElseIf (46 <= Target.Row <= 47) Then
Range("D46").Value = Range("C46").Value / Range("C5").Value
Range("D47").Value = Range("C47").Value / Range("C5").Value
Else
End If
ElseIf (Target.Column = 5) Then
If (Target.Row = 11) Then
Range("F11").Value = Range("E11").Value / Range("C5").Value
ElseIf (13 <= Target.Row <= 19) Then
Range("F13").Value = Range("E13").Value / Range("C5").Value
Range("F14").Value = Range("E14").Value / Range("C5").Value
Range("F15").Value = Range("E15").Value / Range("C5").Value
Range("F16").Value = Range("E16").Value / Range("C5").Value
Range("F17").Value = Range("E17").Value / Range("C5").Value
Range("F18").Value = Range("E18").Value / Range("C5").Value
Range("F19").Value = Range("E19").Value / Range("C5").Value
ElseIf (21 <= Target.Row <= 27) Then
Range("F21").Value = Range("E21").Value / Range("C5").Value
Range("F22").Value = Range("E22").Value / Range("C5").Value
Range("F23").Value = Range("E23").Value / Range("C5").Value
Range("F24").Value = Range("E24").Value / Range("C5").Value
Range("F25").Value = Range("E25").Value / Range("C5").Value
Range("F26").Value = Range("E26").Value / Range("C5").Value
Range("F27").Value = Range("E27").Value / Range("C5").Value
ElseIf (29 <= Target.Row <= 30) Then
Range("F29").Value = Range("E29").Value / Range("C5").Value
Range("F30").Value = Range("E30").Value / Range("C5").Value
ElseIf (32 <= Target.Row <= 33) Then
Range("F32").Value = Range("E32").Value / Range("C5").Value
Range("F33").Value = Range("E33").Value / Range("C5").Value
ElseIf (Target.Row = 35) Then
Range("F35").Value = Range("E35").Value / Range("C5").Value
ElseIf (37 <= Target.Row <= 39) Then
Range("F37").Value = Range("E37").Value / Range("C5").Value
Range("F38").Value = Range("E38").Value / Range("C5").Value
Range("F39").Value = Range("E39").Value / Range("C5").Value
ElseIf (Target.Row = 41) Then
Range("F41").Value = Range("E41").Value / Range("C5").Value
ElseIf (43 <= Target.Row <= 44) Then
Range("F43").Value = Range("E43").Value / Range("C5").Value
Range("F44").Value = Range("E44").Value / Range("C5").Value
ElseIf (46 <= Target.Row <= 47) Then
Range("F46").Value = Range("E46").Value / Range("C5").Value
Range("F47").Value = Range("E47").Value / Range("C5").Value
Else
End If
'////////////////////COLUMN D & F CALCULATION STEPS///////////////////////////
ElseIf (Target.Column = 4) Then
If (Target.Row = 11) Then
Range("C11").Value = Range("D11").Value * Range("C5").Value
ElseIf (13 <= Target.Row <= 19) Then
Range("C13").Value = Range("D13").Value * Range("C5").Value
Range("C14").Value = Range("D14").Value * Range("C5").Value
Range("C15").Value = Range("D15").Value * Range("C5").Value
Range("C16").Value = Range("D16").Value * Range("C5").Value
Range("C17").Value = Range("D17").Value * Range("C5").Value
Range("C18").Value = Range("D18").Value * Range("C5").Value
Range("C19").Value = Range("D19").Value * Range("C5").Value
ElseIf (21 <= Target.Row <= 27) Then
Range("C21").Value = Range("D21").Value * Range("C5").Value
Range("C22").Value = Range("D22").Value * Range("C5").Value
Range("C23").Value = Range("D23").Value * Range("C5").Value
Range("C24").Value = Range("D24").Value * Range("C5").Value
Range("C25").Value = Range("D25").Value * Range("C5").Value
Range("C26").Value = Range("D26").Value * Range("C5").Value
Range("C27").Value = Range("D27").Value * Range("C5").Value
ElseIf (29 <= Target.Row <= 30) Then
Range("C29").Value = Range("D29").Value * Range("C5").Value
Range("C30").Value = Range("D30").Value * Range("C5").Value
ElseIf (32 <= Target.Row <= 33) Then
Range("C32").Value = Range("D32").Value * Range("C5").Value
Range("C33").Value = Range("D33").Value * Range("C5").Value
ElseIf (Target.Row = 35) Then
Range("C35").Value = Range("D35").Value * Range("C5").Value
ElseIf (37 <= Target.Row <= 39) Then
Range("C37").Value = Range("D37").Value * Range("C5").Value
Range("C38").Value = Range("D38").Value * Range("C5").Value
Range("C39").Value = Range("D39").Value * Range("C5").Value
ElseIf (Target.Row = 41) Then
Range("C41").Value = Range("D41").Value * Range("C5").Value
ElseIf (43 <= Target.Row <= 44) Then
Range("C43").Value = Range("D43").Value * Range("C5").Value
Range("C44").Value = Range("D44").Value * Range("C5").Value
ElseIf (46 <= Target.Row <= 47) Then
Range("C46").Value = Range("D46").Value * Range("C5").Value
Range("C47").Value = Range("D47").Value * Range("C5").Value
Else
End If
ElseIf (Target.Column = 6) Then
If (Target.Row = 11) Then
Range("E11").Value = Range("F11").Value * Range("C5").Value
ElseIf (13 <= Target.Row <= 19) Then
Range("E13").Value = Range("F13").Value * Range("C5").Value
Range("E14").Value = Range("F14").Value * Range("C5").Value
Range("E15").Value = Range("E15").Value * Range("C5").Value
Range("E16").Value = Range("F16").Value * Range("C5").Value
Range("E17").Value = Range("F17").Value * Range("C5").Value
Range("E18").Value = Range("F18").Value * Range("C5").Value
Range("E19").Value = Range("F19").Value * Range("C5").Value
ElseIf (21 <= Target.Row <= 27) Then
Range("E21").Value = Range("F21").Value * Range("C5").Value
Range("E22").Value = Range("F22").Value * Range("C5").Value
Range("E23").Value = Range("F23").Value * Range("C5").Value
Range("E24").Value = Range("F24").Value * Range("C5").Value
Range("E25").Value = Range("F25").Value * Range("C5").Value
Range("E26").Value = Range("F26").Value * Range("C5").Value
Range("E27").Value = Range("F27").Value * Range("C5").Value
ElseIf (29 <= Target.Row <= 30) Then
Range("E29").Value = Range("F29").Value * Range("C5").Value
Range("E30").Value = Range("F30").Value * Range("C5").Value
ElseIf (32 <= Target.Row <= 33) Then
Range("E32").Value = Range("F32").Value * Range("C5").Value
Range("E33").Value = Range("F33").Value * Range("C5").Value
ElseIf (Target.Row = 35) Then
Range("E35").Value = Range("E35").Value * Range("C5").Value
ElseIf (37 <= Target.Row <= 39) Then
Range("E37").Value = Range("F37").Value * Range("C5").Value
Range("E38").Value = Range("F38").Value * Range("C5").Value
Range("E39").Value = Range("F39").Value * Range("C5").Value
ElseIf (Target.Row = 41) Then
Range("E41").Value = Range("F41").Value * Range("C5").Value
ElseIf (43 <= Target.Row <= 44) Then
Range("E43").Value = Range("F43").Value * Range("C5").Value
Range("E44").Value = Range("F44").Value * Range("C5").Value
ElseIf (46 <= Target.Row <= 47) Then
Range("E46").Value = Range("F46").Value * Range("C5").Value
Range("E47").Value = Range("F47").Value * Range("C5").Value
Else
End If
Else
End If
End Sub
VBA doesn't handle x <= y <= z
as you might expect. VBA 不会像您期望的那样处理x <= y <= z
。 It evaluates x <= y
first, and then compares the result (Boolean) to z
.它首先计算x <= y
,然后将结果(布尔值)与z
进行比较。
Select Case
is much better for situations like this: Select Case
更适合这样的情况:
Select Case Target.Row
Case 11
' do something
Case 13 to 19
' do something else
Case 21 to 27
' do the next thing
' and so on
End Select
Also important: disable events to avoid re-triggering the event:同样重要的是:禁用事件以避免重新触发事件:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo SafeExit:
Application.EnableEvents = False
... your code
SafeExit:
Application.EnableEvents = True
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.