我有以下代码,它一直给我错误“应用程序定义或对象定义错误。我实际上尝试了一些行的变体:WS2.Cells(i,9)= Application.WorksheetFunction.NormSInv(表格(“sheet2”)。范围(i,7).Value) - Application.WorksheetFunction.NormSInv(表格(“Sheet2”)。范围(i,8).Value)但每个都给了我一个不同的错误。有没有人以前使用过这个功能吗?
代码示例:
Sub dPrime()
Dim i As Long
Dim WS2 As Worksheet
Set WS2 = Worksheets("Sheet2")
For i = 2 To Sheets("sheet2").Range("G" & Rows.Count).End(xlUp).Row
WS2.Cells(i, 9) = Application.WorksheetFunction.NormSInv(Sheets("sheet2").Range(i, 7).Value) - Application.WorksheetFunction.NormSInv(Sheets("Sheet2").Range(i, 8).Value)
Next i
End Sub
数据示例:
0.583333333 0.5
0.083333333 0.75
0.25 0.75
0.416666667 0.75
0.083333333 0.833333333
0.416666667 0.75
0.25 0.5
0.416666667 0.833333333
0.583333333 0.833333333
0.25 0.9
答案 0 :(得分:2)
当您从第7列和第8列中检索值时,您正在使用Range
您应该使用Cells
。
更改代码:
Sheets("sheet2").Range(i, 7).Value
到
Sheets("sheet2").Cells(i, 7).Value
Range(i, 8).Value
也是如此。调试这样一个不明显的问题的好方法是尽可能创建单独的变量,以查看完全问题所在并将其隔离。像这样:
Sub dPrime()
Dim i As Long
Dim WS2 As Worksheet
Set WS2 = Worksheets("Sheet2")
Dim firstCellVal As String
Dim secondCellVal As String
Dim firstNormsResult As Double
Dim secondNormsResult As Double
firstCellVal = Sheets("sheet2").Cells(i, 7).Value 'add breakpoint here and start stepping through
secondCellVal = Sheets("sheet2").Cells(i, 8).Value
firstNormsResult = Application.WorksheetFunction.NormSInv(firstCellVal)
secondNormsResult = Application.WorksheetFunction.NormSInv(secondCellVal)
For i = 2 To Sheets("sheet2").Range("G" & Rows.Count).End(xlUp).Row
WS2.Cells(i, 9) = firstNormsResult - secondNormsResult
Next i
End Sub