CallByName関数は、指定されたオブジェクトのメソッドの実行や、プロパティの値の取得/設定を、プロパティやメソッドの名前を引数Procnameに文字列で指定して行います。なお、実行する処理の種類は引数calltypeで指定します。次の一覧を参照してください。
・引数calltypeで指定する引数一覧(vbCallType)
定数 値 内容
VbMethod 1 メソッドを実行する
VbGet 2 プロパティの値を取得する
VbLet 4 プロパティの値を設定する
VbSet 8 プロパティにオブジェクトへの参照を代入する
構文 CallByName(Object, Procname, Calltype, Args())
設定項目 内容
Object 実行対象となるオブジェクトを指定 [省略不可]
Procname プロパティ名、メソッド名を文字列で指定 [省略不可]
Calltype 実行する処理の種類を表す定数を指定(一覧参照) [省略不可]
Args() 引数を必要なだけ指定 [省略可能]
次のサンプルは、選択セルのいくつかのプロパティの値を、メッセージボックスに表示するものです。
●サンプル●
Sub CallByNameSamp1()
Dim myRange As Range
Dim myPrName(1 To 6) As String
Dim i As Integer
Dim myMsg As String
'---取得したいプロパティを設定
myPrName(1) = "Address"
myPrName(2) = "Top"
myPrName(3) = "Left"
myPrName(4) = "Value"
myPrName(5) = "Formula"
myPrName(6) = "Style"
Set myRange = Selection
For i = 1 To 6
'---myPrName(i)に対応したプロパティの値を返す
myMsg = myMsg & myPrName(i) & vbTab & _
CallByName(myRange, myPrName(i), VbGet) & vbCr
Next i
MsgBox myMsg
End Sub
●ポイント●
取得したいプロパティや実行したいメソッドの種類を決定するのがコード記述時ではなく、コード実行時である場合を考えてみてください。、言い換えれば、ユーザーが選択した処理の種類を実行したい場合、ということになります。
Excel2000以前では、可能性の数だけ、プログラミングをしていくことになります。
しかし、どのようなコーディングをしていくのが効率的でしょうか?それを考えたときに、CallByName関数を使う場合と使わない場合とでは、必要なコーディング量にが大きな差がでます。なぜなら、プロパティやメソッドの種類の特定が、実行中に作成した文字列型の変数でも行えるからです。なお、CallByName関数はExcel2000の新機能です。