• ベストアンサー

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":型が一致しません と表示されてしまいます。どうすればよいのでしょう???

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

>実行エラー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)
回答No.6

>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でなかったらすいません。。。)

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=225969
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

次ぎのようにすると上手く行きませんか。一応テスト済みです。 質問の趣旨にずれていますか。 イベントを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)
回答No.3

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)
回答No.2

こんにちは。itohhといいます。 前の質問も見てみましたが、今回の質問の中にあるソースを見ると 前のアドバイスを生かされていないのでしょうか? もし、生かされているのでしたらそちらのソースを載せていただかないとアドバイスが 出来ないと思いますよ。

  • haporun
  • ベストアンサー率40% (230/562)
回答No.1

えーと、まず、コントロールや変数の名前に日本語を使うと、ソース効率がめちゃくちゃ悪くなるので、日本語は控えるようお勧めします。 確かに、わかりやすいのですが。 >実行エラー13":型が一致しません こういうエラーが出たときは、デバッグを押すと、エラーとなっている行が黄色で表示されますので、その行を補足してください。 これから、VBのエラーで質問するときは、これが基本だと思ってください。 迅速に回答できるかと思います。 >Tx貸方 = TextBox貸方.value TextBox貸方はテキストボックスだと思うのですが、valueなどというプロパティは持っていません。 型が一致しないようなエラーは、この辺しか見あたりませんが、通常は "メンバが見つかりません" とかいうエラーになるはずです。 いずれにしろ、これだけのコードでは分かりません。 補足をおねがいします。

関連するQ&A

  • Case Eles

    ただいま私はこのようなプログラムを作っています。 Private Sub TextBox貸方_Change() Dim 貸方 As Integer Tx貸方 = TextBox貸方.value Select Case Tx貸方 Case 101 TextBox貸方摘要.Text = "現金" Case 102 TextBox貸方摘要.Text = "当座預金"            ・            ・            ・  'Case Eles 'MsgBox ("該当コード無し") End Select End Sub しかしなぜか1011などの存在しないコードを入力してもメッセージボックスが表示されません!誰かお力をお貸しください!

  • 複数のテキストボックスのカンマ処理

    現在、ユーザーフォームに60個のテキストボックスを設置しています。 数値入力されるとカンマが付くようコードを書いているのですが、まとめて処理できるようなコードはないでしょうか? 現在… Private Sub TextBox1_Change() TextBox1.Text = Format(TextBox1.Text, "#,##0") End Sub Private Sub TextBox2_Change() TextBox2.Text = Format(TextBox2.Text, "#,##0") End Sub Private Sub TextBox3_Change() TextBox3.Text = Format(TextBox3.Text, "#,##0") End Sub これを60個 試しにfor~Nextで書いてみましたが、失敗しました。 Dim c As Integer For c = 1 To 60 Controls("TextBox" & c).Text = Format("TextBox" & c.Text, "#,##0") Next End Sub ご存知の方、お力を貸してください。 ウィンドウズ7のエクセル2013を使用しています。

  • テキストボックスの内容を反映させたい

    たびたび超初心者の質問で、大変申し訳ございません。 TextBox2へ入力された内容を、自動でTextBox6へ転記するようにしたいです。 TextBox2・6へ入力する、具体的なコードをご教授ください。 今現在の各TextBoxのコードは下記で、フリーに入力できるようになっています。 Private Sub TextBox2_Change() End Sub Private Sub TextBox6_Change() End Sub

  • ListBoxに値を追加していくには。

    Private Sub CommandButton31_Click() ListBox12.ColumnCount = 5 ListBox12.ColumnWidths = "4.0cm;4.0cm;2.0cm;3.0cm;2.0cm" End Sub Private Sub TextBox175_Change() SetList End Sub Private Sub TextBox176_Change() SetList End Sub Private Sub TextBox177_Change() SetList End Sub Private Sub TextBox178_Change() SetList End Sub Private Sub TextBox179_Change() SetList End Sub Private Sub SetList() ListBox12.Clear ListBox12.AddItem TextBox175.Text ListBox12.List(0, 1) = TextBox176.Text ListBox12.List(0, 2) = TextBox177.Text ListBox12.List(0, 3) = TextBox178.Text ListBox12.List(0, 4) = TextBox179.Text End Sub ここで、TextBox175~179の値をコマンドボタン1を押す度、 ListBox12の最終行の直下に挿入されていくようにしたいです。 列はそのままです。 1行目 (0,1),(0,2),(0,3),(0,4) 2行目 (1,1),(1,2),(1,3),(1,4) 3行目 (2,1),(2,2),(2,3),(2,4) どのようにやればいいでしょうか。

  • エクセルVBAでユーザーフォームのテキストボックス

    ユーザーフォーム上にテキストボックスを8個設置しました。 そこに数値が入力された場合は自動的にカンマ区切りが表示されるように以下のコードを書きました。 これで希望の動きはしてくれるのですが、このやりかたは正しいでしょうか? また、テキストボックスは8個あるので、それぞれに下記のように8通りコードをかかなければいけないのでしょうか?ご教示ください。 Private Sub TextBox1_Change()   If IsNumeric(TextBox1.Value) Then Application.EnableEvents=False     TextBox1.Text = Format(TextBox1.Value, "#,##0") Application.EnableEvents=True   End If End Sub 途中(2~7)略 Private Sub TextBox8_Change()   If IsNumeric(TextBox8.Value) Then Application.EnableEvents=False     TextBox8.Text = Format(TextBox8.Value, "#,##0") Application.EnableEvents=True   End If End Sub

  • ユーザーフォーム上にある「テキストボックス」に小数が入力できない

    以前にユーザーフォーム上のテキストボックスにセル値反映する方法を下記(サンプル1)のようにお教えいただいたのですが、下記のようにマクロを組むとテキストボックスに小数が入力できなくなってしまいます。 どのようにしたら、テキストボックスに小数が入力できるようになるのでしょうか? お教えください。 事例)「1.234」とテキストボックスに打ち込むと「1」    「0.856」とテキストボックスに打ち込むと「0」と    なってしまいます。 (サンプル1) 'A1のデータを反映するとした場合 'OptionButton1のコード Private Sub OptionButton1_Click() TextBox1 = Sheets("Sheet1").Range("a1") End Sub 'B1に反映するとして 'OptionButton2のコード Private Sub OptionButton2_Click() TextBox1 = "" End Sub 'TextBox1のコード Private Sub TextBox1_Change() If OptionButton2 = True Then Sheets("Sheet1").Range("B1") = TextBox1.Value End If End Sub

  • Select Caseでorは使えないのでしょうか?

    Sub TEST() 文字 = "あ" Select Case 文字 Case "あ" Or "い" MsgBox "「あ」もしくは「い」です。" End Select End Sub これだとエラーになるのですが ケースが「あ」もしくは「い」の場合は同じ処理をしたい場合はどうすればいいのでしょうか? Sub TEST() 文字 = "あ" Select Case 文字 Case "あ" MsgBox "「あ」もしくは「い」です。" Case "い" MsgBox "「あ」もしくは「い」です。" End Select End Sub このコードをまとめるはどうすればいいのでしょうか? よろしくお願い致します。

  • 大量のオブジェクトで同様のイベント処理をしたい場合の記述

    Excel VBAでフォームなどに大量のオブジェクトを配置して、各々のオブジェクトで同様のイベントを処理したいのですが、まとめて記述する方法はあるのでしょうか。 ユーザーフォーム上に大量の数値入力ボックス(TextBoxオブジェクト)を配置して、全てのボックスに同様の入力値制限を課そうとして、コードが肥大化して困っています。どうかよろしくお願い致します。 例) Sub TextBox1_change() <プロシージャー> end sub Sub TextBox2_change() <プロシージャー> end sub ・・・・・・ Sub TextBox10_change() <プロシージャー> end sub (<プロシージャー>部分は共通)のように延々と記述しなくても済む方法はあるのでしょうか。

  • ifでの条件分岐

    .net vb2005でプログラミングしています。 2つのテキストボックスがあり、その名前をtextbox1,textbox2 , 変数の代入をtx1、tx2とします。 どちらも半角数字で300までしか入力できません。 さらに、tx1に入力されるとtx2も必ず入力される必要があります。 tx1が未入力の場合はtx2も未入力である必要があります。 最初にtx1の文字数が0か確認し、入っている場合、居ない場合と ifで条件分岐させましたが うまくいきません。。 アドバイスいただきたいと思います。 Dim tx1,tex2 As Integer If Len(TextBox1.Text) = 0 Then flg = 0 ElseIf Regex.IsMatch(TextBox1.Text, "^[0-9]{1,3}$") Then tx1= Val(TextBox1.Text) tx1 = Convert.ToInt32(iptx5) '文字列をInteger型(数字型)に変換 Else MsgBox("300までの数字で入力して下さい", vbCritical, "入力エラー") TextBox1.Clear() Exit Sub End If If tx1 > 255 Then flg = 1 MsgBox(ipm_msg2, vbCritical, "入力エラー") TextBox1.Clear() End If '********************************************************************** If Len(TextBox1.Text) = 0 Then flg = 0 exit sub ElseIf Regex.IsMatch(TextBox2.Text, "^[0-9]{1,3}$") Then tx2 = Val(TextBox2.Text) tx2 = Convert.ToInt32(tex2) Else MsgBox(ipm_msg1, vbCritical, "入力エラー") TextBox2.Clear() Exit Sub End If '**255以上なら入力不可** If iptx6 > 255 Then flg = 1 MsgBox(ipm_msg2, vbCritical, "入力エラー") TextBox6.Clear() Exit Sub End If

  • 【VBA】郵便番号のハイフン自動挿入

    Private Sub TextBox4_Change() '郵便番号の”-”処理 If Len(TextBox4.Text) = 4 Then TextBox4.Text = Left(TextBox4.Text, 3) End If If Len(TextBox4.Text) = 3 Then TextBox4.Text = TextBox4.Text & "-" End If End Sub コレでいいかと思ったのですが ハイフンの追加、削除でTextBox4_Changeが動いてしまいます。 どうしたらいいでしょうか?