• 締切済み

困っています

ACCESSのフォームにテキストボックスとコマンドボタンをつくり テキストボックスのBeforeUpdateに If Len(Me.テクスト) = 1 Then MsgBox "Error" End If コマンドボックスのClickイベントに MSGBOX "クリック" のように書いたとき テキストボックスに1文字入れてコマンドボタンを押すと 先に "Error"が出てしまいます コマンドボタンをクリックしたときにクリックイベントを先に走らす方法って有るのでしょうか? もしくはテキストの BeforeUpdate か LostFocus イベントでコマンドボタンをクリックしたのを判別する方法って有るのでしょうか? よろしくお願いします

みんなの回答

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

コマンドボタンをクリックしたときに、テキストボックスの入力値の判定をしたい、ということと推測した上で、お答えします。 (見当違いでしたらすみません) テキストボックスのBeforeUpdateイベントには何も置かず、コマンドボタンのOnClickイベントにその内容を記述してはどうでしょうか。 (その上で、Exit Subなどで処理を中止、と)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

>テキストボックスに1文字入れてコマンドボタンを押すと先に "Error"が出てしまいます ボタンをクリックした時に更新前処理などはテキストボックスのイベントが先に処理されます。 メッセージだけ表示するなら更新前処理のイベントにMSGBOX "クリック"を先に記述しないとダメじゃないですか? Private Sub テクスト_BeforeUpdate(Cancel As Integer) MSGBOX "クリック" If Len(Me.テクスト) = 1 Then MsgBox "Error" End If End Sub のように

関連するQ&A

  • テキストボックスが未入力のときメッセージを表示したい

    テキストボックスが未入力のときコマンドボタンを押下したらメッセージを表示させるようにしたいんですができません。 教えてください。 (1)テキストボックスを作成。(txt_入力) (2)コマンドボタンを作成。 下記のようにコードを記述。 Private Sub コマンド45_Click() On Error GoTo Err_コマンド45_Click If Me![txt_入力] = "" Then MsgBox "データをいれろ" End If 以下省略 ""をNULLにしても出来ません。お願いします。

  • Access2010 VBAで文字を数える

    あるデータベースのフォーム内で、テキストボックス内に記載のある任意の文字列の数を数えて変数に格納したいと考えています。 そして、コマンドボタンを押したときに、メッセージボックスで「○件選択しています。」のように表示されるようにしたいと考えています。 色々と検索してみて以下のような記述をしたのですがうまく動いてくれませんでした。(「コンパイルエラー: SubまたはFunctionが定義されていません。」と表示されます。) Dim A As Integer A = Len([txtbox]) - Len(SUBSTITUTE([txtbox], ","))   MsgBox(A & "件の選択しています。") なお、テキストボックス、コマンドボタンは同一のフォーム内においてあります。 また、テキストボックス内で検索したい文字は半角カンマです。 詳しい方がおりましたら、どうぞご教示ください。

  • PickFolder アウトルックとアクセス連携

    アクセスのフォームに テキストボックスとコマンドボタンを置きました。 VBAでoutlookに参照設定をして、 Private Sub コマンド2_Click() Dim myNaSp As NameSpace Set myNaSp = GetNamespace("MAPI") Me.テキスト0.Value = myNaSp.PickFolder Set myNaSp = Nothing End Sub としました。 テキストボックスには、 Private Sub テキスト0_AfterUpdate() MsgBox Me.テキスト0.Value End Sub としました。 しかしoutlookのフォルダ名をPickFolderでテキストボックスに入れても テキストボックスの更新後処理のイベントは発動しません。 しかしテキストボックスにはちゃんとフォルダ名が入っています。 Private Sub テキスト0_Change() MsgBox Me.テキスト0.Value End Sub にしても同じです。 Private Sub コマンド2_Click() Me.テキスト0.Value = "aaa" End Sub にしてコマンドボタンをクリックすると、 Private Sub テキスト0_Change() MsgBox Me.テキスト0.Value End Sub は、発動します。 PickFolderでフォルダ名を選択して値をテキストボックスに入れても イベントを発動させる方法を教えてください。

  • vba なのですが...

    EXCEL の VBA です ActiveX コントロールで テキストボックス があります その、テキストボックス のLostFocus時のイベントなんですが、 標準モジュールで書かれているソースを直接呼びたいです Private Sub TextBox1_LostFocus() から、callするのではなく、 直接 呼び出す方法はあるのでしょうか? おしえてください

  • ユーザーフォーム データ消去の時の処理

    環境:Excel2002です ユーザーフォームのテキストボックスの入力チェックをしています Rem**************** Rem TextBox5 Check Rem**************** Private Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox5.Text) = 0 Then '未入力Check If IsNumeric(Me.TextBox5.Text) = False Then '数値入力Check MsgBox "数値で入力してください", _ vbExclamation, "納品書作成ツール" Me.TextBox5.SetFocus Exit Sub End If MsgBox "入力してください", _ vbExclamation, "納品書作成ツール" Me.TextBox5.SetFocus Exit Sub End If Me.TextBox5.Text = Format(Me.TextBox5.Text, "#,##0") End Sub 入力したデータを消去して Enterキーを押すか、マウスでクリックした時のいずれでも Len(Me.TextBox5.Text) = 0 と認知されて "数値で入力してください"のメッセージが表示されてしまいます このメッセージが出ないようにするにはどうしたらいいのでしょうか ご教示願います

  • Nullの使い方が不正です。

    いつもお世話になっております。 VBAを独学で勉強している者です。 請求処理メニューを作っている最中なのですが、取引先マスターを入力していくフォームの入力値にいくつか機能を持たせることにしました。 取引先コードは10桁文字数で管理されるという設定なので10桁以外で入力した際は、BeforeUpdateイベントでエラーが出るようにし、重複した数値が入力した際もBeforeUpdateイベントでエラーが出るようにしたいのですが、実行してみると【実行時エラー’94 Nullの使い方が不正です。】となります。下記は作成途中のプログラムをコピペしたものです。 ▲がついている部分が黄色く反転しています。 参考書を元に作成していったのですが、エラーがでる原因がわからないためアドバイスをいただきたいです☆  Private Sub 取引先コード_BeforeUpdate(Cancel As Integer) Dim length As Long 'len関数の戻り値  Dim ret As String 'DLookup関数の戻り値。   length = Len(Me!取引先コード) If length <> 10 Then MsgBox "取引先コードは10桁の数値でなければなりません", vbOKOnly + vbInformation, "入力値エラー" Cancel = True Me!取引先コード.SelStart = 0 Me!取引先コード.SelLength = Len(Me!取引先コード) End If ▲ret = DLookup("取引先コード", "取引先マスターT", "取引先コード='" & Me!取引先コード & "'") '重複のチェック If IsNull(ret) Then Exit Sub Else MsgBox Me!取引先コード & " は登録済みです", vbCritical + vbOKOnly, "入力値エラー" Cancel = True Me!取引先コード.SelStart = 0 Me!取引先コード.SelLength = Len(Me!取引先コード) End If End Sub 宜しくお願いいたします。

  • AccessVBAで特定の文字を含むフォルダを開く

    Accessのフォームにテキストボックスを設置し、 ボタンをクリックすると、 そのテキストボックスに入力されている言葉を含むフォルダを開きたいです。 Accessフォームで顧客名簿を作成していて、 サーバー上に顧客名ごと名前のついたフォルダがあります。 Dir関数を使って、 テキストボックスに「山田花子」と入力してボタンクリックすると、 「山田花子」を含むフォルダが存在するかどうかを メッセージボックスで知らせる、というところまではうまくできました。 コードは以下です。 Dim MyPath, MyFullPath MyPath = "\\×××\×××\×××\" MyFullPath = Dir(MyPath & "*" & [テキストボックス] & "*", vbDirectory) If MyFullPath = "" Then MsgBox "存在しません" Else MsgBox "存在します" End If End Sub この先、存在するならばそのフォルダを開くようにしたいです。 どうにかしてそのフォルダのフルパスを取得したいのですが その方法がわかりません。 そもそもDir関数は必要なかったのか・・・そのへんもよくわかりません。 ご教授お願いいたします!

  • 効率の良いテキストボックスの検知について

    VB6の初心者です。質問させていただきます。 画面上に5つのテキストボックス(TEXT1、TEXT2、TEXT3、TEXT4、TEXT5)と 1つのコマンドボタン(Cmd_SAVE)があり、 画面上の5つのテキストボックスをすべて記入し、 コマンドボタンを押すと、登録確認のメッセージボックスが表示され、 OKボタンを押すと、サーバへ転送され、 画面上のテキストボックスにひとつでも空欄があると、どのテキストボックスが 空欄であるかを示すメッセージが表示される処理をさせています。 そこで質問なのですが、今、メッセージボックス、登録処理は出来るようになったのですが、 とても処理の効率が悪い、もっと空欄を確認するのにすっきりとしたコードはある、と知り合いに言われました。 おそらく、繰り返し等を用いると思うのですが、メッセージにそれぞれのオブジェクト名を代入するやり方がわかりません。 下記が今のコーディングです。 Private Sub Cmd_SAVE_Click()   If TEXT1.Text = "" Then      MsgBox "TEXT1が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT2.Text = "" Then      MsgBox "TEXT2が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT3.Text = "" Then      MsgBox "TEXT3が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT4.Text = "" Then      MsgBox "TEXT4が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT5.Text = "" Then       MsgBox "TEXT5が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If MsgBox("入力データを登録しますか?", vbOKCancel, "登録確認") = vbCancel Then     Exit Sub   End If   End If ~登録処理~ End Sub どのような書き方がきれいで、効率的なコーディングなのでしょうか? ご教示お願いします!

  • ユーザーフォームが閉じたいのですが

    皆様こんにちは。 ExcelVBAを使ってユーザーフォームを作っています(初心者)。 どうしてもわからないので教えてください。 ちなみに、以下のように組んでいます。 Private Sub 商品区分txt_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If IsNumeric(商品区分txt) = False Then   MsgBox "商品区分は数値を入力してください", , "商品区分エラー"   Cancel = True   Exit Sub End If If 商品区分txt < 1 Or 商品区分txt > 100 Then   MsgBox "商品区分は1~100までの値で入力してください", , "商品区分エラー"   Cancel = True   Exit Sub End If End Sub 説明させていただくと、「単価変更」というボタンを配置しています。 そのボタンをクリックするとユーザーフォームが立ち上がります。 商品区分と単価変更率を入力するテキストボックスがあります。 両方を入力後「単価変更実行」というボタンを押すようになっています。 すると指定した商品区分の商品の単価が変更されるようになります。 ちなみに、「終了」ボタンもあります。 商品区分は1~100まであり、その範囲外の場合と数値以外が入力された場合はエラーメッセージがでるようになっています。 たとえば、商品区分に200を入力するとメッセージが出て次のコントロールにいけないようになっています。 そこで200を消します。そして、「とりあえず終了したい」となり、終了ボタンを押してもエラーメッセージが出てしまいます。 このメッセージは出したくありません。 出さないようにするにはどうしたらいいでしょうか? BeforeUpdateじゃなく何か別のイベントを選ぶといいのでしょうか? ちなみに、終了ボタンはUnload Meとしてあるので通常は閉じることは可能です。 長文ですみません。よろしくお願いします。

  • メッセージボックスについて

    メッセージボックスが消えなくて困っています。 以下のように記述して、TextBox1に文字を4文字入力しないとメッセージボックスが現れますが、OKを押してもメッセージボックスがまた現れてしまい、s1_strの入力側のウィンドウに戻ることができません。 どうしたらいいでしょうか? Do s1_str = TextBox1.Text If (Len(s1_str) = 4 ) = False Then MsgBox("4文字入力してください",MsgBoxStyle.OKOnly, "エラー") End If Loop While (Len(s1_str) = 4 ) = False