VBAを使いこなしていく上で重要なことは「決して高度な使い方をしてはいけない」ということです。
え?という感じでしょうが、使っていくうちに、よりいろいろな機能を盛り込んでいくことになり、また複雑にならないよう、より簡潔に書く方法を探すことになります。
そうするとVBAであっても、今時の記述方法といいますか、プログラムやデータをオブジェクトとして扱い、それをまとめて処理したりとか、リアルタイムで入力チェックしたり、といったことが実はできます。
しかし「それを書いてはいけない」のです。
なぜ?と思われるでしょうが、VBAの場合すぐにリソース不足を起こしてしまうためです。
(リソース不足に陥り安い例)
まず、リアルタイムで入力した情報をチェックするようなプログラムを書いていくと、きまってリソース不足のエラー画面が表示されます。
また、画面の部品を一個ずつ指定せずに、同様なものをFor Eachなどのルーチーンで回しながら扱いたい、といった場合、コンストラクターというオブジェクトに複数オブジェクト(画面のコントロールなど)をまとめて登録し、コンストラクターから取り出しながら、処理すると非常に簡潔に処理がかけるのですが、そのような処理を書いたとたん「オートメーションエラー」という、リソース不足からくるエラーがすぐに出てきてしまいます。
(対処方法)
対処方法としては、DoEventsという、処理をOSに渡すということが一般には言われますが、そ言う簡単にはいきません。
基本、リソース不足を起こす記述はしないということに尽きるかと思います。
「キー入力と同時の処理は極力さけ、入力値のチェックは別のタイミングで行う」
「繰り返し処理、特にオブジェクトのコンストラクターでの繰り返し処理は絶対に書かない」
というものになります。
具体的には、後者であれば、処理の中で全ての部品を並べて書いたり、それが無理な場合には、値を配列に入れて回す、もしくは対応した番号をもとに分岐するCASE分を作り、それぞれに処理を記述したりします(同じような処理が複数できてしまいますが)。
次回は、この後者の例を書きたいと思います。
え?という感じでしょうが、使っていくうちに、よりいろいろな機能を盛り込んでいくことになり、また複雑にならないよう、より簡潔に書く方法を探すことになります。
そうするとVBAであっても、今時の記述方法といいますか、プログラムやデータをオブジェクトとして扱い、それをまとめて処理したりとか、リアルタイムで入力チェックしたり、といったことが実はできます。
しかし「それを書いてはいけない」のです。
なぜ?と思われるでしょうが、VBAの場合すぐにリソース不足を起こしてしまうためです。
(リソース不足に陥り安い例)
まず、リアルタイムで入力した情報をチェックするようなプログラムを書いていくと、きまってリソース不足のエラー画面が表示されます。
また、画面の部品を一個ずつ指定せずに、同様なものをFor Eachなどのルーチーンで回しながら扱いたい、といった場合、コンストラクターというオブジェクトに複数オブジェクト(画面のコントロールなど)をまとめて登録し、コンストラクターから取り出しながら、処理すると非常に簡潔に処理がかけるのですが、そのような処理を書いたとたん「オートメーションエラー」という、リソース不足からくるエラーがすぐに出てきてしまいます。
(対処方法)
対処方法としては、DoEventsという、処理をOSに渡すということが一般には言われますが、そ言う簡単にはいきません。
基本、リソース不足を起こす記述はしないということに尽きるかと思います。
「キー入力と同時の処理は極力さけ、入力値のチェックは別のタイミングで行う」
「繰り返し処理、特にオブジェクトのコンストラクターでの繰り返し処理は絶対に書かない」
というものになります。
具体的には、後者であれば、処理の中で全ての部品を並べて書いたり、それが無理な場合には、値を配列に入れて回す、もしくは対応した番号をもとに分岐するCASE分を作り、それぞれに処理を記述したりします(同じような処理が複数できてしまいますが)。
次回は、この後者の例を書きたいと思います。
コメント
コメントを投稿