本ページには広告が含まれています。

VBA CallByName関数 オブジェクトのプロパティやメソッドを動的に操作する

VBA CallByName関数 オブジェクトのプロパティやメソッドを動的に操作する

Excel VBAの「CallByName 関数」について解説します。

スポンサーリンク

CallByName 関数とは

Excel VBA の CallByName 関数は、実行時動的にオブジェクトのプロパティを取得・設定したり、メソッドを呼び出したりするための関数です。通常、VBAではオブジェクトのプロパティやメソッドを直接記述して操作しますが、CallByName 関数を使うことで、文字列で指定したプロパティやメソッドを動的に操作できます。

CallByName 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。

CallByName 関数(Visual Basic for Applications リファレンス)

スポンサーリンク

構文(引数と戻り値)

Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。

構文

CallByName(object, procname, calltype [,args()])

引数

指定項目説明
object【必須】実行するオブジェクトを指定します
procname【必須】プロパティまたはメソッドの名前を指定します
calltype【必須】呼び出すプロシージャの種類を指定します(次表参照)
args()【省略可】プロパティまたはメソッドに渡す引数を指定します

引数 calltype に指定する定数または値は次のとおり

定数内容
vbMethod1メソッドを実行します
vbGet2プロパティを取得します
vbLet4プロパティを設定します
vbSet8オブジェクトの参照を設定します

戻り値

戻り値は、実行したオブジェクトのプロパティまたはメソッドの取得値です。

解説(使用例)

CallByName 関数の使い方について、サンプルを使って解説します。

CallByName 関数使用サンプル

CallByName 関数でオブジェクトのプロパティやメソッドを動的に操作する例を紹介します。

UserForm上のコントロールに対する例

TextBox と CommandButton を操作する例です。

'■CallByName関数サンプル1(UserFormのControl操作例)
Sub CallByName_Sample01()
  Dim ctrl As Control
  Dim res As Long
  UserForm1.Show vbModeless
  For Each ctrl In UserForm1.Controls
  
    ' TextBox1のプロパティを設定 VbLet
    If ctrl.Name = "TextBox1" Then
      CallByName ctrl, "BackColor", VbLet, vbYellow
      
      ' TextBox1のプロパティを取得 VbGet
      res = CallByName(ctrl, "Left", VbGet)
    End If
    
    ' CommandButton1をMoveメソッドで移動
    If ctrl.Name = "CommandButton1" Then
      CallByName ctrl, "Move", VbMethod, res, 50
    End If
    
  Next ctrl
End Sub

コードを実行した直後の UserForm1 は次のように表示されます。

CallByName関数サンプル1で初期表示されるUserForm画像
VbLetでTextBox1のプロパティを設定

CallByName ctrl, "BackColor", VbLet, vbYellow でバックカラーを黄色に設定しています。

設定後の UserForm1 の表示は次のとおりです。

TextBoxのBackColor設定後のUserForm画像
VbGetでTextBox1のプロパティを取得

res = CallByName(ctrl, "Left", VbGet) で TextBox1 のプロパティーから Left の数値を取得しています。

これは、次の CommandButton1 の位置を TextBox1 の位置と揃えるための情報取得です。

CommandButton1をMoveメソッドで移動

CallByName ctrl, "Move", VbMethod, res, 50 で CommandButton1 の位置をムーブメソッドを使って移動させています。Move メソッドの引数は (Left, Top) の順で設定しています。Left には先ほど VbGet で取得して変数に格納した TextBox1 の左位置 (res) としています。

CommandButton1 が移動した UserForm1 の画像が次のとおりです。

CommandButton移動後のUserForm画像

TextBox1 と CommandButton1 の表示位置が左側で揃って表示されました。

おわりに

VBA の CallByName 関数は、オブジェクトのプロパティやメソッドを動的に操作するための関数ですが、VBAの中では使用頻度が高いとは言えない関数です。以下に使われるケース使われるケースと、使われない理由を列記しておきます。

CallByName関数が使われるケース

  • 動的にプロパティやメソッドを呼び出したいとき
    • ユーザーが選んだ処理名を文字列で受け取り実行するなど
  • 汎用的な処理をクラスやフォームに適用したいとき
    • 複数のオブジェクトに対して同じプロパティ名を動的に設定

使用頻度が低い理由

  • コードの可読性が下がる
    • どのプロパティやメソッドが呼ばれるかが明示されないため
  • 実行時エラーのリスクが高い
    • プロパティ名やメソッド名のスペルミスがコンパイル時に検出されない
  • パフォーマンスが劣る
    • 実行時に名前解決が行われるため、直接呼び出しより遅くなる
  • 代替手段がある
    • 直接呼び出しやSelect Caseなどで十分対応できる

以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;

VBAの関数一覧はこちらからご参照ください。

スポンサーリンク
スポンサーリンク

VBAサンプルファイルダウンロードページのご案内

このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。

ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!