• ベストアンサー

VBA の IF then 文につぃて

access2000でテーブルに連結していないフォームがあり その中のテキストボックスにバーコードや磁気カードで読み込ませその桁数によって処理を分けようと思っていますが、どのようにコードを書けばよいのかおしえてください。 たとえば、 private sub() if 入力テキスボックス が 8桁 then 磁気カード処理 if 入力テキストボックスが 11桁 then バーコード処理 end if end sub public sub 磁気カード処理() public sub バーコード処理() のような形です。 どうかお願いします

  • Hugh
  • お礼率48% (45/92)

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

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

初めまして。If文でそのまま使って組んでみました。 sub Test if len(フォームのオブジェクト名.combobox1.text).value = 8 then Call 磁気カード処理 elseif len(フォームのオブジェクト名.combobox1.text).value = 11 then call バーコード処理 end if end sub 上のコードを実行すると、コンボボックス1の桁数が8桁の時、public sub 磁気カード処理() を呼び出して、このマクロを実行します。またコンボボックス1の桁数が11桁の時は、public sub バーコード処理()を呼び出してこのマクロを実行します。 フォームのモジュールシートにコードを書く場合はフォームのオブジェクト名をmeと書いてもかまいませんが、それ以外のシートに書くときは、フォームのオブジェクト名をきちんと書かないとエラーになってしまいます。 お試しになってみて下さい。

Hugh
質問者

お礼

ありがとうございます。 おかげさまでできました。 またよろしくお願い致します。

その他の回答 (2)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

Len関数は、文字列の長さを取得する関数です。 桁数って、要するにテキストボックスに入力された文字列の長さなわけですから。

Hugh
質問者

お礼

ありがとうございます。 おかげさまでできました。 またよろしくお願い致します。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 私はSelect Case文を使います。 こんな感じ Select Case Len(Me!入力テキストボックス.Value)   Case 8     (磁気カード処理)   Case 11     (バーコード処理)   Case Else     (例外処理) End Select

Hugh
質問者

補足

早速ありがとうございます。 select文ですかあ。なるほど、 でも、桁数(数字)を区別するにはどのような構文になりますか? それともcase8で8桁と認識できるんですか? 初心者で恥ずかしい質問ですか、今一度回答お願いします

関連するQ&A

  • If 参加賞 = 1 Then '←

    Access2003 Windows-xpを使っています。 フォーム上に、複数のテキストボックスがあり、そこにコードを書いてあるのですが、、、 現在、「参加賞」のテキストボックスに「1」を入力したとき(If 参加賞 = 1 Then) というようになっていますが、ここを"「0以外の数値」を入力した時"というコードにしたいのですが、どのように書いたらよいのでしょうか? すみませんが、どなたか教えてください。 宜しくお願い致します。 ----------------------------------------- Private Sub 参加賞_AfterUpdate() If 参加賞 = 1 Then '他を0にする i参加賞 = 0 F賞 = 0 E賞 = 0 D賞 = 0 i提案賞 = 0 i努力賞 = 0 idea賞 = 0 End If End Sub ---------------------------

  • VBでの入力値制限について

    はじめまして。 VBのテキストボックスに値を入力していき、ある桁数になるとメッセージを表示する仕組みを作りたいと考えています。 例えばVBで用意したテキストボックスにキーボードで123と入力しキーボードの4を押した直後に「桁数は3桁までです。」というメッセージを表示したいのですがいい方法を教えていただけないでしょうか? 自分で以下のように作ってみたのですがこれだとキーボードで123と入力し次に4を入力した時にテキストボックスに4が表示されてからエラーが出ます。そうではなく4をテキストボックスに表示させずに4をおしたら以下のメッセージが出るようにしたいのです。 よろしくお願い致します。 Private Sub text1_Change() If Len(text1.Text) > 3 Then MsgBox "桁数は3桁までです。", vbOKOnly + vbInformation, "情報" End If End Sub

  • VBA If~Thenの記述

    御教示お願い致します。 ダイアログで売上表に入力する時(数量*単価=金額 計算時)、金額欄の処理を下記のように処理をしたく、試行錯誤しましたが完成出来ません。 得意先マスターのQ列に入力してある、端数処理のコード(1~3)によって処理をしたい 1:円未満四捨五入 2:円未満切捨て 3:円未満切り上げ Private Sub tannka_Change() '金額計算 Dim trg As Range Set trg = Workbooks("マスター.xls").Worksheets("得意先マスター") _ .Range("Q:Q").Find(what:=hasuu.Text, _ LookIn:=xlValues, lookat:=xlWhole) If trg = 1 Then kinngaku.Text = Round(CDec(suu.Text) * CDec(tannka.Text)) Else End If End Sub

  • Accessでのvbaについての質問

    Accessでのvbaを使用したプログラムについてお聞きしたいです。前にも似たようなことを質問していましたが、まだうまくいってません。マスタメンテナンス画面を作成しているのですがテキストボックスの入力チェック が上手くいきません。テキストボックス はコードという名前をつけています。 以下のコードでコーディングしています。 未入力チェック関数 Public Function EmptyCheck(Koumoku As Variant) As Boolean '引数で渡された項目が入力されているかチェック If Koumoku = ""Then EmptyCheck = True Else EmptyCheck = False End If End Function 桁数チェック関数 Public Function NumberCheck(Koumoku As Variant, Number As Integer) As Boolean If Len(Koumoku) <>Number Then NumberCheck = True Else NumberCheck = False End If End Function 半角英数字チェック関数 Public Function ZokuseiCheck(Koumoku As Variant) As Boolean If IsNumeric(Koumoku) = False And Not Koumoku Like "[a-z]*"And Len(Koumoku) <>6 Then ZokuseiCheck = True Else ZokuseiCheck = False End If End Function コード処理 Private Sub コード_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then ' If EmptyCheck(コード) = True Then MsgBox "コードを入力してください。" コード.SetFocus KeyCode = 0 Exit Sub ElseIf NumberCheck(コード, 6) = True Then MsgBox "コードの桁数が不正です。" コード.SetFocus KeyCode = 0 Exit Sub ElseIf ZokuseiCheck(コード) = True Then MsgBox "コードの属性が不正です。" コード.SetFocus KeyCode = 0 Exit Sub Else コード.Locked = True End If End If 上手くいかない点は以下の通りです。 1、テキストボックス(コード)の未入力チェックが上手く行きません。テキストボックスが空白の時も""になったりNullになったり変わるのでIf Koumoku = ""ThenにしてしまうとNullになった時処理されずそのまま次のテキストボックスにカーソルが移ってしまう時があります。なんでNullになったり""になったりで変わるのかも謎です。あと空白の時、Koumoku=""で一致しているにも関わらず、Falseで返されてしまい、未入力処理がされません。IsNullを使ってNull値判定してもKoumoku=Nullで一致してるのにFalseで返されました。 2、桁数チェックも上手く行きません。コード処理の方で桁数チェック関数に6という数字を渡して6桁入力としているのですが6桁でもエラーになってしまう時があります。LEN関数でどのように文字数を測っているのかも よくわからないです。 3.これは単純に半角英数字の判定の仕方が間違っているんだと思いますが、やり方がよく分からず、上手く判定できません。 4.これは入力チェックに当てはまるのですがEnterキーを押した時に処理するようにコードを書いていましたが変な結果が出ます。最初にテキストボックスでEnterキーを押して未入力の時に、「コードを入力してください。」とメッセージが出るのはいいのですがその後入力してもまた同じメッセージが出てきます。ほかのテキストボックスをクリックしてカーソルを移さないと同じメッセージが出続けます。桁数や半角英数字チェックの時も同じです。他のカーソルをクリックしないと次の項目のチェックにいかず、同じエラーメッセージが出続けます。何とかほかのカーソルに移さずに修正したら正しく処理が通るようにできないでしょうか。 5、最後に何も問題なかったらテキストボックスにロックかけるよう処理をしているのですが「コントロールの変更を保存していないときはコントロールをロックできません」というエラーメッセージが出てくる時があります。意味が分からず調べても出てこなかったので意味のわかる方何が悪くてエラーになっているのか教えて下さい。 調べてもデバッグしても原因が分からないものばかりです。 長文になってしまいましたがわかる方よろしくお願いします。

  • エクセルVBAのIf ~ Thenステートメントで

    予約フォームの作成に挑戦しています。 予約日が2022年8月1日の時のみ、シート4に結果を記入して行きたいのですが、 Private Sub CommandButton1_Click() If ListBox1.Text = "44774" Then Sheet4.Select Range("C2").End(xlDown).Offset(1, 0).Select ActiveCell.Value = Reservationform.ListBox2.Value ActiveCell.Offset(0, 1).Value = Reservationform.ListBox3.Value ActiveCell.Offset(0, 2).Value = Reservationform.ListBox4.Value ActiveCell.Offset(0, 2).NumberFormat = Range("C2").NumberFormat Exit Sub End If End Sub で、とりあえず成功しています。 "44774" の部分を、"Sheet6のA2"だった時のみ結果を記入するようにしたいです。 " "の中身をそのまま変えて、 If ListBox1.Text = "sheet6.Range("A2")" Then や If ListBox1.Text = "sheet6.Cells(2, 1).Value" Then に変えてみましたがうまく行きませんでした。 どのようにしたら良いでしょうか?

  • エクセル VBAのチェックボックスについて

    お読みくださり、ありがとうございます。 エクセル初心者でございます。 エクセルのマクロなのですが、 お詳しい方、是非教えて欲しいです!汗 調子に乗って入力フォームなるものを作りました。 入力フォームの中にて、チェックボックスで「ある」「なし」の項目を入れてみたのですが、チェックしていないのに、値が入る現象が起きています汗 以下、素人が書いたコードを恥を承知で記載させていただきます。 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then OK = "○" End If End Sub Private Sub CheckBox2_Click() If CheckBox2.Value = True Then NO = "×" End If End Sub Private Sub UserForm_Click() End Sub '以下のコードは、登録ボタンがクリックされたときの処理! Private Sub 登録ボタン_Click() If TextBox1.Text = "" Then MsgBox "グッズ名を入力してください。" Exit Sub End If If TextBox2.Text = "" Then MsgBox "アプローチ先を入力してください。" Exit Sub End If With Worksheets("協賛グッズ") With Cells(Rows.Count, 2).End(xlUp) .Offset(1, 0).Value = TextBox1.Text .Offset(1, 1).Value = mori .Offset(1, 2).Value = mori2 .Offset(1, 3).Value = TextBox2.Text .Offset(1, 5).Value = TextBox3.Text .Offset(1, 6).Value = TextBox4.Text .Offset(1, 7).Value = TextBox5.Text .Offset(1, 8).Value = TextBox6.Text End With End With TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" CheckBox1.Value = False CheckBox2.Value = False End Sub 以上です。 おかしなところ満載かと思いますが、 チェックを入れた項目だけ値を入れたいと考えております。 おわかりになるかたおりましたら何卒お助けください汗 よろしくお願いいたします。

  • VB6のIF文について教えてください

    VB6でプログラムについて、みなさんアドバイスをいただけませんでしょうか? 現在、下記のような動作をするプログラムを作っていていますがうまくいきません。 テキストボックスに1~100までの数値を400個入力します。 ボタンを押してこのテキストボックスヘ数値を入力したとき、入力した数値が10未満の 場合はメッセージボックスで「NG」と表示。 それ以外は、メッセージボックスで「OK」と表示プログラムを作っています。 ※これは、テキストボックスに数値を入力して、改行を押した際に、毎回OK・NG判定を  して表示する 今下記のように作っているのですが、苦戦しているのは、数値を入力して改行したときに 毎回メッセージボックスが出ず、エラーが出てしまいます。 下記プログラム文をどのように変更すれば、数値を入力して改行したときに毎回上記のよ うな判定できるようになるかご教示頂けませんでしょうか? みなさん教えてください。よろしくお願いします。 Private Sub Command1_Click() Dim moji As String moji = txtInputData.Text     If moji > 10 Then   Msgbox "NG"   Else  Msgbox "OK" End If End Sub

  • エクセル VBA タブストップに対する質問

    初心の質問で申し訳ありませんが、困っていますので、回答をよろしくお願いいたします。 テキストボックス1、2、3をユーザーフォームに配置しています。 テキストボックスはすべてTabStopをTrueにし、TabIndexは順に1、2、3としています。 テキストボックス1にデータを入力後、もしテキストボックス2にデータが入っていれば、テキストボックス3をアクティブにしたいのですが、どうすれば良いのでしょうか? Private Sub テキストボックス1_AfterUpdate() If テキストボックス2.Value <> "" Then テキストボックス3.SetFocus End If End Sub としても、テキストボックス2のTabIndexが2なのでテキストボックス2がアクティブになってしまいます。 どうか、よろしくお願いいたします。

  • ACCESS2003のテキストボックスの最大桁数について

    Access2003のテキストボックスには、MaxLengthプロパティがありません。変わりに以下のような、コードで対応しようと試みたのですが、いまいち動きが悪いのです。以下のコードは、最大4桁までテキストボックスに入力可能とします。 Private Sub txtBox_KeyPress(KeyAscii As Integer)   If Len(txtBox.Text) > 3 Then     KeyAscii = 0   End If End Sub 最大入力桁数4桁を実現していますが、4桁入力後『Insert』キーを押下して、上書きモードでの修正ができません。 以下例1はOKですが、例2が実現できません。 例1:1回目新規入力『12』 ⇒ 2回目修正『123』⇒3回目修正『1234』 例2:1回目新規入力『1234』 ⇒ 2回目修正『9999』 VBのMaxLengthプロパティのようなことはできないのでしょうか?

  • エクセル・マクロでIf Thenの使い方

    このような質問は、ルール(エチケット、マナー)違反になるでしょうか? もしそうならお許し下さい。 名前ボックスに表示される名前を、マクロで非表示にし、元に戻す、という操作を次の二つのボタンで実行するように作りました。エクセル2003です。 Private Sub CommandButton1_Click() Dim tname As Name For Each tname In ThisWorkbook.Names tname.Visible = False Next End Sub Private Sub CommandButton2_Click() Dim tname As Name For Each tname In ThisWorkbook.Names tname.Visible = True Next End Sub これを一つのボタンで、If Then Elseを使い実行できるようにしたいのですが If ・・・ Then の間の書き方が分からずうまくいきません。   If Names.Visible = False Then   If ThisWorkbook.Names.Visible = False Then If ThisWorkbook.tname.Visible = False Then Private Sub CommandButton3_Click() Dim tname As Name If Names.Visible = False Then 'これでは駄目 For Each tname In ThisWorkbook.Names tname.Visible = False Next Else For Each tname In ThisWorkbook.Names tname.Visible = True Next End If End Sub 苦し紛れにこんなことをやってごまかそうとしているのですがこれって邪道ですしかっこうわるいですよね。 Private Sub CommandButton3_Click() Dim tname As Name If Range("g1").Value = " " Then   For Each tname In ThisWorkbook.Names   tname.Visible = False   Next Range("g1").Value = "1" Else   For Each tname In ThisWorkbook.Names   tname.Visible = True   Next Range("g1").Value = " " End If End Sub ど素人ですがよろしくご教導ください。

専門家に質問してみよう