2016-07-15 78 views
1

所以我的代碼工作正常,直到我試圖添加一個嵌套for循環,然後我開始得到運行時錯誤13。是由***包圍運行時錯誤13:類型代碼不匹配,當我添加一些代碼行

這是我的代碼之前,這是工作:

Dim LR As Long 
Dim ColLtr As String 
Dim Ave As Double 
Dim STDev As Double 

For i = 1 To DateTime_Column 

ColLtr = Replace(Cells(1, i).Address(True, False), "$1", "") 
    Ave = Application.Average(Range(ColLtr & "1:" & ColLtr & LR)) ' Based on  all values 
    STDev = Application.STDev(Range(ColLtr & "1:" & ColLtr & LR)) ' Based on  all values 

Next i 

這裏是之後獲得誤差代碼:

Dim LR As Long 
Dim ColLtr As String 
Dim Ave As Double 
Dim STDev As Double 
Dim q As Integer 
ReDim Range(LR1) As Variant 

For i = 1 To DateTime_Column 

Sheets(1).Select 

ColLtr = Replace(Cells(1, i).Address(True, False), "$1", "") 
***Ave = Application.Average(Range(ColLtr & "2:" & ColLtr & LR))*** ' Based on all values 

For q = 1 To LR1 
Range(q) = WorksheetFunction.Abs(Cells(q + 1, ColLtr) - Cells(q, ColLtr)) 
Next q 

下一頁我

我原來的想法是,LR是一個很長的,所以我試圖改變它的字符串數據類型,但也沒有工作,也許它有一些與for循環?

+0

我沒有看到用代碼中任何位置的實際字符串定義的'LR'。 –

+0

您需要添加ave = Application.Average(Sheets(1).Range(ColLtr&「2:」&ColLtr&LR)),沒有工作表(1)給出錯誤! – Lowpar

回答

1

當從VBA中的單元格運行公式或分配時,Run Time error 13的最常見原因在單元格中具有錯誤值。同樣當你使用Average時,如果給定範圍內的所有單元都是空白的,你將會得到相同的錯誤。

測試是這樣的:

If Not IsError(Application.Average(Range(ColLtr & "2:" & ColLtr & LR))) Then 
    ave = Application.Average(Range(ColLtr & "2:" & ColLtr & LR)) 
Else 
    MsgBox "Error value in cells" 
End If 
+0

[AGGREGATE](https://support.office.com/en-us/article/AGGREGATE-function-43B9278E-6AA7-4F17-92B6-E19993FA26DF)(1,6,* *)將忽略錯誤但仍然需要至少有一個值爲單元格。 – Jeeped

+1

總是有一些警告。這就是讓活着的樂趣。因此我並不總是使用最常見的。 – cyboashu

+0

這似乎工作,但現在我在嵌套for循環內的代碼中得到相同的錯誤。 – Joey

2

它從來沒有進行重構的像一個Range object到比它的用意是其他事物的名稱是個好主意。您的情況尤其如此,因爲您決定允許ActiveSheet property成爲默認Range.Parent property,同時重新定義範圍

Dim LR As Long, LR1 As Long, q As Long 
Dim Ave As Double, STDev As Double 
ReDim vals(LR1) As Variant 


With Sheets(1) 
    For i = 1 To DateTime_Column 
     LR = .Cells(.Rows.Count, i).End(xlUp).Row 
     Ave = Application.Average(.Range(.Cells(2, i), .Cells(LR, i))) ' Based on all values 

     For q = 1 To LR1 
      vals(q) = WorksheetFunction.Abs(.Cells(q + 1, i) - .Cells(q, i)) 
     Next q 
    Next i 
End With 

我取出全部ColLtr業務和明確規定所有Range.Cells對象的Range.Parent property

您仍然需要對vals陣列執行某些操作,並確保LR1已正確定義。

相關問題