出来合いの簡易なaccessVBAのプログラムを使用しています。日付が「平成14年1月25日」の形がフォームの標準形なのですが、誤って「01月25日」と入れると入力されたものがおかしくなってしまいます。
そこで、フォームで「01月25日」や「11月05日」のような数値を入れて次のフォームに移ろうとするとメッセージを出すか勝手に修正するかの方法をとりたいのですが、VBAの超初心者にも簡単な方法を教えていただけないでしょうか。

#「フォーム」とは文字・数値を入力するボックスのこと。(正式名称がすぐに思い出せず。(-_-; )
#社内では、他のプログラムではほとんど「2001/01/25」のように「0」が入るので間違いやすい。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

Accessのフォーム上のテキストボックスでは、書式および定型入力で簡単に入力形式を設定できます。

ご質問の対応方法として、該当するテキストボックスのプロパティシートの「書式」の項に「ggge\年m月d日」と記載することで上記のように「01月25日」や「11月05日」を入力しても「平成14年1月25日」の形式に自動変換されます。
これは、年、月、日にテキストボックスを分けた場合も同様です。
ちなみに、日付formatにおいて、y、m、dの1文字は1桁の場合には1文字に2桁の場合には2文字に表示されます。
但し、これらはユーザー側の認識を容易にするもので、データベース上は基準日付(何時だったかは忘れました)からのシリアル値を持っているだけに過ぎないため、事後の処理(他のシステムとのデータ交換等)においては、共通のフォーマットを使用することで対応できます。

この回答への補足

#補足としては、入力すると2つのテーブルに書き込まれるようで、「01月」のように入れても「伝票テーブル」の日付は問題なく、「伝票明細」のみテーブルの日付がおかしく(例 2001年が2025年になるなど)なるようです。

その部分のコードは下記となっているようです。

Private Sub 伝票日付_AfterUpdate()
On Error Resume Next
Dim strSQL As String
strSQL = "update T伝票明細 set 日付 = #" & 伝票日付 _
& "#,月度 = " & Format(伝票日付, "yyyymm") & " where 伝票番号 = " & 伝票番号
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
End Sub

補足日時:2002/01/28 06:36
    • good
    • 0
この回答へのお礼

その後、コードを素人ながらに調べたところ、「明細伝票」への更新の際のSQLの「02/02/25」の形を「2002/02/25」の形式に変更したら正常になりました。

#良い勉強の機会になりました。

お礼日時:2002/01/28 07:22

1.お使いのMicrosoftAccessのバージョンは?


2.その作者は、そのプログラムのカスタマイズを許可していますか?
3.mdbファイルですか?
4.[年][月][日]は、それぞれ独立した3つのテキストボックス(フォームとは呼びません)になっていますか?
5.(上記4で独立していない場合)
 年月日を1つのテキストボックスに入力するとき、元号や年月日などのテキストも入力していますか?
6.(上記5で入力していない場合)
 入力しなくても年月日の文字が出てきますか?
 元号は表示されますか?
 入力は西暦ですか和暦ですか?
以上について、補足をお願いします。

この回答への補足

回答ありがとうございました。

>1.お使いのMicrosoftAccessのバージョンは?

access2000です。

>2.その作者は、そのプログラムのカスタマイズを許可していますか?

書籍の付録で、自由にいじることができます。

>3.mdbファイルですか?

mdbファイルです。

>4.[年][月][日]は、それぞれ独立した3つのテキストボックス(フォームとは呼びません)になっていますか?

まとめて一つのテキストボックスとなっています。

>5.(上記4で独立していない場合)
>年月日を1つのテキストボックスに入力するとき、元号や年月日などのテキストも入力していますか?

初期数値を変更したい時のみ、変更して使います。

>6.(上記5で入力していない場合)
>入力しなくても年月日の文字が出てきますか?

でて来ます。

>元号は表示されますか?

自動的に表示されます。

>入力は西暦ですか和暦ですか?

和暦です。

#補足としては、入力すると2つのテーブルに書き込まれるようで、「01月」のように入れても「伝票テーブル」の日付は問題なく、「伝票明細」のみテーブルの日付がおかしく(例 2001年が2025年になるなど)なるようです。

補足日時:2002/01/27 13:57
    • good
    • 0
この回答へのお礼

その後、コードを素人ながらに調べたところ、「明細伝票」への更新の際のSQLの「02/02/25」の形を「2002/02/25」の形式に変更したら正常になりました。

#良い勉強の機会になりました。

お礼日時:2002/01/28 07:22

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q実行エラー 3075:クエリ式`作成日 の間#2010/10/01# 

実行エラー 3075:クエリ式`作成日 の間#2010/10/01# AND #2010/10/30#の構文エラー:演算子というエラーの処理をどうすればいいか分かりませんので教えてほしいです。
Private Sub cmdFilter_Click()
Dim strSQL As String
Dim strCriteria As String

With Me
If Len(.cboFieldName) <> 0 Then
If Len(.cboCondition) <> 0 Then
strCriteria = BuildCriteria(.cboFieldName.Column(0), _
.cboFieldName.Column(1), .cboCondition, _
Nz(.txtValue1), Nz(.txtValue2))
End If
End If
End With
With Me
ここはエラー→ .Filter = strCriteria
.FilterOn = True
.Requery
End With

Private Function BuildCriteria(strFieldName As String, _
intType As Integer, _
strCondition As String, _
varValue1 As Variant, _
Optional varValue2 As Variant) As String

Dim fBetween As Boolean
Dim fLike As Boolean
Dim strCriteria As String
Const conQuotes = """"

fBetween = IIf(InStr(strCondition, "の間") > 0, _
True, False)
fLike = IIf(InStr(strCondition, "類似") > 0, _
True, False)

strCriteria = strFieldName & " "
Select Case intType
Case dbText, dbMemo
If InStr(1, varValue1, "*") > 0 Then
strCriteria = strCriteria _
& " Like " & conQuotes & varValue1 & conQuotes
Else
If fLike Then
strCriteria = strCriteria & " 類似 " _
& conQuotes & "*" & varValue1 & "*" & conQuotes
Else
strCriteria = strCriteria & strCondition _
& " " & conQuotes & varValue1 & conQuotes
End If
End If

Case dbInteger, dbLong, dbCurrency, dbDouble, dbSingle
If fBetween Then
strCriteria = strCriteria _
& strCondition & " " & varValue1 & " AND " & varValue2
Else
strCriteria = strCriteria _
& strCondition & " " & varValue1
End If
Case dbDate
If fBetween Then
strCriteria = strCriteria & strCondition _
& " #" & Format(varValue1, "yyyy/mm/dd") & "# AND #" _
& Format(varValue2, "yyyy/mm/dd") & "#"
Else
strCriteria

実行エラー 3075:クエリ式`作成日 の間#2010/10/01# AND #2010/10/30#の構文エラー:演算子というエラーの処理をどうすればいいか分かりませんので教えてほしいです。
Private Sub cmdFilter_Click()
Dim strSQL As String
Dim strCriteria As String

With Me
If Len(.cboFieldName) <> 0 Then
If Len(.cboCondition) <> 0 Then
strCriteria = BuildCriteria(.cboFieldName.Column(0), _
.cboFieldName.Column(1), .cboCondition, _
Nz(.txtValue1), Nz(....続きを読む

Aベストアンサー

#1、#2です。

cboConditionに元々はLIKE、BETWEENというキーワードが入っていたが、
それを「類似」と「の間」に変更した、ということでしょうか。
本来はキーワードのBETWEENをstrConditionに渡すということであったならば

>Case dbDate
>If fBetween Then
>strCriteria = strCriteria & strCondition _
>& " #" & Format(varValue1, "yyyy/mm/dd") & "# AND #" _
>& Format(varValue2, "yyyy/mm/dd") & "#"

において、

>strCriteria = strCriteria & strCondition _

のところを、

strCriteria = strCriteria & " Between"_

でいいのでは、と思います。"" の中のBetweenの
前は半角空けておきます。
これで、#1で述べましたようにMsgBoxでstrCriteria
の中身が、

作成日 Between #2010/10/01# AND #2010/10/30#

となっていればいいのではと思います。


また、他の

>Case dbInteger, dbLong, dbCurrency, dbDouble, dbSingl

の場合も同様だと思いますが。

#1、#2です。

cboConditionに元々はLIKE、BETWEENというキーワードが入っていたが、
それを「類似」と「の間」に変更した、ということでしょうか。
本来はキーワードのBETWEENをstrConditionに渡すということであったならば

>Case dbDate
>If fBetween Then
>strCriteria = strCriteria & strCondition _
>& " #" & Format(varValue1, "yyyy/mm/dd") & "# AND #" _
>& Format(varValue2, "yyyy/mm/dd") & "#"

において、

>strCriteria = strCriteria & strCondition _

のところを、

strCriteria = strCriter...続きを読む

QAccessVBA フォームを自動で消したいです

こんにちは。たびたび質問させていただいています。
今回の質問は表題に書きましたが、詳しくはこんな感じです。
あるフォームに「マスタを開く」ボタンがあります。
そのボタンをクリックすると、「詳細」で開くのか「標準」で開くのか
を選択するフォーム「表示形式選択」がでてきます。
詳細か標準かをチェックボックスで選択したあと「表示」ボタンで
それぞれ選択した方のテーブルを表示させます。
この時、テーブルが表示されたら「表示形式選択」フォームはいらない
ので自動的に消えるようにしたいのですが、うまくいきません。
ちなみに私がとった方法は「表示ボタン」をクリックした時、
各テーブルの表示処理をしたあと、一番最後に「Docmd.Close」と記述
したのですが、そうすると表示したテーブルが消えてしまいました。
一体どうすれば自動でフォームが消せるのでしょうか?
ご教授よろしくお願いします。

Aベストアンサー

閉じるフォームを指定してあげればいいはずなので
DoCmd.Close acForm, "表示形式選択"
でよいはずです。

"表示形式選択" に閉じたいフォームの名前でいけるはずです

QaccessVBA 「フォームが見つかりません」

コードをいろいろいじっていたら「F仕分伝票というフォームは見つかりません」というメッセージが出るようになりました。
Me.RecordSource = "SELECT * FROM 仕分伝票 WHERE 伝票番号 = " & Forms!F仕分伝票![伝票番号] & ";"

このようなメッセージはどのような原因が多いのでしょうか。

Aベストアンサー

フォームの名前をきちんと確認してみてください。 例えば、「F仕分伝票」の最初の文字のFが全角文字か半角文字かとか。 フォーム名は一字一句違わないように指定しなければなりません。
あと、SQL文のFROM句は後にテーブル名がくるのでフォーム名を書いてはいけません。

QAccessのサブフォームで#Nameエラーについて

こんにちはいつもお世話になります。
Accessで教えてください。
Accessのフォームで大分類・中分類・小分類・割引率という項目を作り、メインフォームで大分類と中分類を選択してサブフォームで小分類を選択すると割引率が隣に表示されるようにしたいのです。
1つのテーブル内に全部項目が収まっているので、クエリで抽出区分に各フォームのテキスト名を指定してパラメータにしてやってみたところなぜかわかりませんが、クエリを実行すると小分類のパラメータが開いてしまいます。
SQLは「SELECT テーブル1.SUP, テーブル1.カテゴリ, テーブル1.タイプ, テーブル1.標準値引率
FROM テーブル1
WHERE (((テーブル1.SUP)=[Forms]![算出用]![SUP]) AND ((テーブル1.カテゴリ)=[Forms]![算出用]![カテゴリ]) AND ((テーブル1.タイプ)=[Forms]![割引率]![タイプ]));です。
そして、フォーム内には、割引率のコントロールソースとして「=test!割引率」と入れています。すると、フォームのテキストで#Nameエラーが出てます。すみませんどうしても何が違っているのだか分からなくて教えていただけると助かります。

こんにちはいつもお世話になります。
Accessで教えてください。
Accessのフォームで大分類・中分類・小分類・割引率という項目を作り、メインフォームで大分類と中分類を選択してサブフォームで小分類を選択すると割引率が隣に表示されるようにしたいのです。
1つのテーブル内に全部項目が収まっているので、クエリで抽出区分に各フォームのテキスト名を指定してパラメータにしてやってみたところなぜかわかりませんが、クエリを実行すると小分類のパラメータが開いてしまいます。
SQLは「SELECT テーブル1.S...続きを読む

Aベストアンサー

こんにちは、ats8181oyajiです

サプフォームのフィルタを使う方法が
簡単ではないでしょうか?

また、VBAが組めるのなら、画面の項目で
テーブルをselectして割引率を取得する
方法もあります。

なんか、難しく作りすぎているように
思いますが。

Qサブフォームのデータをメインフォームへ

お世話になります。
ひとつお聞きしたいのですが、サブフォームのデータをメインフォームに表示させる方法ってないのでしょうか?
データシートのサブフォームで計算させた合計の値を、メインフォームにもテキストボックスを表示させたいと思っています。
できるかどうかわかりませんが、何かいい方法がございましたら、よろしくお願いいたします。

Aベストアンサー

サブフォームの名前を「金額計算フォーム」、このサブフォームの中にある合計の値を表示するテキストボックスの名前は、「合計金額」と仮定します。

メインフォームに新しくテキストボックスを作成して、そのテキストボックスのコントロールソースを
=[Form]![金額計算フォーム]![合計金額]
とすれば、レコードの入力が確定したあと値が変わるはずですのでお試しください。

蛇足ですが、サブフォームはデータシートにしているようですが、帳票フォームの方が個人的には改造のしやすさから言って好きです。

ご参考になれば幸いです。m(__)m


人気Q&Aランキング

おすすめ情報