- - PR -
TextBox入力値による演算時のNull項目によるエラーの回避方法は?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-04 14:27
初めて、会議室を使わせていただきます。
ExcelVBAにて、損益計算書の入力フォームを作成しております。 ユーザーがTextBoxに金額入力した際に、小計・合計を自動計算したく、TextBoxのExitイベント発生時に、TextBox.valueの演算プロシージャを実行したいのですが、演算するTextBoxの中にNull項目があった場合、実行時エラー13「型が一致しません」が発生してしまいます。 Null項目は0と見做した上で、汎用的に演算する方法がありましたら、お教え頂きたいのですが。 | ||||||||
|
投稿日時: 2004-04-04 15:18
演算する前にチェックする
そういうことではなく? | ||||||||
|
投稿日時: 2004-04-04 17:26
説明不足ですみません。
当初は、演算の都度個別にNullかどうかを判定し、if文で分岐させようかと思ったのですが、何かスマートな方法が無いものか、模索しているところであります。 ちなみに、オブジェクト及び演算は下記のイメージです。 @TextBoxが32個あり、それぞれはdata(1)〜data(50)の変数に格納。 Adata(3)〜data(23)の合計をdata(24)に格納。 Bdata(25)〜data(26)の合計をdata(27)に格納。 Cdata(28)〜data(30)の合計をdata(31)に格納。 D「data(1)-data(2)-data(24)+data(27)-data(31)」の演算結果をdata(32)に格納。 Edata(24)、data(27)、data(31)、data(32)は、入力せず演算結果表示のみ。 何れかのTextBoxのExitイベント発生時に、都度A〜Dの演算を行いたいのです。 なお、A〜Dの演算は、独立したプロシージャとし、全てのTextBoxのExitイベント発生時にCall文にて参照します。 型不一致エラーを回避し、スマートに演算する方法は無いでしょうか。 | ||||||||
|
投稿日時: 2004-04-05 00:58
お騒がせ致しました。
解決致しました。 | ||||||||
|
投稿日時: 2004-04-05 08:46
どうやって解決したのか、書いていただきたいのですが。。。
私なら、TextBoxを継承してコントロールを作り、「必ず数値を返す」プロパティを追加する、かな。。。 | ||||||||
|
投稿日時: 2004-04-07 00:50
Jittaさん こんばんは。
自問自答で終結してしまい、申し訳ございません。 TextBoxを格納した配列変数を、演算時にVAL関数を経由させることで、Null項目を0と見做して単純演算することが出来ました。 Val(data(i)) + Val(data(j)) ・・・ この会議室は、よく拝見すると高度な次元の方の議論の場のようで、私のようなVBA初心者がお邪魔するには場違いだったような感があります。 間の抜けた質問をしてしまい、申し訳ございません。 でも、また困ったときは助けていただければと思います。ありがとうございました。 | ||||||||
|
投稿日時: 2004-04-07 01:13
こんばんは。 詳しいことは一切見てませんが、 一つ気になったことがありましたので。 自分の記憶によれば、val関数はすべて入力に対して正しく動作するわけではない と思います。どんな場合だったか忘れましたけど。 なんのチェックもなしでいきなりvalだと、 入力の値によって正しく動作しないことが出てきます。 もし、ifで未入力の場合だけval関数を使うなら、意味がないですよね。 _________________ | ||||||||
|
投稿日時: 2004-04-07 01:38
# 既に解決されてるようですが・・・
TextBoxからExitするたびに、そのTextBoxの値だけをチェックして、 NULL(や、その他数値として評価できない値)だったらTextBox自体に 0を入れてしまうというのは? 愚直な方法ですけど、計算するたびに全部チェックする必要はないですし、 愚直な分確実でわかりやすいかと。 それと、多分既にお気づきでしょうが
だそうなんで、それは無理かと・・・。 # VBAでマクロ書いてると、心底 .net や Java が羨ましくなることってありますけどね・・・。 [ メッセージ編集済み 編集者: Cluster 編集日時 2004-04-07 01:51 ] |