特定のコードを数回呼び出しているため、オプションのパラメーターを使用したいと思います。私は次のようなものを書くことができます:
Public Sub main()
strA = "A"
'Calling the function
CalculateMe (strA)
End Sub
Public Sub CalculateMe(strA As String)
Set rs = DB.OpenRecordset("tbl_A")
rs.MoveFirst
Do Until rs.EOF
If rs.Fields(0) = strA Then
dblA = rs.fields(2).Value
End If
rs.MoveNext
Loop
End Sub
複数のオプションパラメータを保持するように関数を変更するにはどうすればよいですか?
何かのようなもの:
Public Sub main()
strA = "A"
strB = "B"
'Calling the function
CalculateMe (strA, strB)
more code
End Sub
Public Sub CalculateMe(Optional strA As String, Optional strB as String)
Set rs = DB.OpenRecordset("tbl_A")
rs.MoveFirst
Do Until rs.EOF
If rs.Fields(0).Value = strA And rs.Fields(1).Value = strB Then
dblA = rs.Fields(2).Value
End If
rs.MoveNext
Loop
End Sub
Pankaj Jajuのアドバイスに従って、私はそれを次のように変更して実行することができました。
Public Sub main()
strA = "A"
strB = "B"
'Calling the function
dblA = CalculateMe (strA, strB)
End Sub
Public Function CalculateMe(Optional ByVal strA As String, Optional ByVal strB as String)
Set rs = DB.OpenRecordset("tbl_A")
rs.MoveFirst
Do Until rs.EOF
If rs.Fields(0).Value = strA And rs.Fields(1).Value = strB Then
dblA = rs.Fields(2).Value
End If
rs.MoveNext
Loop
End Sub
ここで、オプションのパラメーターの値をクリアするにはどうすればよいですか?いくつかの計算でこれが必要になります。何かのようなもの:
Set strA = Nothing
サブを変更してByVal
を追加します
Public Sub CalculateMe(Optional ByVal strA As String, Optional ByVal strB As String)
Public Sub CalculateMe(Optional varA As Variant, Optional varB as Variant)
Chip Pearson's 優れた説明からの抜粋:
オプションのパラメーターの使用を管理する規則:
Optional
キーワードが存在する必要があります。Variant
データ型である必要があります(必須ではありません)。IsMissing
関数は、Variant
として宣言されたパラメーターでのみ機能します。他のデータ型で使用すると、False
を返します。Function Test(L1 As Long, L2 As Long, _
Optional P1 As Variant, Optional P2 As Variant) As String
Dim S As String
If IsMissing(P1) = True Then
S = "P1 Is Missing."
Else
S = "P1 Is Present (P1 = " & CStr(P1) & ")"
End If
If IsMissing(P2) = True Then
S = S & " " & "P2 Is Missing"
Else
S = S & " " & "P2 Is Present (P2 = " & CStr(P2) & ")"
End If
Test = S
End Function
ここでは、L1とL2の両方が必須ですが、P1とP2はオプションです。両方ともVariant
型なので、IsMissing
を使用して、パラメーターが渡されたかどうかを判断できます。IsMissing
は、True
パラメーターが省略された場合、Variant
を返します。 False
パラメーターが含まれている場合はVariant
。オプションパラメータのデータ型がVariant
以外のデータ型の場合、IsMissing
はFalse
を返します。
CalculateMe(,strB)
の代わりに使用できます
dblA = CalculateMe strB:="B"
あなたが本当に「オプション」を意味するかどうかはわかりません。この例では、オプションとして引数をリストしていますが、まだboth引数を関数に渡しています。
いずれにしても、ここではboth引数を渡します:
Public Sub main()
strA = "A"
strB = "B"
'Calling the function
dblA = CalculateMe(strA, strB)
more code
End Sub
引数の1つだけを渡したい場合は、次のようにします。
dblA = CalculateMe(, strB)
または:
dblA = CalculateMe(strA)
そうではなく、常に両方の引数を渡す場合、Optional
を使用しても意味がありません。