こんな記事を見かけて機能別にブックを切り分けたくなってきたので模索中メモ
単機能ならまだしも複数機能にまたがるクラスってどうなるのか試してみた。
結論
- クラスとして戻り値を得ることはできる
- ただし型がVariantになり、インテリセンスも使えない
使えるには使えるけど結局ブックを分けたところで、更新があった場合呼び出す側も呼び出される側もどちらも更新しなきゃっぽい。
せいぜい使うクラス単位くらいに分けて管理?
そもそもRelaxToolsとか何機能あるんだよだもんね
皆さんバージョン管理ってどうやってるのでしょうか?
そろそろGitデビュー時?
以下コード
呼び出される側
クラス
呼び出される側 clsTest
Option Explicit
Public str As String
Public val As Long
標準モジュール
呼び出される側 bas
Option Explicit
Function testClass(str_ As String, val_ As Long) As clsTest
' 別ブックから呼び出してクラスを返せるか
Dim clsT As New clsTest
With clsT
.str = str_
.val = val_
End With
Set testClass = clsT
End Function
呼び出す側
標準モジュール
呼び出す側
Option Explicit
Sub test_クラスを返してもらう()
' 下ごしらえ:呼び出す別ブックのフルパス、プロシージャ名を付与
Const 呼び出す別ブックのフルパス = "C:\Users\hoge\呼び出される側.xlsm"
Const プロシージャ名 = "testClass"
' 別ブックを開く
Dim wb As Workbook
Set wb = Workbooks.Open(呼び出す別ブックのフルパス)
' メイン:別ブックのプロシージャを引数つきで呼び出す
Dim 戻り値
Set 戻り値 = Application.Run(wb.Name & "!" & プロシージャ名, "strTest", 12345)
Stop
With 戻り値
Debug.Print .Str
Debug.Print .Val
End With
' 終了処理
Set wb = Nothing
Set 戻り値 = Nothing
End Sub
返してはもらえるが型がVariantになる
インテリセンスも使えない
呼び出される側自身でtestClass
を呼ぶと型がクラスになる
インテリセンスは当然使える
Sub testCallClass()
Dim clsT As clsTest
Set clsT = testClass("qwerty", 12345)
Stop
End Sub