• 締切済み

VBAのモーダル画面作成と日付判定について

AccessのVBAで日付判定をするやり方とモーダル画面遷移のやり方を知りたいです。 テキストボックスの中に入っている文字列をyyyy/mm/dd形式に表示を変換したいです。 20210623とかは下記のコードで変換出来て、それは良いのですが適当に打った数字「325464」とか「2021/0918」を打つと「型が一致しません」、「オーバーフローしました。」と出てきてエラー文が出てしまいます。エラー文は出したくないのでif文のElseで日付以外の文字列だったら何も処理をせずそのままの表示((yyyy/mm/dd)という表示に変換はせずそのまま)という処理をしたいですがうまくいきません。IsDate関数もyyyymmdd形式は日付として認識してくれないので使えませんでした。 下記のコードは元になったコードです。 Private Sub 日付_AfterUpdate() 日付= CDate(Format(日付, "@@@@/@@/@@")) End Sub モーダル遷移に関しては、メインフォームの検索ボタンを押したら「検索」画面にモーダルで遷移するようにしたいです。 下記のコードでは一応モーダルで画面遷移するのですが、×ボタンで検索画面だけ閉じようとしたらメインフォームも一緒に閉じてしまいます。あと、なにもフォーカスを当ててない時にメインフォームでエンターキー押すと勝手に検索画面が出てくるという謎の誤作動起こしてます。 Private Sub 検索_Click() Dim ReserchForm As String ReserchForm = "検索" DoCmd.OpenForm ReserchForm, , , , , acDialog Me.Visible = False End Sub どちらもどうコードを直したらいいか分かりません。

みんなの回答

  • kkkkkm
  • ベストアンサー率65% (1625/2467)
回答No.1

IsDate関数の引数が適切ではない。 アクティブなフォームのコントロール全てにフォーカスを当てない事ができるのか考えてみよう Me.Visible = False が何を意味するのか考えてみよう。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA テキストボックスで日付を変更するとエラー

    VBAにて、ユーザーフォーム上のテキストボックスに初期値として今日の日付が入力されており、さらにそれを任意で変更するというマクロを作成しようとしています。 'テキストボックス2に初期値として今日の日付を入力 Private Sub UserForm_Initialize() TextBox2.Text = Format$(Date, "yyyy/mm/dd") End Sub 'テキストボックス2に入力された日付はdenpyoudateという変数に格納される Private Sub TextBox2_Change() denpyoudate = UserForm2.TextBox2.Value End Sub 入力された日付を変数として利用したいので、上記のようなコードにしたのですが、実際に初期値である今日の日付を編集すると「型が一致しません」というエラーが出てしまいます。 このエラーを回避し、テキストボックスに入力された日付を変数として使用するにはどうすればよいでしょうか?

  • 日付型のテキストボックスに数値を入れて日付にしたい

    アクセスのフォームの上にテキストボックスがあり、 書式はyyyy/mm/dd(aaa)になっています。 日付型の値を入力した際は問題ないのですが 例えば、20130720と入力したら、 このフィールドに入力した値が正しくありません。 例えば、数値型のフィールドに文字列を入力しました。 となります。 なので、 Private Sub 日付_BeforeUpdate(Cancel As Integer) If Len(Me.ActiveControl.Value) = 8 Then Me.ActiveControl.Value = Format(Me.ActiveControl.Value, "yyyy/mm/dd") End If End Sub としてみたのですが、 更新前処理イベントが発動する前に、 「このフィールドに入力した値が正しくありません。 例えば、数値型のフィールドに文字列を入力しました。」 のエラーが出てしまうようです。 20130720の形の日付を入れても自動で日付型に変換するの方法はありますか?

  • Access2013 VBA 複数の画面の遷移

    複数の画面のメニューの遷移をスル場合、みなさんは、フォーム名をベタ書きで書いてらっしゃるのでしょうか。それとも、遷移元のフォームの名前を取得して戻るボタンをおした時に、そのフォームをVisible = trueにしたりしているのでしょうか。 私の場合には、ModuleにPublicで宣言した各フォームの階層事の変数に遷移元の名称の場合にだけ、そのフォームの名前を変数に保存して、戻るボタンでそのフォームを表示する処理をしています。 Private Sub Form_Load module.Public変数 = module.Public遷移元の画面名 End Sub Private Sub Cmd戻るボタン Forms(module.Public遷移元の画面名).visible = true DoCmd.Close acForm, Me.Name End Sub しかし、この画面の階層毎に変数をつくり、それに遷移元の画面名をセットするのも面倒くさいやり方で、これよりも何か楽な汎用性のあるやり方はありますでしょうか? よろしくお願いします。

  • エクセル シート上TextBox(日付)

    Sheet上にTextBox=”hiduke”とする このBookを開いた時に 現在に日付にしたいのですが どのようにしたら良いのでしょうか? Private Sub Worksheet_Activate() ならSheetをアクティブにしたら現在の日付に なるのですが・・Bookを開いた時に 現在の日付にしたいです。 すいません教えて下さい。 Private Sub Workbook_Open() Me.hiduke.Value = Format(Now(), "yyyy/mm/dd") End Sub

  • VBA publicで日付が呼び出せない

    VBAにて、ユーザーフォーム上のテキストボックスに初期値として今日の日付が入力されており、さらにそれを任意で変更することも出来、最終的なテキストボックスの値を変数に格納するというマクロを作成しようとしています。 'テキストボックス2の初期値を今日の日付とする Private Sub UserForm_Initialize() TextBox2.Text = Format$(Date, "yyyy/mm/dd") 'テキストボックス2の値が日付かどうかチェック Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If IsDate(TextBox2.Value) Then DenpyouDate = TextBox2.Value Else TextBox2.Value = "" MsgBox ("日付が不正です") TextBox2.Text = Format$(Date, "yyyy/mm/dd") End If End Sub '他のモジュールでdenpyoudateを使用し、指定のセルに和暦形式で入力する Public DenpyouDate As Date Sheets("伝票").Range("A10").Value = Format(DenpyouDate, "e") Sheets("伝票").Range("C10").Value = Format(DenpyouDate, "m") 「ユーザーフォームのテキストボックスに初期値として日付を表示させ、その最終的な値を変数として格納、別のモジュールで呼び出してセルにセットする」というイメージです。 このマクロを実行した際、初期値である今日の日付を任意の日付に変更した場合は、問題なくそのままの値がセルにセットされるのですが、初期値のまま実行すると、その数値が反映されません。 ローカルウィンドウをチェックすると、ユーザーフォームの時点では、テキストボックスの初期値がきちんとdenpyoudateに格納されているのですが(例:2009/11/24)、それを別モジュールで呼び出した時は、denpyoudateの値が(#0:00:00#)になっており、これが原因だと考えています。 このエラーを回避し、初期値の場合でも値がきちんとセルにセットされるようにするには、どうしたらよいでしょうか?

  • コンボボックスに今日を含む、4日前までの日付を表示したい

    ただいまVB6.0を勉強中です。 コンボボックスについて質問なのですが、 フォームを開いたらコンボボックスに 今日から(フォームを開いたときから)数えて4日前までの日付を、 ドロップダウン形式で表示したいのですが・・・。 どのような考え方、コーディングをすればよいでしょうか? 理想は下記のような感じです 2009-10-06▽(フォームを開いた日) 2009-10-05 (1日前) 2009-10-04 (2日前) 2009-10-03 (3日前) 2009-10-02 (4日前) 今現在、フォームを開いた際に コンボボックスに本日の日付しか表示することしかできません。 Private Sub Form_Load() ComboBox1 = Format(Now, "yyyy-mm-dd") End Sub ご教授のほど、よろしくお願いいたいます

  • Excel vba 日付の形式判定

    Excelに日付、開始時間の列があります。 セルの形式をチェックしたいのですが、形式が下記のとおりであるか どう記述すればいいのでしょうか? 日付チェックはisdate関数を使いますが、日付の形式がyyyy/mm/dd、時間の形式がhh:mmであるかの 判定方法を教えてほしいです。 例) 日付    時間  2021/05/01 10:00  H33/05/01   ← yyyy/mm/dd形式でない為、NG   10時00分 ← hh:mm形式でない為、NG 

  • エクセル シート上のTextBox(日付)

    今まではForm上にTextBoxを貼り、スピンボタンにて日付を変化させるのは できるのですが、これをシート上で日付を動かすと どのような記述の変化が必要なのでしょうか? TextBoxはhidukeという名でしています!日付は出るのですが スピンボタンは動きません! すいません教えて下さい! Private Sub SpinButton1_SpinDown() Me.hiduke.Value = DateAdd("d", -1, Me.hiduke.Value) End Sub Private Sub SpinButton1_SpinUp() Me.hiduke.Value = DateAdd("d", 1, Me.hiduke.Value) End Sub Private Sub hiduke_Change() Me.hiduke.Value = Format(Now(), "yyyy/mm/dd") End Sub

  • VBAの処理待ち画面について

    こんにちは VBAの初心者なんです。  VBAのデータ検索処理、超時間がかかりそうです。ですが、検索ボタン押下時に、処理待ち画面を表示させ、検索が終ったら、処理待ち画面を 閉じる仕様になりました 下記のように、なかなかうまくいけませんでした。 Private Sub CommandButton1_Click() 'userform6は処置待ちフォーム userform6.show '検索処理 検索処理() userform6.hide end sub ご存知の方がいらっしゃいましたら、ぜひ、お力を貸していただきたい......

  • エクセルVBA

    こんばんは。 いつも拝見しています。初歩的でしょうが私ではまだ 解決できません。ご指導いただきたく思います。 ユーザーフォームにテキストボックスとスピンボタンを設置し日付を 変更するようにしています。ユーザーフォームを開くと今日の日付に 変わってしまいます。C2とリンクしテキストボックスに先に値を 取得するにはどうしたらよいでしょうか。お願します。 Private Sub spnDate_SpinDown() Dim dtDate As Date dtDate = UserForm1.txtDate.Value UserForm1.txtDate.Value = Format(DateAdd("m", -1, dtDate), "yyyy/mm") End Sub Private Sub spnDate_SpinUp() Dim dtDate As Date dtDate = UserForm1.txtDate.Value UserForm1.txtDate.Value = Format(DateAdd("m", 1, dtDate), "yyyy/mm") End Sub Private Sub txtDate_Change() Range("c2") = txtDate.Value End Sub