思うんですけど、見つけられなかったので書いてしまいました。
書いてしまったので、備忘で公開しておきます。
何かの後始末的処理の中で、ひたすら変数をクリアしていく、という不毛なコードが延々と続くときってありませんか?
たとえばこんな感じ。
' 後始末 Set obj1 = Nothing Set obj2 = Nothing str1 = vbNullString str2 = vbNullString i = 0 j = 0 ' 以下略
もうこれはあまりにもかったるいので、まとめて片付けたいわけです。
こんな風に。
' 後始末 ClearVars obj1, obj2, str1, str2, i, j, ... ' 以下略
では、コード。
' 変数を初期化します。
' 配列と構造体は受け付けないので、注意。
' 使用例: ClearVars db, rs, myName, i, j, ...
Public Sub ClearVars(ParamArray args() As Variant)
If IsMissing(args) Then Exit Sub
Dim i As Integer
Dim t As VbVarType
' For Each だとオブジェクトを初期化できないので、For ループにする
For i = LBound(args) To UBound(args)
t = VarType(args(i))
If t And vbArray Then
Err.Raise 5 ' プロシージャの呼び出し、または引数が不正です。
Else
Select Case t
Case vbObject
Set args(i) = Nothing
Case vbString
args(i) = vbNullString
Case vbBoolean, vbDate, vbByte, vbInteger, vbLong, _
vbSingle, vbDouble, vbCurrency, vbDecimal
args(i) = 0
Case vbVariant
args(i) = vbEmpty
Case Else
Err.Raise 5 ' プロシージャの呼び出し、または引数が不正です。
End Select
End If
Next
End Subそれもうあるよ、というのをご存知の方は、コメントで教えてください。
似たようなものがあったなぁと思ったら、YU-TANGさんのサイトの情報でした・・・
返信削除※コントロールをまとめて扱う関数
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsC_Function.html
お決まりの処理なので、1行でスパッとできたら本当に助かりますね。いつだったか、dbをクローズしなかった為に、ファイルの残骸をAccess本体が掴みっぱなしで、無駄に悩んだことがありました。
コメントありがとうございます。スパムフィルタに引っかかっていたので、気づくのが遅れてすみません。たぶん URL が入っていたのでスパム扱いに…ってウチの URL じゃん! 頼むよ Blogger!
返信削除でもねー、こういう機構は言語側で用意しておいてほしいというのが、本音ですね。なんか宣言時に Grouping キーワード付けておけば、InitVars みたいな文でまとめて初期化できるとか。