简体   繁体   English

为什么我的任何 IF/ELSEIF 语句都不会执行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM