Visual Basic | IF,否则不在DO WHILE循环内工作

所以,我对Visual Basic有点新,并试图在excel上创build一个macros。 理想情况下,macros应该经过一列,并将其中的值分别为“WB”和其他值,例如“EC”,并基于该值进行计算。

问题是存储WB值的variables全部为零,存储EC值的variables实际上具有全部的数据计算。

Sub Button2_Click() Dim i As Integer, TotalEffortEC As Double, TotalNCEC As Double, TotalSizeEC As Double Dim TotalEffortWB As Double, TotalNCWB As Double, TotalSizeWB As Double TotalEffortEC = 0 TotalNCEC = 0 TotalSizeEC = 0 TotalEffortWB = 0 TotalNCWB = 0 TotalSizeWB = 0 i = 3 Do While Worksheets("Valid Data").Cells(i, 6).Value <> "" If Cells(i, 7).Value = "WB" Then TotalEffortWB = Worksheets("Valid Data").Cells(i, 23).Value + TotalEffortWB TotalNCWB = Worksheets("Valid Data").Cells(i, 14).Value + TotalNCWB TotalSizeWB = Worksheets("Valid Data").Cells(i, 13).Value + TotalSizeWB Else TotalEffortEC = Worksheets("Valid Data").Cells(i, 23).Value + TotalEffortEC TotalNCEC = Worksheets("Valid Data").Cells(i, 14).Value + TotalNCEC TotalSizeEC = Worksheets("Valid Data").Cells(i, 13).Value + TotalSizeEC End If i = i + 1 Loop Worksheets("Summary").Range("A2").Value = (TotalEffortEC + Range("B10") + Range("C10")) / TotalNCEC Worksheets("Summary").Range("B2").Value = (TotalEffortEC + Range("B10") + Range("C10")) / TotalSizeEC Worksheets("Summary").Range("A3").Value = (TotalEffortWB + Range("B11") + Range("C11")) / TotalNCWB Worksheets("Summary").Range("B3").Value = (TotalEffortWB + Range("B11") + Range("C11")) / TotalSizeWB End Sub 

代码的WB部分似乎没有运行,似乎只有EC部分正在运行,而不考虑条件的有效性。 任何build议/帮助将不胜感激。

谢谢。

正如@ Alex4336所指出的那样,您肯定会引用属于要访问的RangeCells集合的错误Worksheet对象( Worksheet对象 ),混合限定对象和成员访问语法( .Range.Cells )以及使用“全局“ RangeCells集合(绑定到活动的Worksheet 对象 )。

这会使您的代码不一致,并造成潜在问题。

您可以通过以下方式简单地引入With语句( 请参阅MSDN )来避免重复的限定expression式,获得可读性,一致性和性能

 Sub Button2_Click() Dim i As Integer, TotalEffortEC As Double, TotalNCEC As Double, TotalSizeEC As Double Dim TotalEffortWB As Double, TotalNCWB As Double, TotalSizeWB As Double TotalEffortEC = 0 TotalNCEC = 0 TotalSizeEC = 0 TotalEffortWB = 0 TotalNCWB = 0 TotalSizeWB = 0 i = 3 With Worksheets("Valid Data") Do While .Cells(i, 6).Value <> "" If .Cells(i, 7).Value = "WB" Then TotalEffortWB = .Cells(i, 23).Value + TotalEffortWB TotalNCWB = .Cells(i, 14).Value + TotalNCWB TotalSizeWB = .Cells(i, 13).Value + TotalSizeWB Else TotalEffortEC = .Cells(i, 23).Value + TotalEffortEC TotalNCEC = .Cells(i, 14).Value + TotalNCEC TotalSizeEC = .Cells(i, 13).Value + TotalSizeEC End If i = i + 1 Loop End With With Worksheets("Summary") .Range("A2").Value = (TotalEffortEC + .Range("B10") + .Range("C10")) / TotalNCEC .Range("B2").Value = (TotalEffortEC + .Range("B10") + .Range("C10")) / TotalSizeEC .Range("A3").Value = (TotalEffortWB + .Range("B11") + .Range("C11")) / TotalNCWB .Range("B3").Value = (TotalEffortWB + .Range("B11") + .Range("C11")) / TotalSizeWB End With End Sub