2015-08-28 17 views
0

我希望VBA與單元格(y,x-3)比較單元格(y,x)。 x應該從第35列到第2列。但是,如果我將x定義爲'For x = 35到2 step -3,則vba將具有'應用程序定義或對象定義'錯誤。如果我將x定義爲'For x = 35 to 5,step -3',則代碼可以正常工作,但它會跳過第2列的計算。如何解決此問題?這是代碼。列中的循環定義導致應用程序定義或對象定義錯誤

Sub testing1() 


Dim x As Integer 
Dim y As Integer 

For x = 35 To 5 Step -3 
For y = 11 To 76 Step 1 

If IsNumeric(Cells(y, x).Value) Then 

If VBA.Abs(Cells(y, x).Value) < VBA.Abs(0.9 * Cells(y, x - 3).Value) Or _ 
    VBA.Abs(Cells(y, x).Value) > VBA.Abs(1.1 * Cells(y, x - 3)) Then 

    Cells(y, x).Interior.ColorIndex = 22 

ElseIf VBA.Abs(Cells(y, x).Value) < VBA.Abs(0.9 * 
    Workbooks("2014variance.xlsx").Worksheets("Sheet1").Cells(y, x)) Or _ 
     VBA.Abs(Cells(y, x).Value) > VBA.Abs(1.1 * 
    Workbooks("2014variance.xlsx").Worksheets("Sheet1").Cells(y, x)) Then 

     Cells(y, x).Interior.ColorIndex = 42 



End If 
End If 

Next y 
Next x 

End Sub 

回答

0

當x = 2時,x-3 = -1。沒有列-1。這就是爲什麼你的錯誤,你做的 - 在Excel Application不能當您使用Cells(y,x-3)與返回任何小區x = 2

如果你要正確對待涉及Cells(y,x-3))的情況下爲假的一部分x=2而不是拋出一個錯誤,那麼你需要另一個條件來以不同的方式處理x=2的情況。喜歡的東西:

For x = 35 To 2 Step -3 
    For y = 11 To 76 Step 1 
     If IsNumeric(Cells(y, x).Value) Then 
      If x > 2 Then 
       If Abs(Cells(y, x).Value) < Abs(0.9 * Cells(y, x - 3).Value) Or _ 
        Abs(Cells(y, x).Value) > Abs(1.1 * Cells(y, x - 3)) Then 
        Cells(y, x).Interior.ColorIndex = 22 

       ElseIf Abs(Cells(y, x).Value) < Abs(0.9 * Workbooks("2014variance.xlsx").Worksheets("Sheet1").Cells(y, x)) Or _ 
         Abs(Cells(y, x).Value) > Abs(1.1 * Workbooks("2014variance.xlsx").Worksheets("Sheet1").Cells(y, x)) Then 
        Cells(y, x).Interior.ColorIndex = 42 
       End If 
      Else 'x = 2 case 
       If Abs(Cells(y, x).Value) < Abs(0.9 * Workbooks("2014variance.xlsx").Worksheets("Sheet1").Cells(y, x)) Or _ 
         Abs(Cells(y, x).Value) > Abs(1.1 * Workbooks("2014variance.xlsx").Worksheets("Sheet1").Cells(y, x)) Then 
        Cells(y, x).Interior.ColorIndex = 42 
       End If 
      End If 
     End If 
    Next y 
Next x 

有可能是一些方法來更優雅地表達這一點,雖然VBA缺乏短路評價就不可能制訂條件句裏的一些子表達式的是不確定的,所以這可能是最好的。

我將VBA.Abs()替換爲Abs(),因爲我不知道有什麼理由需要告訴VBA如何找到Abs

+0

我同意你的意見。我希望Excel將2015.xlsx中的第2列與2014.xlsx中的第2列進行比較。我的目標是將2015年xlsx中的x與x-3進行比較,然後將2015年與2014年的x進行比較。其他列可以找到,但僅列2是一個麻煩。你知道如何修復代碼嗎? – cljsibyl123

相關問題