Visual Basic |如果,ELSE在DO WHILE循环内部不起作用

时间:2015-12-11 09:53:56

标签: excel vba excel-vba

所以,我对Visual Basic有点新,并试图在excel上创建一个宏。理想情况下,宏应该遍历一个列并将值与其他值中的值“WB”分开,例如“EC”,并根据该值进行计算。

问题是存储WB值的变量都是零,存储EC值的变量实际上具有整个数据计算。

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部分正在运行,而不管条件的有效性如何。任何建议/帮助将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:0)

正如@ Alex4336所述,您肯定会引用错误的Worksheet对象,该对象属于要访问的RangeCells个集合( parent {{ 1}} object ),混合限定对象和成员访问语法(Worksheet.Range)以及使用“global” {{ 1}}和.Cells个集合(绑定到有效Range 对象 )。

这会使您的代码不一致并成为潜在问题的根源。

您可以通过引入 Cells 声明({{3)来避免重复限定表达式获得可读性,一致性和性能这样:

Worksheet