• ベストアンサー

AccessのVBAでの日付の計算の記述のしかた

AccessのVBAで日付の計算をしようとしています。 DateAdd("m",6,Date()) と入力するとコンパイルエラーになります。 どこが間違っているでしょうか。 マクロウィンドウで値の代入とかやっていたときは、これでできていた気がします。 VBAだと記述の仕方が変わるんでしょうか。 実際は、「6」とか「Date()」のところに フィールド名を入れたいのですが、それって可能でしょうか。 ものすごく初歩的な質問だとおもいますが、 回答よろしくお願いします。

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

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

・「テキスト1」が「6」に該当する値 ・「テキスト2」が「Date()」に該当する値 と仮定し、「ボタン1」がクリックされた時に、 ・「テキスト3」に「DateAdd("m", 6, Date())」に該当する値 を代入するとします。 補足を読むとイベント発生時のコードの書き方はご存知のようなので、 単刀直入にコードだけ記述します。 ==== Code ==== Private Sub ボタン1_Click() Me.テキスト3.Value = DateAdd("m", Me.テキスト1.Value, Me.テキスト2.Value) End Sub ==== end of Code ==== DateAdd()した値をテーブルのフィールドに反映させたいのなら、 「テキスト3」のコントロールソースを該当するフィールドにすればいいと思います。 (コントロールソースはプロパティの「データ」タブで設定します。 また、「テキスト3」を見えなくすることも可能です。)

noname#50871
質問者

お礼

ありがとうございます。うまい具合にいきました。 DateAdd関数の記述だけではダメなんですね。 同時にそれを項目に代入しないからエラーになってたようです。 レベルの低い疑問につきあっていただいて ありがとうございました。

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

その他の回答 (2)

回答No.3

記入漏れです。申し訳ない。 「テキスト1」「テキスト2」「テキスト3」はテキストボックスの名前 「ボタン1」はボタンの名前 です。

noname#50871
質問者

お礼

ご丁寧にどうも。 重ねてありがとうございます。

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

これだけでは何とも言えないですね。 DateAdd("m",6,Date())自体の記述には問題がありません。 これをどこに記述しているのか (クエリのフィールド?フォームの式ビルダ?フォームのコード ビルダ?) コンパイルエラーと言っているので、おそらくコード ビルダなのでしょうが、 どのようなエラーメッセージなのか、どのようなコードを書いているのか きちんと説明すべきですね。

noname#50871
質問者

補足

早速ありがとうございます。説明不足ですみません。 フォームの中にコマンドボタンを設定して、 それのイベントのクリック時のところでコードを記述してます。 DateAdd("m",6,Date())と記述して他の行に移ろうとすると、 「コンパイルエラー」と表示され、記述した行の文字が赤くなります。 それと、私が最初の質問で<実際は、「6」とか「Date()」のところにフィールド名を入れたい・・・>としていましたが、 フィールド名ではなく、フォームのテキストボックス名の間違いでした。 最初にテキストボックス名を入れてやってみたところ、コンパイルエラーが出ました。 テキストボックスの記述の仕方がおかしいのかもしれないと思い、 まず試しにDateAdd("m",6,Date())とシンプルな記述にしてみたのです。 うまく説明ができていないかもしれませんが、 よろしければ再度回答お願いします。

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

関連するQ&A

  • ACCESSの日付について

    こんにちは。 Access2000を使用しています。 フォームで、完了のチェックをしたときに[完了日]のフィールドに 今日の日付を取得するようにしたいのですが、 (1)マクロで、値の代入-[完了日]のフィールドに=Dateで  日付を入れるようにしました。 (2)フォームのチェックボックスをクリックすると、上記のマクロが  実行されるようにした。 を行うと、1899年などという日付がでてきます。 パソコンの内蔵時計を確認しましたが、2002年の今日の日付に なっています。 どなたかよろしくお願いします。

  • Access上にある日付をコピーしたい場合

    Access2000のユーザーです。 初心者に近い為理解が遅いかもしれませんがよろしくお願いします。 お尋ねしたいのは、コピーの方法です。 データの入力フォームを作っており、フォームヘッダーに日付を入力させ、同じ日付で何度も違う得意先のデータを入力する為最初に入力した日付を各レコードにコピーさせたいと思います。 マクロで値の代入を使ってコピーができないかとやってみましたが日付フィールドには日付が入っていませんでした。マクロではなくVBAでないと無理であれば初挑戦してみたいと思いますが、どの様に記述すればよいのかさっぱり・・・といった状態です。 このような説明で伝わるか不安ですが、よろしくお願いします。

  • アクセスのDMAXをVBAで記述したい

    今は、マクロで値の代入を使い アイテム=[ID] 式=DMax("ID","テーブル名")+1 として連番の次の番号を振ろうとしています。 これと同じことをVBAでやるにはどのように 記述すれば良いのでしょうか。 宜しくお願い致します。

  • Access2000VBAで前に記述したコードが終わる前に次に進みます・・・

    フォームを開いた後、Msgboxを表示させたくて、Access2000VBAのOpenイベント又はLoadイベントに、Msgboxを記述しました。 ところが、フォームが開く前にMsgboxが表示されてしまします。フォームが開いた後Msgboxを表示させるためにはどうしたらよいのですか? また、ADOで接続したテーブルの数値型フィールドの合計値を計算して、計算結果をテキストボックスに代入するコードを記述した後、このテキストボックスの値をMsgboxに表示させるコードを記述たところ、計算を終える前にMsgboxが表示されてしまいます。 前のコードが確実に実行された後、次のコードの処理に進む様にするにはどうすればよいのですか?

  • VBAのプログラムとシートでの計算の速度

     現在、エクセルVBAでマクロを組んでいます。 マクロで算出した値を、セルを指定して、シートに代入しています。シートの代入する理由は、途中の計算結果の確認とエクセル関数を利用し、マクロの簡便化を図りたいためです。  代入した値を基にして、エクセル関数を使った結果の値を、他のセルに表示(代入)していますが、VBAで、その結果の値を、利用しています。  お聞きしたいのは、最初にシートに代入してから、エクセル関数の結果を得られる前に、VBAが、値を取得しないかどうか心配です。  素人考えでは、同じエクセル上で動作しているので、エクセル関数の計算終了後に、VBAが動くと思いますが。どうでしょうか?

  • VBA での日付の計算

    お世話になってます。 Access VBA 初心者です。 string型変数に日付(YYYYMMDD)がセットされています。 その日付に1日プラスした日付を算出したいのですが、 どうすればよいのかよく分かりません。 たとえば Dim w_Date As String w_Date = "20070726" としたならば、 w_Dateは"20070727"となるようにしたいのですが。。。 よろしくお願いいたします。

  • VBAで日付と時刻の計算に困っています

    すでに入力されている日本の日付と時刻を、欧州の日付と時刻に変換する というようなマクロを組みたいです。 もう少し具体的にいうと、 日本の日付と時刻が 2011/06/12 07:15:20 というような形式で入力されているセルA1があり、 そのセルA1を選択している状態でマクロを実行すると、 セルに入力されている日付と時刻を欧州の日付と時刻に変更する というマクロです。 セルA1の日付を例にすると、マクロを実行したら時差である9時間を減算して、 2011/06/11 22:15:20 という値が返ってくるようにしたいです。 DateAdd関数を使用して時刻を-9時間することはできたのですが、 時刻のみが-9時間されるだけで日付は変更できませんでした。 もしよろしければ、時間を減算しただけで日付も減算してくれるような マクロの組み方を教えていただけないでしょうか。

  • 日付時刻型の比較

    お世話になります。コンピュータ歴が短いもので質問の意味がよくわからないかもしれませんがよろしくおねがいします。 accessのDB「テーブル1」に日付時刻型のフィールド「フィールド1」があり、 2001/00/00 00:00:00の形式でデータが入っています。 テーブル1のデータで、1ヶ月前のデータより新しいもののみをVBScriptで抜き出したいのですが、下記のようにDATEADD関数で変数1に1ヶ月前の日付を代入し、それと比較しようとしましたが、うまくいきませんでした。 変数1 = DATEADD("m" ,-1 ,NOW) Set rs = Server.CreateObject("ADODB.RecordSet") sql = "SELECT * FROM テーブル1 WHERE フィールド1 >= 変数1" 変数1をResponse.Writeすると見た目は同じ形式で入っていました。 変数1の部分を手書きで#2001/00/00 00:00:00#と書けばうまく動いてくれるの ですが・・・ 変数の値を型変換しなければいけないのでしょうか? 良い方法がありましたら教えてください。

  • アクセス2003のサブフォームコントロールの参照について

    アクセス2003で質問です。 メインフォームM1 サブフォームS1 サブフォームコントロールSCTL1 S1のフィールド T1と定義している場合に T1へサブフォームS1からオープンした別のフォームF1の値を代入したいのです。 マクロで値の代入の式を アイテムに [Forms]![M1]![SCTL1]![T1] と記述してもプロパティまたはメソッドが正しくないというエラーが表示されます。 同じ記述でアクセス2000では出来ました。 どこが違うのか教えて下さい。

  • 値の代入で計算しているんですが

    アクセスでデータベースを作っています。 マクロの値の代入で計算しているんですが、 なぜかスムースに計算されません。 ほかのフィールドの数値を変えてからだと、計算される場合もあったり、イベントの指定を変えたりすると計算されます。ステータスバーにも計算されてないときも「計算中です」というメッセージはでてきます。エラーメッセージはでません。 レコードの「総計」というフィールドに 「受講料」「施設費」「補講費」というフィールドの 数値をトータルしたものを代入したいと思っています。 「イベント」か式自体におかしいのかもしれません。 アイテム [総計] 式 [受講料]+[教材費]+[補講費]+[施設費] このマクロをイベントのどこに入れればスムースに計算されるでしょうか?

専門家に質問してみよう