お疲れ様です。
私が実装したVBAコードに下記実装があります。
それぞれフォームからのボタン押下で流れる作りになっています。
VBA
1'*************************************************************************** 2'実行 3'実行ボタン押下で実行される処理 4'*************************************************************************** 5 Sub 実行() 6 Application.EnableEvents = False 7 Application.ScreenUpdating = False 8 Call SetReportDate 9 Call EditFormats 10 Call SetLines 11 Call SetCells 12 Range("A1").Select 13 MsgBox ("処理が正常に完了しました。") 14 Application.ScreenUpdating = True 15 Application.EnableEvents = True 16 End Sub 17'*************************************************************************** 18'リセット 19'リセットボタン押下で実行される処理 20'*************************************************************************** 21 Sub リセット() 22 Application.EnableEvents = False 23 Application.ScreenUpdating = False 24 Cells.Select 25 Selection.EntireRow.Hidden = False 26 Sheet1.ComboBox1.Clear 27 Call SetRows 28 Call ResetColors 29 Call ResetInputDataProjects 30 Range("A1").Select 31 MsgBox ("リセットしました。") 32 Application.ScreenUpdating = True 33 Application.EnableEvents = True 34 35 End Sub 36 37'*************************************************************************** 38'絞り込み 39'絞込ボタン押下で実行される処理 40'*************************************************************************** 41 Sub 絞り込み() 42 Application.EnableEvents = False 43 Application.ScreenUpdating = False 44 Cells.Select 45 Selection.EntireRow.Hidden = False 46 Range("A1").Select 47 Call NarrowRows 48 Application.ScreenUpdating = True 49 Application.EnableEvents = True 50 End Sub
この処理を見ていただくとわかると思いますが、
Application.EnableEvents = False
Application.ScreenUpdating = False
処理
Application.ScreenUpdating = True
Application.EnableEvents = True
という作りになっています。
この処理前、処理後の二行をプロシージャとして切り出して、
CALLすれば一応簡略化は図れるのですが、
VisualStudioのC#の実装実装で、
メソッド呼び出し前後に起動する処理が指定できた記憶があり、
同様のことをVBAでできないかと考えております。
確かこんな感じでした
[POST]
[AttributeUsageAttribute]
[BeforeMethod]
[AfterMethod]
public なんちゃら
ちょっとこの当たりは詳しくないので、
クラスの属性?か何かの話だと思うのですが、
これをVBAの特定のプロシージャに属性付与して、
上の例でいうのであれば[BeforeMethod][AfterMethod]を記述することで、
そのメソッドの実行時には前処理にValidCheck、後処理にオブジェクトの解放をする。というような当時の私には理解できなかったコード実装がされていたのですが、似たような実装で、上のコードの簡略化は実装できないでしょうか。
イメージとしてはこんな感じにしたいです。
vba
1[BeforePro]'クラス内に存在するそれぞれのプロシージャ実行前に流れる処理。 2[AfterPro]'クラス内に存在するそれぞれのプロシージャ実行後に流れる処理。 3Class 実行トリガープロシージャ 'こんな概念ないと思いますがプロシージャをグループ化する意図です。 4 Sub 実行() 5 Call SetReportDate 6 Call EditFormats 7 Call SetLines 8 Call SetCells 9 Range("A1").Select 10 MsgBox ("処理が正常に完了しました。") 11 End Sub 12 13 14 Sub リセット() 15 Cells.Select 16 Selection.EntireRow.Hidden = False 17 Sheet1.ComboBox1.Clear 18 Call SetRows 19 Call ResetColors 20 Call ResetInputDataProjects 21 Range("A1").Select 22 MsgBox ("リセットしました。") 23 End Sub 24 25 Sub 絞り込み() 26 Cells.Select 27 Selection.EntireRow.Hidden = False 28 Range("A1").Select 29 Call NarrowRows 30 End Sub 31End Class
現在VBA学習段階ですので、
実装できないようであるなら普通にプロシージャを二つ作成して
内部でコールすればいいので、問題はないのですが、
記憶の片隅にある「出来たような気がする」という感情があり、気になってしまいまして。
実装可能であるようであれば、どのようなつくりにできるのか、
ご教授お願いいたします。
*繰り返しますが、不可能なら不可能ですとおっしゃていただければそれでよいです。
回答5件
あなたの回答
tips
プレビュー