NormSInv VBA优秀

时间:2013-02-14 21:49:29

标签: excel-vba vba excel

我有以下代码,它一直给我错误“应用程序定义或对象定义错误。我实际上尝试了一些行的变体: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

1 个答案:

答案 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