access2000,WIN98SEの環境です。
顧客コード・・・テキスト型、主キー、重複不可
顧客名・・・テキスト型
住所・・・テキスト型
というテーブルを作成し、そこへ登録するフォームを作成しています。
顧客コードは修正時は入力不可としており、追加というボタンを押すとそこへ移動できるようにしています。
追加時に顧客コードで既に登録してあるコードを入れると、Dcount関数を用いて重複レコードがあった時はエラーメッセージを出しています。
その後、カーソルは顧客コードの末尾に移り(100|という感じです)、backspaceキーで100を消して再度入れ直そうとすると再び重複エラーのメッセージが出てしまいます。
Escキーを押すと、コード自体がシロ抜きになり入力することができるのはわかったのですが、Escキーを押すという行為をVBAで現すことはできるのでしょうか?
よろしくお願い致します。なお、マクロは使用しておらずVBAでのコーディングで処理をしています。

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

A 回答 (3件)

"Undoメソッド"をヘルプで調べてみてください。


ご質問内容の[ESC]キーを押したことと同じ機能になります。
更新前(BeforeUpdate)や変更時(Change)のイベントで使ってください。
SendKeysを使っても問題ないと思いますが、SendKeysは予期せぬ動作をすることがしばしばあるので、
私はなるべく使わないようにしています。
    • good
    • 0
この回答へのお礼

undoで解決しました。遅くなりましたが、どうもありがとうございました。

お礼日時:2002/02/06 17:42

こんにちは。

maruru01です。
直接質問の答えにはなりませんが。
登録フォームをテーブルと非連結で作成してはいかがですか。
フォーム上に適当にテキストボックス(顧客コード、顧客名、住所)を置きます。
追加ボタンのクリックイベントで、
1.3つのテキストボックスが全て空("")でないことを確認(必要に応じて)
2.DCount関数で重複チェック
3.データテーブルのレコードセットを更新可で開く
4.レコードセットにデータを追加する

これなら、顧客コードのテキストボックスに入力する時には、重複チェックがかからないのでエラーメッセージは出ません。
Escキーを押すというような、あまり通常しないような動作はやめた方がいいような気がします。
では。
    • good
    • 0
この回答へのお礼

現在、非連結型のフォームにチャレンジしています。遅くなりましたが、ありがとうございました。

お礼日時:2002/02/06 17:16

SendKeysステートメントを使用してはいかがでしょう?



Sendkeys "{Esc}"

ッう感じで…
    • good
    • 0
この回答へのお礼

遅くなりましたが、ありがとうございました。

お礼日時:2002/02/06 17:11

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

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

Qstringのデータ型はメモ型とテキスト型どちらがいいのでしょうか?

こんばんは。
アクセスで
100文字のデータを入力したい場合、
フィールドのデータ型は
テキスト型にしてフィールドサイズを100にするのと、
メモ型にするのとどちらがいいのでしょうか?

Aベストアンサー

私も、No.1の方と同じく「テキスト型でフィールドサイズ指定」を
推奨します。

ただ、元々は(といっても私が知ってるのはAccess97以降ですが)、
・テキスト型:
  文字数の上限が小さいが、インデックスを設定可能
・メモ型:
  文字数の上限が大きいが、インデックスは設定不可
ということで、

a)サイズの上限に引っかかる場合はメモ型
b)完全一致検索(+先頭一致検索も?)や並べ替えを行う必要がある
 (かつ、サイズが255文字以内)ならテキスト型、

という使い分けだったと思うのですが(以前の回答もその前提)、
http://oshiete1.goo.ne.jp/qa3188809.html

改めて調べてみたところ、Access2002以降ではメモ型の場合にも
インデックスが作成可能になっていました(汗)
http://support.microsoft.com/kb/302525/ja
(『詳細』の項目のところに、「この現象は、Microsoft Access 2000
 より前のバージョンの Microsoft Access では発生しません。
 これは、Jet 3.5 以前ではメモ型フィールドにインデックスを付ける
 ことができないためです。」とあります:
 でもAccess2003のヘルプ(テーブルのデザインビューで『データ型』
 のところにフォーカスを移動してF1キーを押す)には、以前のまま
 「メモ型、ハイパーリンク型、および OLE オブジェクト型のフィールド
 には、インデックスを設定できません。」と書かれているのですが(汗))


・・・ということなので、「文字数を制限したいかどうか」で決めればいい、
ということではないかと思います。
(従って、「100文字まで」と上限を設定したい今回の場合はテキスト型、と)

私も、No.1の方と同じく「テキスト型でフィールドサイズ指定」を
推奨します。

ただ、元々は(といっても私が知ってるのはAccess97以降ですが)、
・テキスト型:
  文字数の上限が小さいが、インデックスを設定可能
・メモ型:
  文字数の上限が大きいが、インデックスは設定不可
ということで、

a)サイズの上限に引っかかる場合はメモ型
b)完全一致検索(+先頭一致検索も?)や並べ替えを行う必要がある
 (かつ、サイズが255文字以内)ならテキスト型、

という使い分けだったと思うのですが(以...続きを読む

QACCESS2000数値型⇒テキスト型変換

ACCESS2000でクエリーで例えば25.0の数値を"25.0"そのままの形の文字列に変換したいのですが、Formt関数とか使っても"25"になってしまいます。"25.0"と表示させる方法ないでしょうか?お願いします。

Aベストアンサー

> 「#」は値が該当の桁の値がゼロ、または存在しないときに表示を抑止することを意味し、
> 「0」は該当の桁の値がゼロ、または存在しないときに0を表示することを意味します。

下記に訂正します。

「#」は値が該当の桁が存在しないときに表示を抑止することを意味し、「0」は該当の桁が存在しないときに0を表示することを意味します。

QAccess テキスト型を日付/時刻型へ変更

いつもお世話になっております。
Accessについてお願い致します。
テーブル「メインデータ」に日付と時刻が一緒になっているデータがあります。例:2004/01/01/ 10:00
現在、
フィールド名:受付時間
データ型:テキスト型
フィールドサイズ:12
定数入力:0000/00/00\ 00:00;0;_
と設定してあり、問題はこのデータをテキスト型から日付/時刻型「「yyyy/mm/dd @@:@@」)へ変更したいのですが、
テキスト型→日付/時刻型へ変更すればデータが消えてしまいます。
そこで、クエリでFormatを使ったのですがエラーが出てしまいます。
何か良い案はございませんでしょうか?
宜しくお願い致します。

Aベストアンサー

1)新しくフィールド(仮に「受付時間2」とするを追加し、書式を「日付/時刻型」にし、その他の項目も設定する。
2)データシートビュー表示で「受付時間」の列を選択し、新しく設定した「受付時間2」の列に貼り付ける。
3)デザインビューで「受付時間」を削除し、「受付時間2」を「受付時間」に変更する。
※フォーム、クエリなどのリンクは、再設定する必要が有るかもしれません。
※適当なテーブルをつくってテストしてみて下さい。
※バックアップもしておくと良いと思います。

QOfficeアクセス テーブル「テキスト型」⇒「日付型」への変換について

テーブルにデータが保管されており、そのフィールドの一つに「テキスト型」で”20080301”のようなデータを持っています。これを「日付/時刻型」”2008/03/01”のように変換したいのですが、どのようにすればよいのでしょうか。

※ちなみにこのオリジナルデータは毎日、自動的にテーブルにダウンロードされており、このテーブル自体の型を予め「日付/時刻型」に変換すると、日々のデータ取得時にエラーとなってしまいます。ですので、「日付/時刻型」のフィールドを持った新規のテーブルに、この”20080301”のデータを変換し格納したいのですがどのようにすればよろしいでしょうか。

テーブル⇒デザインより、該当のフィールドの型を「テキスト型」⇒「日付/時刻型」へ直接変換してしまうと、「データの変換中にエラーが発生しました。○○件のレコードのデータが失われました。」と表示されます。素人のため、なるべく追加クエリや更新クエリや簡単な関数のみでの方法を教えていただけたら幸いです。

Aベストアンサー

テーブルに日付時刻型フィールドを追加して、
更新クエリを使って、#1さんが提案されている
数式を使えばよいのでは?

Qユーザーフォームを「Esc」キーで消去できるようにしたい。

こんばんは。
エクセル2003で、VBAでユーザーフォームを挿入し、
show modalをfalseにし、
「マクロの実行」でエクセルの画面に戻った時に、
「Esc」キーでユーザーフォームを消去することは不可能でしょうか?
何かやり方があったら教えて欲しいです。
よろしくお願いします。

Aベストアンサー

こんばんは。

>「マクロの実行」でエクセルの画面に戻った時に、
UserForm がアクティブなのか、シートがアクティブか、どちらか分からないので、両方に取り付けてみました。

'UserForm モジュール

Private Sub UserForm_Initialize()
Dim ctrl As Control
 On Error Resume Next
 For Each ctrl In Me.Controls
  ctrl.TabStop = False
  ctrl.TakeFocusOnClick = False
 Next ctrl
 On Error GoTo 0
  Application.OnKey "{ESC}", "UserFormClose"
End Sub

Private Sub UserForm_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 If KeyCode = 27 Then 'ESC
  Unload Me
 End If
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Application.OnKey "{ESC}" '設定取り消し
End Sub

'---------------------------------------
'標準モジュール

Sub UserFormClose()
 Unload UserForm1
End Sub

こんばんは。

>「マクロの実行」でエクセルの画面に戻った時に、
UserForm がアクティブなのか、シートがアクティブか、どちらか分からないので、両方に取り付けてみました。

'UserForm モジュール

Private Sub UserForm_Initialize()
Dim ctrl As Control
 On Error Resume Next
 For Each ctrl In Me.Controls
  ctrl.TabStop = False
  ctrl.TakeFocusOnClick = False
 Next ctrl
 On Error GoTo 0
  Application.OnKey "{ESC}", "UserFormClose"
End Sub

Private Sub UserForm...続きを読む


人気Q&Aランキング

おすすめ情報