- ベストアンサー
Case Eles part2
以前にも投稿させていただいたものと同じなのですが、締め切ったあとにまた問題が発生しまして・・・解答していただいた方には申し訳ないのですが今一度知恵をお貸しください! Private Sub TextBox貸方_Change() Dim 貸方 As Integer Tx貸方 = TextBox貸方.value Select Case Tx貸方 Case 101 TextBox貸方摘要.Text = "現金" Case 102 TextBox貸方摘要.Text = "当座預金" ・ ・ ・ Case Else TextBox借方摘要.Text = "該当コード無し" End Select End Sub としても一度入力してからその入力したコードを消すと 実行エラー13":型が一致しません と表示されてしまいます。どうすればよいのでしょう???
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>実行エラー13":型が一致しません データの型が違っているからです。 「Tx貸方」はInteger型、「TextBox貸方」はおそらくテキストボックスなのでString型となります。 >Tx貸方 = TextBox貸方.value このときVBは型の自動変換を行ってくれますがいつも変換可能というわけでは有りません。 例えば数字以外や空欄は変換できずにエラーとします。 この場合、IF文を使って振り分ければ良いでしょう。 IF TextBox貸方.Text = "" THEN Tx貸方 = 0 ELSE Tx貸方 = TextBox貸方.Text END IF
その他の回答 (5)
- TAGOSAKU7
- ベストアンサー率65% (276/422)
>TextBox貸方.value 書き方からするとAccessかな? >実行エラー13":型が一致しません おそらく Select Case Tx貸方 の部分でひっかかるのでは? AccessのテキストボックスはVBのテキストボックスと違って、未入力状態の時、Null値を持ちます。 ですので 1.Nullチェック 2.数値タイプチェック 3.数値によるCASE分けによる処理 といった手順が必要です。 エラーの原因は、Select Case は文字列/数値型に使用すべきなのに、 Tx貸方.Value = Null値 のために発生すると思われます。 'Null値チェック If IsNull(TextBox貸方.value) Then '未入力(Null処理) TextBox貸方摘要.Value = Null Else '数値型チェック If IsNumeric(TextBox貸方.value) Then Select Case Tx貸方 Case 101 TextBox貸方摘要.Value = "現金" Case 102 TextBox貸方摘要.Value = "当座預金" ・ ・ ・ Case Else TextBox貸方摘要.Value = Null Call MsgBox("該当コード無し") End Select Else TextBox貸方摘要.Value = Null Call MsgBox("該当コード無し") End If End If このコードは http://oshiete1.goo.ne.jp/kotaeru.php3?q=225969 を参考に作成いたしました。 それと、Accessの場合はテキストボックスの値参照や値セットはValueを使用したほうが便利です。 Textだと、フォーカスを持っているとき以外は、値参照できなかったような気が・・・ 遠い記憶で、しかも未検証なので、はっきりとは言えませんが・・・ (Accessでなかったらすいません。。。)
- imogasi
- ベストアンサー率27% (4737/17070)
次ぎのようにすると上手く行きませんか。一応テスト済みです。 質問の趣旨にずれていますか。 イベントをText1のKeyDownにする。 1文字でも入力したり、削除したりするとこのルーチンへ飛ぶから If KeyCode = 13で「改行」の時だけ取り出してSelect Case で判別する。下記では科目表示のテキストボックスをText2に (面倒くさいと思い)変えました。 Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) Dim 貸方 As Integer Text2.Text = "" ’一度起こったエラー表示等を消す ' MsgBox KeyCode ’毎文字ごとに飛んでくることの実感のため If KeyCode = 13 Then Tx貸方 = Text1.Text Select Case Tx貸方 Case 101 Text2.Text = "現金" Case 102 Text2.Text = "当座預金" Case Else Text2.Text = "該当コード無し" End Select End If End Sub Tx貸方 = Text1.TextはTx貸方 = Text1.Valueではうまくいきませんでした。 むしろ私が、テキストボックスで「エンタキーを押した時だけ飛んでくるイベント」をどなたかから教えてほしいです。
- nishi6
- ベストアンサー率67% (869/1280)
Changeイベントを使うとせわしい感じがしますが・・・ 変数宣言がよく分かりませんが、TextBox借方摘要はTextBox貸方摘要に変えてあります。 Private Sub TextBox貸方_Change() Dim 貸方 As Integer Dim Tx貸方 As Long With TextBox貸方摘要 If IsNumeric(TextBox貸方.Value) Then Tx貸方 = TextBox貸方.Value Select Case Tx貸方 Case 101: .Text = "現金" Case 102: .Text = "当座預金" : : Case Else: .Text = "該当コード無し" End Select Else .Text = "該当コード無し" End If End With End Sub
- itohh
- ベストアンサー率45% (210/459)
こんにちは。itohhといいます。 前の質問も見てみましたが、今回の質問の中にあるソースを見ると 前のアドバイスを生かされていないのでしょうか? もし、生かされているのでしたらそちらのソースを載せていただかないとアドバイスが 出来ないと思いますよ。
- haporun
- ベストアンサー率40% (230/562)
えーと、まず、コントロールや変数の名前に日本語を使うと、ソース効率がめちゃくちゃ悪くなるので、日本語は控えるようお勧めします。 確かに、わかりやすいのですが。 >実行エラー13":型が一致しません こういうエラーが出たときは、デバッグを押すと、エラーとなっている行が黄色で表示されますので、その行を補足してください。 これから、VBのエラーで質問するときは、これが基本だと思ってください。 迅速に回答できるかと思います。 >Tx貸方 = TextBox貸方.value TextBox貸方はテキストボックスだと思うのですが、valueなどというプロパティは持っていません。 型が一致しないようなエラーは、この辺しか見あたりませんが、通常は "メンバが見つかりません" とかいうエラーになるはずです。 いずれにしろ、これだけのコードでは分かりません。 補足をおねがいします。