非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Excel/VBA】関数から返す値をTextBox・Label・Rangeどれでも出力できるようにする方法

   

どこまで需要があるかわかりませんが、汎用性の高いフォームコントロールを作ろうとした際にデータの送り先がフォームコントロール(TextBoxやLabel)だろうがシートのセル(Range)だろうが、どんな相手でも出力できる方法です。

仕組みは単純で、TypeName関数を使ってオブジェクトの中身を判定して、それに応じた処理をするだけです。

Sub callback(obj As Object)
   If TypeName(obj) = "Range" Then
      obj.Value = "戻り値"
   End If

If TypeName(obj) = "TextBox" Then
      obj.Text = "戻り値"
   End If

If TypeName(obj) = "Label" Then
      obj.Caption = "戻り値"
   End If

If TypeName(obj) = "CommandButton" Then
      obj.Caption = "戻り値"
   End If
End Sub

 

使い方は以下の通り。(果たして需要があるのかどうか…)

'セルに入力
Call callback(Range("A1"))
'コマンドボタンの表示を変える
Call callback(CommandButton1)
'Labelの表示を変える
Call callback(Label1)
'TextBoxに入力する
Call callback(TextBox1)


動きを動画にしたので参考まで

 

スポンサーリンク

 - Excel, VBA