フォームとのデータ交換には、殆どの場合、次のどちらかの方法が用いられます。
・フォーム側から該当シートに直接アクセス(読み書き)する
・やり取りするデータの全てを、グローバル変数に格納する
いずれも、汎用性あるいは信頼性に欠け、余り好ましい方法とは考えられません。
では、どーするか・・?
UserForm1のコードに以下を記します。
Private testData As Long
Property Let Info(arg As Long) ‘データ受領
testData = arg
End Property
Property Get Info() As Long ‘データ返却
Info = testData
End Property
シートには以下を記します
Dim testDataOnSh as long
testDataOnSh = 1
UserForm1.Info = testDataOnSh
UserForm1.Show
testDataOnSh = UserForm1.Info
これで、
・フォームを開く前のtestDataOnSh = 1がフォームに渡され、
・フォームの中で適当に加工され変わった値が、
・フォームを閉じたとき、シートの変数testDataOnShに戻されます。
例示では「整数型データ」を遣り取りしていますが、ここに「ユーザー定義型データ」を用いることも可能です。