AccessVBAで月を2桁で入力させたい

このQ&Aのポイント
  • Access2000で日付をフォームから入力させる際、月を2桁で入力させたい方法を教えてください。
  • VBAコードを使用して、テキストボックスに入力された月の桁数を確認し、2桁でない場合にエラーメッセージを表示します。また、GotoControl関数を使用して、フォーカスを正しいテキストボックスに戻すようにしてください。
  • 入力された値が1桁か3桁以上の場合にエラーメッセージを表示し、2桁の場合には次のテキストボックスにフォーカスを移動させません。
回答を見る
  • ベストアンサー

AccessVBA で月を2桁で入力させたい。

質問します。 Access2000で日付をフォームから入力させます。 日付は月と日に別れています。その月フォームで「8」と入力するのではなく「08」と入力させたいのです。 (月はテキストボックスです。) そこで以下のようなVBAを書きました。 Private Sub 月_Exit Dim MM As Variant MM = Len(Me!月) If MM = Not 2 Then Msgbox "2桁で入力してください。" Docmd.GotoControl ("月") End if そうしたら、「8」といれても、「08」と入れても メッセージが表示されてしまいます。 さらにGotoControlが効いておらず、次の日付テキスト ボックスにフォーカスが移動してしまうのです。トホホ・・ こんな初歩的な質問でお恥ずかしいのですが・・・ 回答お待ちしております。

noname#12495
noname#12495

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

  • ベストアンサー
  • ducati
  • ベストアンサー率29% (308/1062)
回答No.2

なんでしたら、1桁で入れられたら2桁に直して代入させちゃったらどうでしょう? If Len(Trim(MM)) = 1 Then Me!月 = "0" & MM End If それと、Variantはあまり使わないほうがいいですよ。 余計なエラーの原因になります。 フォーカス移動はSetFocus使ったらどうでしょうか? 例えば、月のテキストボックス名が「txtMonth」なら txtMonth.SetFocus 現状のままでいくなら = Not 2 の部分を <> 2 で試してみてください。

noname#12495
質問者

お礼

ご指導、ありがとうございます。 ユーザに2桁にしろと命令するより、自動で2桁にしてあげたほうがいいですね。ということで自動更新のほうを使わせていただきました。 今回の例は他でもたくさん活用できそうです。 しかし、「Setfocus」はうまく出来ませんでした。 また、勉強します。 ありがとうございました。

その他の回答 (1)

noname#27115
noname#27115
回答No.1

MM = format(Me!月,"00") でいけるような・・・

関連するQ&A

  • VBAのGoToControl について

    お世話になります。 フォームで値が入力されないで、フォーカスが移動したら メッセージを表示させ、そのテキストボックスに移動する というのを行いたいのですが表示させることは出来るのですが どうしても次のテキストボックスに移動してしまいます。 :この場合は次のテキストボックスに移動してしまいます DoCmd.GoToControl "テキスト1" :この場合だとForms!入力画面!物テキスト1という名前のフィールド はありませんとエラーになります。 DoCmd.GoToControl "Forms!入力画面!物テキスト1" 標準モジュールで記述し、テキスト1からフォーカスが離れるときに 呼び出しています。 よろしくお願い申し上げます。

  • Accessテキストボックスの未入力チェック

    いつも参考にさせて頂いております。 Accessテキストボックスの未入力チェックで上手くいかず悩んでいます。過去の情報等調べましたが、わかりませんでした。 どなたか宜しくお願い致します。 フォーム1にテキストボックス1、ボタン1があります。 テキストボックスを何も入力せず、Enter等で移動する時にチェックをかけたいです。 もし、テキストボックスに何も入力がなかったら、メッセージを出し、フォーカスをテキストボックスに戻す。 何か入力があれば、ボタンにフォーカスが移動する。 If IsNull(Me.テキストボックス1) = "" Then msgbox "未入力です。" Me.テキストボックス1.SetFocus End If 宜しくお願い致します。

  • エクセルVBAのテキストボック、Exitイベント

    エクセルのVBAで簡単なデータ登録のマクロを作成しています。 フォームのテキストボックスに入力した値を、エクセルシートに展開する程度の機能です。 製品コードを必須にしており、製品コードが入っていない時はエラーメッセージを表示します。 製品コードが入力されていないときは、製品コードのテキストボックスにフォーカスがあたったままにしたく、ネットで調べてExitイベントに以下の処理を作成しました。 Private Sub mySeiCD_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim myMsgBoxValue As String If Len(mySeiCD.Value) = 0 Then myMsgBoxValue = MsgBox("製品コードは入力必須です。" ,vbOKOnly, "製品コード未入力") Cancel = True End If End Sub 製品コード未入力の際にフォーカスはそのままになりましたが、フォームを閉じることができなくなりました。 閉じるボタンを押しても、Exitイベントにひっかかてしまいます。 当然の動きと思いますが、回避する方法はありませんでしょうか? Exitイベントを使わずに、SetFocus を使った場合は、どうしても、次のテキストボックスにフォーカスが移動してしまいました。 以上、長くなりましたが、よろしくお願い致します。

  • エクセルVBA テキストボックスへのセットフォーカスについて

    エクセルVBAでユーザーフォーム内に配置されたテキストボックス への数値の入力時に、指定範囲内になければメッセージボックスで 規格外であることを警告し、その規格外が入力されたテキストボックス を強制的に空欄にし、次のテキストボックスにフォーカスを移動させずに、入力間違いのテキストボックスにフォーカスを戻したいのですが どうすればよいのでしょうか? 自分で考えた構文です。 Private Sub TextBox1_AfterUpdate() Dim A As Single A = TextBox1.Text If A < 1.99 Or A > 3.00 Then MsgBox "規格外!!"     TextBox1.Text = "" TextBox1.SetFoucus End If Exit Sub End Sub これですと、次のテキストボックスにフォーカスが移動してしまいます。 次のテキストボックスにフォーカスを移動させずに、規格内の値が 入力されるまでフォーカスを移動させない方法を教えて下さい。 お願い致します。

  • EXCEL VBA---IsDate

    お知恵をお貸し下さい。 VBAでフォームを作成し、テキストボックスに数字(日付)を入力 (入力→10/7, 表示→2005/10/07) それを、IsDateで日付かどうかチェックさせたいのですが 下記のコードでは、例えば10月35日と入力してもエラーになりません。 (入力→10/35, 表示→1935/10/01) 2005/10/35と入力すればエラーになってくれるのですが やはりこの方法しかないのでしょうか? もし、良い方法がありましたらお教え下さい。 よろしくお願いします。 ----------------------------------------------------------------- Sub Test() Dim Data As Variant Data = TextBox16.Text If IsDate(Data) Then TextBox16.Value = CDate(Data) Else MsgBox ("正しい日付を入力してください。") End if End sub -----------------------------------------------------------------

  • ACCESS

    現在以下のシステムを検討しています。 (1)ログインフォームと(2)トップフォーム(3)注文フォームが別々に存在しており、 (1)ログインフォームは  ・ログインID入力用のテキストボックスが一個  ・パスワード入力用のテキストボックスが一個  ・ログインボタンが1個  設置されています。 以下はログインボタンクリック時に動作するプログラムです。 Private Sub cmdLogIn_Click() Dim Res If IsNull(Me.txtID) Then MsgBox "IDを入力してください" Me.txtID.SetFocus Exit Sub End If If IsNull(Me.txtPass) Then MsgBox "パスワードを入力してください" Me.txtPass.SetFocus Exit Sub End If Res = DLookup("パスワード", "T顧客", _ "顧客ID='" & Replace(Me.txtID, "'", "''") & "'") If IsNull(Res) Then MsgBox "該当するIDはありません。正しいIDを入力してください。" Me.txtID.SetFocus Exit Sub End If If Res = Me.txtPass Then DoCmd.OpenForm "注文フォーム" '----ID,pass合致でフォームを開く。 Me.txtID = Me.txtID2 Me.txtPass = Me.txtPass2 DoCmd.Close acForm, "Fログイン" Else MsgBox "パスワードが異なります。", vbOKOnly + vbCritical Me.txtPass.SetFocus End If End Sub (2)トップフォームは  商品のリストが画像付き(商品一個につき画像一個)  で示され、画像を押すと商品別に作成してある注文フォームに進むのですが、  ログイン完了していないとログインを促すメッセージが出て注文フォームが開かないよう  にしています。  トップフォームにはテキストボックスを2個不可視の状態で配置しております。  以下は商品画像に埋め込んであるコマンドです。 Private Sub 商品画像 1_Click() Dim Res If IsNull(Me.txtID) Then MsgBox "ログインしてください" Exit Sub End If If IsNull(Me.txtPass) Then MsgBox "ログインしてください" Exit Sub End If If Res = Me.txtPass Then DoCmd.OpenForm "商品名" '----ID,pass合致で注文フォームを開く。 End If End Sub   (3)注文フォームは  ・数量選択のコントロールボックス  ・注文ボタン  ・キャンセルボタン  を設置しています。 【以下が質問内容になります】 「ロフインフォーム」内の入力値(テキストボックスに入力されていたIDやパスワード値)を注文フォーム内のテキストボックスに取得させる(あるいは設定させる)にはどのようにすればよいのでしょうか? 注文フォームにはテキストボックス2個( ID入力用と Password入力用)を不可視で配置しています。こちらのテキストボックス2個については手動入力は行わず、注文フォームが開いた際にログイン時の ID, Paswordがテキストボックスの中に自動的に入力あるいは設定されるようにしたいのですが、どのようにすればよいかがわかりません。 因みにログイン ID,Passwordは複数セットあり、ユーザーがログイン完了後、注文フォームを閉じるまでの間は 同一のID, Paswordの内容を保持したいと考えています。 上記の中にID,Paswordを保持させるようなコードを入れることは可能でしょうか? 注文フォームを開く際のコードに何か入れることができるのではないかと考えていたの ですが、よい案が浮かびません。 他によいやり方などがあれば教えていただけますでしょうか? よろしくお願いします。

  • アクセスの印刷VBAを教えて下さい

    アクセス初心者です。 バージョンは2002を使っています。 ネットで探して詳しく分からないままプログラムしています。 フォームで印刷のコマンドボタンを作ってそのボタンをクリックすると表示されてる 1ページのみ印刷したいのですが全てのレコードが印刷されてしまいます。 どうすればいいのか教えて下さい。 下記が今現在のVBAです。 Private Sub 印刷_Click() Dim varCopies As Variant varCopies = InputBox("部数を数字で入力してください", "印刷部数の指定") If Len(varCopies) = 0 Then Exit Sub End If If IsNumeric(varCopies) = False Then MsgBox "部数は数字で入力してください", vbOKOnly + vbCritical, "入力エラー" Exit Sub ElseIf CLng(varCopies) = 0 Then MsgBox "部数は0以上で入力してください", vbOKOnly + vbCritical, "入力エラー" Exit Sub End If If MsgBox("印刷しますか?" & vbCrLf & "部数=" & varCopies _ , vbYesNo + vbInformation, "印刷の確認") = vbYes Then DoCmd.OpenForm "伝票", acPreview, , , acFormReadOnly DoCmd.PrintOut acPrintAll, , , , CLng(varCopies) DoCmd.Close acForm, "伝票" End If End Sub

  • 年齢の計算について

    いろいろ調べましたが、なかなか分からないので質問させていただきます。 エクセルのVBAでユーザーフォーム内にテキストボックスを3つ配置しました。 それぞれのテキストボックスは以下のようにしています。 テキストボックス1 基準日の入力 (2012/4/1 など) テキストボックス2 生年月日の入力 (1980/5/10 など) テキストボックス3 基準日での年齢を表示(自動表示) テキストボックス1、2に日付を入力した場合にテキストボックス3に年齢が自動で表示される といった内容です。 そこで、以下のようにプログラムしましたが、基準日を過ぎた日付をテキストボックスに入力して しまった場合にエラーになって止まってしまいます。 そこで、テキストボックス2にテキストボックス1の基準日を過ぎた日付を入れてしまったときに エラーメッセージがでるようにしたいのですが、どうすればよいでしょうか? また、文字などを入れてしまった場合には、エラーメッセージが出ますが、和暦(例:60/4/10) など入れてしまった場合にもエラーになり止まってしまいます。 このような場合(yyyy/mm/dd以外の入力の場合)にもエラーメッセージが出るようにするには どうすればよいでしょうか? Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) If TextBox2 = "" Then Exit Sub Else If Not (IsDate(Me.TextBox2)) Then MsgBox "日付を入力してください" & Chr(10) & "例(2002/4/1)", vbCritical TextBox2 = "" Cancel = True Exit Sub Else TextBox3.Value = Evaluate("datedif(""" & TextBox2.Value & """,""" & TextBox1.Value & """,""y"")") End If End If End Sub 何卒よろしくお願いします。

  • エクセル2003 ユーザーフォームにてフォーカスの有無の判断

    いつも勉強させていただいております。 今回、エクセルのユーザーフォームを用いて、入力画面を作成 しております。 で、日付を入力するテキストボックスが2箇所有り、 その入力をMSフォームカレンダーから入力させようと 考えております。 この日付を入力するテキストボックスは、それぞれ異なる 日を入力させたいのですが、カレンダーをクリック したときに、フォーカスの在る方に入力する形を考えています。 でご質問なのですが、 「フォーカスの在るほうに」 と言う分岐コードの書き方がわかりません。 宜しくお願いいたします。 Private Sub Calendar1_Click() 'if textbox3にフォーカスが在るならば<<書き方がわかりません TextBox3.Value = Calendar1.Value end if 'if textbox4にフォーカスが在るならば<<書き方がわかりません TextBox4.Value = Calendar1.Value 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関数は必要なかったのか・・・そのへんもよくわかりません。 ご教授お願いいたします!

専門家に質問してみよう