【发布时间】:2020-01-02 19:17:55
【问题描述】:
下面是我用 VBA 为 excel 编写的代码。我主要担心的是为什么这些都不会执行。每当我更改单元格值时,它都不会通过任何 if else 语句。我的理解是,只要工作表中的单元格值发生更改,就应该执行此子例程。然后我使用 if else 语句来确定正在更改哪些单元格,然后执行正确的计算。任何帮助将不胜感激。
谢谢!
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
【问题讨论】:
-
如果您更改 C 列中的值,这根本不会触发?在
If (Target.Row = 11)上放一个Break,看看它是否在你改变时能做到这一点,比如C2。此外,请确保此代码位于您希望它运行的工作表的 Worksheet 模块中。 -
该事件适用于工作表中的任何单元格,但您的代码仅适用于在 C:C 列上修改的单元格。 (第 3 栏)。您的大多数条件都写错了,而且它们每次都是正确的,除了第 13 行的情况......
-
请edit 尝试使用
Select Case提出问题,而不是发表评论,谢谢! -
当有人提供了解决您问题的答案时,您应该接受它,(点击勾号),而不是将答案编辑到 Q 中
标签: excel vba subroutine