我已經獲得了一些代碼來添加到計算樣條分布的現有 VBA 模塊中。我可以通過手動選擇變數來讓這個代碼在 Excel 中運行,但是即使我有現有的代碼來選擇這些值,我也無法讓這個特定的代碼來獲取這些值。
該公式稱為 Spline,用于計算 Spline 分布。它的要求編碼如下:
Function Spline(form As String, Splines As Integer, params As Variant, knots As Variant, coef As Variant, tstar As Range)
在此,有 3 或 4 個引數應由 Params 拾取,4 個節應以節為單位拾取。Tstar 是一長串時間點。
我已經按照函式要求它們的順序格式化了要由公式提取的值,即形式,然后是樣條線,然后是引數,然后是結等。
我為選擇此值而撰寫的代碼以及選擇的更廣泛背景關系如下:
Sub CurveParamCalcs1()
Dim CompOS As Integer
Dim Wsh As Worksheet: Set Wsh = Worksheets("CGP")
Dim CntH As Integer, CntV As Integer
Dim Arr_1 As Variant 'there are 8 arrays, cutting the rest for this example
Dim StrtCol As Long
ReDim Arr_1(0 To 937, 0 To 15)
CompOS = Sheets("Curve parameters").Range("AC16").Value
StrtCol = Col_Number("AV")
For CntH = 0 To 15
For CntV = 0 To 783
Select Case CompOS
'removing the other cases as they run correctly when selected
Case 7
Arr_1(CntV, CntH) = Spline(Wsh.Range(Col_Letter(StrtCol CntH) & "87"), Wsh.Range(Col_Letter(StrtCol CntH) & "88"), Wsh.Range(Col_Letter(StrtCol CntH) & "89:92"), Wsh.Range(Col_Letter(StrtCol CntH) & "93:93"), 1, Wsh.Range("AU151:AU934"))
End Select
Next CntV
Next CntH
我收到錯誤:運行時錯誤 1004:物件“_Worksheet”的方法“范圍”失敗,經過大量谷歌搜索后,似乎是指當前作業表錯誤。但是,這一切都發生在 Worksheet CGP 上,我看不出問題出在哪里。我試過只使用通常的 Range 而不是 Wsh.Range 并且我得到了同樣的錯誤。我沒有使用 VBA 的經驗(我的背景是 R),因此我自己在故障排除方面沒有取得太大的成功。
僅舉一個例子,這是一個運行正確并獲得正確值的案例:
Case 5
Arr_1(CntV, CntH) = SClognormal(Wsh.Range("AU" & CntV 151), Wsh.Range(Col_Letter(StrtCol CntH) & "81"), Wsh.Range(Col_Letter(StrtCol CntH) & "82"))
這會輸入到這個生存對數正態計算中
Function SClognormal(day, param1, param2)
SClognormal = 1
If day > 0 Then
SClognormal = 1 - WorksheetFunction.LogNormDist(day, param1, 1 / Exp(-1 * param2))
End If
End Function
謝謝你看。
uj5u.com熱心網友回復:
您有無效的范圍參考。例如,如果列字母是R:
Col_Letter(StrtCol CntH) & "89:92": 計??算結果為R89:92,但應該是R89:R92。Col_Letter(StrtCol CntH) & "93:93"): 計??算結果為R93:93,但應該是R93。
Range使用一些變數更容易除錯:
Dim arg1 As Range
Set arg1 = Wsh.Range(Col_Letter(StrtCol CntH) & "87") ' fine
Dim arg3 As Range
Set arg3 = Wsh.Range(Col_Letter(StrtCol CntH) & "89:92") ' blows up
另請注意,使用列字母有點笨拙。如果您正在使用列索引,通常更喜歡Cells。Range
Wsh.Cells(87, StrtCol CntH)
...
Wsh.Cells(89, StrtCol CntH).Resize(4) ' rows 89:92
...
Wsh.Cells(93, StrtCol CntH)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/413793.html
標籤:
