2017-06-15 96 views
0

我一直在玩这个代码的各种排列试图让一些工作。 if语句的前半部分正在运行,但如果范围的总和为0,则代码不执行所需的计算。我收到“类型不匹配”错误。VBA - 类型不匹配 - 代码?

有什么想法?

n = ActiveWorkbook.Sheets.Count 
For i = 2 To n 
    If Application.Sum(Sheets(i).Range("O13:O33")) > 0 Then 
    Range(Cells(13, i), Cells(19, i)).Value = Sheets(i).Range("P13:P19").Value 
    Else 
    Range(Cells(13, i), Cells(19, i)).Value = Sheets(i).Range("I13:I19") - (4 * Sheets(i).Range("K13:K19")) 
    End If 
Next i 

此致敬礼。

+0

你不能在多单元格范围内进行数学运算。第一个基本上是移动一个数组,但是你需要在这个范围内循环,并且一次对每个单元格进行数学运算。 –

+0

谢谢@ScottCraner ...所以在else语句之后,我应该尝试某种循环来执行计算,这就是您所说的内容。 – AdMac

+0

是的,请参阅下面的答案 –

回答

1

你不能在多单元格范围内进行数学运算。

第一个基本上是移动一个数组,但是你需要在这个范围内循环,并且一次对每个单元格进行数学运算。

Dim Rng As Range 
n = ActiveWorkbook.Sheets.Count 
With ActiveSheet 
    For i = 2 To n 
     If Application.Sum(Sheets(i).Range("O13:O33")) > 0 Then 
      .Range(.Cells(13, i), .Cells(19, i)).Value = Sheets(i).Range("P13:P19").Value 
     Else 
      For Each Rng In .Range(.Cells(13, i), .Cells(19, i)) 
       Rng.Value = Sheets(i).Cells(Rng.Row, "I") - (4 * Sheets(i).Cells(Rng.Row, "K")) 
      Next Rng 
     End If 
    Next i 
End With