2017-10-05 51 views
0

Table「無法獲取WorksheetFunction類的斜率財產」錯誤

Sub GraphData() 
Dim GraphStart As Integer 
Dim GraphEnd As Integer 
Dim TimeRange As Range 
Dim AssayRange As Range 
Dim LastRow As Integer 
Dim AssayTime As Date 
Dim k As Integer 
Dim m As Integer 

LastRow = ActiveWorkbook.Worksheets("RawData").Range("B15").Value + 17 

For k = 18 To LastRow 
    If ActiveWorkbook.Worksheets("RawData").Range("H" & k).Value < 2 Then 
     GraphStart = k + 1 
    End If 
Next 

For m = 18 To LastRow 
    If ActiveWorkbook.Worksheets("RawData").Range("H" & m).Value < 32 Then 
     GraphEnd = m 
    End If 
Next 

Set TimeRange = Application.Range(Cells(GraphStart, "F"), Cells(GraphEnd, "F")) 
Set AssayRange = Application.Range(Cells(GraphStart, "H"), Cells(GraphEnd, "H")) 


ActiveWorkbook.Worksheets("Assay Result").Range("D31").Value = Application.WorksheetFunction.Slope(AssayRange, TimeRange) 

ActiveWorkbook.Worksheets("Assay Result").Range("D32").Value = (Application.WorksheetFunction.Correl(AssayRange, TimeRange))^2 

ActiveWorkbook.Worksheets("Assay Result").Range("D33").Value = Round(Application.WorksheetFunction.Min(AssayRange), 2) & " to " & Round(Application.WorksheetFunction.Max(AssayRange), 2) 

End Sub 

我相信有人之前有這個問題。錯誤是不一致的,發生在某個時間。

  1. 用於計算斜率的數據範圍正在改變。因此,我爲x和y系列設置了兩個數據範圍變量:TimeRange和AssayRange
  2. TimeRange數據從列F18到F列末尾,測定範圍從列H18到結束H.
  3. 只有H列> 2和< 32中的數據纔會被選入範圍並用於計算。
  4. 列F和H中的數據是十進制數據類型。 關於錯誤來自哪裏的任何想法?
+0

您的代碼很難理解。我想我需要用表單上的數據解釋意圖。 –

+0

該數據來自反應的測量。每5秒記錄一次測量值。記錄的值被轉換成列H中的產物濃度。經過時間在列F上計算。數據來自列18.從上一步,我計算了單元格B15上用於計算LastRow的數據的行數。 – yoyo

+0

我不知道在哪裏添加圖片。有人可以幫忙嗎? – yoyo

回答

0

試試這個。

Sub GraphData() 
Dim GraphStart As Integer 
Dim GraphEnd As Integer 
Dim TimeRange As Range 
Dim AssayRange As Range 
Dim LastRow As Integer 
Dim AssayTime As Date 
Dim k As Integer 
Dim m As Integer 
Dim Ws As Worksheet, toWs As Worksheet 
Dim Wf As WorksheetFunction 

Set Wf = WorksheetFunction 
Set Ws = Worksheets("RawData") 
Set toWs = Worksheets("Assay Result") 

    With Ws 
     LastRow = .Range("B15").Value + 17 

     For k = 18 To LastRow 
      If .Range("H" & k).Value < 2 Then 
       GraphStart = k + 1 
      End If 
     Next 
     For m = 18 To LastRow 
      If .Range("H" & m).Value < 32 Then 
       GraphEnd = m 
      End If 
     Next 

     Set TimeRange = .Range("F" & GraphStart, "F" & GraphEnd) 
     Set AssayRange = TimeRange.Offset(, 2) 
    End With 
    With toWs 
     .Range("d31") = Wf.Slope(AssayRange, TimeRange) 
     .Range("d32") = Wf.Correl(AssayRange, TimeRange)^2 
     .Range("d33") = Round(Wf.Min(AssayRange), 2) & " to " & Round(Wf.Max(AssayRange), 2) 
    End With 

End Sub 
+0

謝謝。它現在有效。我會試着弄清楚我的舊編碼有什麼問題。 – yoyo

+0

單元格(GraphStart,「F」)不正確。它應該是ws.Cells(GraphStart,「F」) –

+0

我只是看到這一點。非常感謝Dy.Lee。 – yoyo

相關問題