0

我有以下代码,它不断给我错误“应用程序定义或对象定义错误。我实际上尝试了该行的一些变体:WS2.Cells(i, 9) = Application.WorksheetFunction.NormSInv(Sheets(" sheet2").Range(i, 7).Value) - Application.WorksheetFunction.NormSInv(Sheets("Sheet2").Range(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
4

1 回答 1

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
于 2013-02-14T22:02:18.820 回答