CustomFunction イベント
対 象
fpSpreadコントロール
機 能
Formulaプロパティにユーザー定義関数が設定されたときと、関数の処理が必要になったときに発生します。
書 式
Sub fpSpread_CustomFunction(ByVal FunctionName As String, ByVal ParameterCnt As Integer, ByVal Col As Long, ByVal Row As Long, Status As Integer)
引 数
FunctionName | 設定されたユーザー定義関数名 |
ParameterCnt | ユーザー定義関数の引数の数 |
Col | 数式が設定されているセルの列番号 |
Row | 数式が設定されているセルの行番号 |
Status | ユーザー定義関数の実行結果 |
解 説
関数の引数の情報は、CustomFunctionイベントの中でCFGetParamInfoメソッドを呼び出すことによって取得できます。
Status引数には、ユーザー定義関数の実行結果に対応する次のいずれかの値を設定します。fpSpreadコントロールは、Status引数に設定した値に基づいて、数式の計算を続行するか中止するかを判断します。次の定数は、SSOCX.BASファイルで定義されています。
値 | 定数 | 関数の実行結果 |
---|---|---|
0 | SS_VALUE_STATUS_OK | 正常 |
1 | SS_VALUE_STATUS_ERROR | エラー |
2 | SS_VALUE_STATUS_EMPTY | 引数の値が無効 |
サンプル 次のサンプルコードは、セルA2の数式にユーザー定義関数cube()を設定します。
Private Sub Command1_Click()
ユーザー定義関数を登録します。
fpSpread1.AddCustomFunction "cube", 1
Formulaプロパティに関数を設定します。
fpSpread1.Col = 1
fpSpread1.Row = 2
fpSpread1.Formula = "cube(A1)"
End Sub
Private Sub fpSpread1_CustomFunction( _
ByVal FunctionName As String, ByVal ParameterCnt As Integer, _
ByVal Col As Long, ByVal Row As Long, Status As Integer)
Dim vResult As Variant
Dim b As Boolean
Dim lArg1 As Long, dfArg1 As Double
Dim nTypeArg1 As Integer, nStatusArg1 As Integer
計算結果が無効な場合には、SS_VALUE_STATUS_EMPTYを返します。
Status = SS_VALUE_STATUS_EMPTY
ユーザー定義関数 cobe() を処理します。
If FunctionName = "cube" Then
b = fpSpread1.CFGetParamInfo( 1, nTypeArg1, nStatusArg1)
If nStatusArg1 = SS_VALUE_STATUS_OK Then
If nTypeArg1 = SS_VALUE_TYPE_LONG Then
lArg1 = fpSpread1.CFGetLongParam(1)
vResult = lArg1 * lArg1 * lArg1
Status = SS_VALUE_STATUS_OK
ElseIf nTypeArg1 = SS_VALUE_TYPE_DOUBLE Then
dfArg1 = fpSpread1.CFGetDoubleParam(1)
vResult = dfArg1 * dfArg1 * dfArg1
Status = SS_VALUE_STATUS_OK
End If
End If
End If
If Status = SS_VALUE_STATUS_OK Then
fpSpread1.CFSetResult vResult
End If
End Sub
コメント