이 질문은 이전에 질문되었습니다. 나는이 주제에 대한 연구에서 내가 이해 한 것을 토대로 (아래) 코드를 수정했다. 그러나 아래 코드는 굵게 표시되어 있습니다.쿼리에 매개 변수 전달 Access VBA
사용자가 RstName
쿼리에 대한 시작 및 종료 날짜 조건을 입력 할 수있는 양식 (PBCIncSum
)이 있습니다. 이 함수는 쿼리 RstName
에있는 데이터의 95 백분위 수 값을 계산합니다. 코드를 실행할 때 런타임 오류 '3061 : 매개 변수가 너무 적습니다. 예상 2. 나는 뭘 잘못하고 있니? 어떤 해결책도없이이 코드를 3 일 동안 보냈다.
Public Function PercentileRst(RstName As String, fldName As String, PercentileValue As Double) As Double
'This function will calculate the percentile of a recordset.
'The field must be a number value and the percentile has to
'be between 0 and 1.
If PercentileValue < 0 Or PercentileValue > 1 Then
MsgBox "Percentile must be between 0 and 1", vbOKOnly
End If
Dim PercentileTemp As Double
Dim dbs As DAO.Database
Set dbs = CurrentDb
Dim xVal As Double
Dim iRec As Long
Dim i As Long
Dim RstOrig As DAO.Recordset
Dim qdf As DAO.QueryDef
Dim prm As DAO.Parameter
Set qdf = dbs.QueryDefs(RstName)
qdf.Parameters(0) = Forms!PBCIncSum!StDate
qdf.Parameters(1) = Forms!PBCIncSum!EndDate
For Each prm In qdf.Parameters
prm = Eval(prm.Name)
Next prm
**Set RstOrig = CurrentDb.OpenRecordset(RstName, dbOpenDynaset)**
RstOrig.Sort = fldName
Dim RstSorted As DAO.Recordset
Set RstSorted = RstOrig.OpenRecordset()
RstSorted.MoveLast
RstSorted.MoveFirst
xVal = ((RstSorted.RecordCount - 1) * PercentileValue) + 1
'x now contains the record number we are looking for.
'Note x may not be whole number
iRec = Int(xVal)
xVal = xVal - iRec
'i now contains first record to look at and
'x contains diff to next record
RstSorted.Move iRec - 1
PercentileTemp = RstSorted(fldName)
If xVal > 0 Then
RstSorted.MoveNext
PercentileTemp = ((RstSorted(fldName) - PercentileTemp) * xVal) + PercentileTemp
End If
RstSorted.Close
RstOrig.Close
Set RstSorted = Nothing
Set RstOrig = Nothing
Set dbs = Nothing
Set qdf = Nothing
PercentileRst = PercentileTemp
최종 기능 내가 잘못 뭐하는 거지
내가 후속 질문이 있습니다. NULL이 아닌 값이나 ZERO가 아닌 값에 대한 백분위 수를 어떻게 계산합니까? –