
No.1ベストアンサー
- 回答日時:
安直なのはショートカットキーを利用することです。
ショートカットキーは、多用しますので<共通記号定数>モジュールにまとめるといいです。
Private Sub s_name_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
SendKeys conGotoMain, False
KeyAscii = 0
End If
End Sub
' ----------------------------------------------------------------------------------------
' 共通記号定数
' ----------------------------------------------------------------------------------------
Option Compare Database
Option Explicit
'
' ショートカットキー
'
Public Const conGotoMain = "^(+({HOME}))"
Public Const conGotoSub = "^(+({HOME})){UP}{TAB}"
Public Const conDefaultValue = "^(%({ }))"
Public Const conPreviousValue = "^("")"
Public Const conClearField = "+({UP}){DELETE}+({DOWN}){DELETE}"
Public Const conRestoreField = "{ESC}"
Public Const conNextField = "{TAB}"
Public Const conPreviousField = "+({TAB})"
Public Const conNextRecord = "^({PGDN})"
Public Const conPreviousRecord = "^({PGUP})"
Public Const conRequery = "+({F9})"
Public Const conNewRecord = "^({+})"
Public Const conDropDown = "{F4}"
この回答への補足
私が使うのではなくて、他人に使用してもらうものなので、ショートカットキーは使用したくないんですが。
それと、確か、ショートカットキーってカスタマイズ出来ませんでしたっけ。

No.5
- 回答日時:
#2です
>KeyDownイヴェントで↓はうまく機能しません
If KeyCode = 13 Or KeyCode = 9 Or KeyCode = 40 Then
で、だめですか?私の方はうまく行くのですが
以下は余談です。
>VBAは殆どご存じないし、サブフォームの作り方も分からないのに、アドバイスになりました。
なんで?
・プログラミングの経験は20年以上あります
・久しい以前、仕事でアクセスのフォームもずいぶん作りました。もちろんサブフォームも。でも全部忘れた(^^;
・現在MDBはデルファイをフロントエンドに、ADO接続で操作しています。この方が大幅に楽です。
ありがとうございます。
アスキーコードが間違ってました。
古いコード表なので下矢印が35になってました。
vbKeyDownやvbKeyRightという書き方も、発見しました。
また余談の件、なにか私が勘違いしたようで、失礼な事を書きました。申しわけありません。
大変参考になりました。
No.4
- 回答日時:
s_husky です。
少し、誤解があるようですね。
まず、コードはテストしていますのでエラーなく動作します。
1、標準ライブラリで記号定数を定義していることが前提です。
SendKeys "^(+({HOME}))", False
と書いても、もちろんOKです。
2、<Me.CurrentRecord = 2>は条件文に関する説明です。
2は、ラストレコードに!・・・ということです。
Me.RecordsetClone.RecordCount であれば、可変的なレコード数にも対応します。
代入文ではなく論理式ですからエラーは発生しません。
3、TabIndexは、タブの移動順です。
なお、フォームキーイベントを使用しているのは、幾つかの特殊な条件でテキストボックスのキーイベントが取得できなくなるからです。どういうケースに取得不可かを知って利用すべきだからです。その点、フォームキーイベントは安心です。
大変参考になりました。
いろいろ誤解をしてしまってごめんなさい。
fuuten_no_nekoさんの回答も参考にしながら、無事動くようになりました。
またご指摘のようにフォームキーイベントに移しました。
No.3
- 回答日時:
s_husky です。
面目ない。
KeyPress で反応しないようですので・・・再回答。
次ですとOKと思います。
フォームのキーボードイベントを取得=はい
が前提です。
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 or KeyCode = 9 Then
If Me.CurrentRecord = 2 And Me.ActiveControl.TabIndex = 2 Then
SendKeys conGotoMain, False
End If
End If
End Sub
Me.CurrentRecord = 2
Me.ActiveControl.TabIndex = 2
最終レコードの数、最終テキストボックスのTabIndex でショートカットキーを送るタイミングを判断しています。
質問者の状況に合わせて下さい。
なお、ショートカットキーについてはAccess97のマニュアルに書かれています。
この回答への補足
回答ありがとうございます。
これも、ショートカットのキー操作を送るルーチンですよね?
このルーチンの中に、ショートカットの定義を読んでくるルーチンが必要だったのでは?
Me.CurrentRecord = 2
とは、サブフォームのレコード番号ですか?
また Me.TabIndex = 2
とは、テキストボックスのタブ移動順の番号を指すのでしょうか?
教えて頂けませんか?
Indexの構文間違ってましたね。ActiveControl が抜けてました。
Me.CurrentRecoord = 2
を調べてみましたが、これってこの構文は使えないという事ですが?現実にこの構文で実行すると、エラーが出ます。プロパティの値を得るだけの関数ですね。
使い方としては、
TurgetCurrentRecord = Me.CurrentRecord
MsgBox("カレントレコードは; " & TurgetCurrentRecord)
てな、使い方になるんでしょうか。
どちらにしろ、ここの意図を教えて頂けませんか?
テーブルの特定のレコードにジャンプするという意図なんでしょうか?

No.2
- 回答日時:
VBAはほとんど知らないので、興味深く試してみました。
s_huskyさんにケチをつけるつもりは毛頭ありません。で、私の環境:Microsoft(R) Access 2000 (9.0.6926 SP-3)ではKeyPressでエンターキーがとれませんでした。KeyDownならばつかまるようなので、若干直してみました。Private Sub name_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Or KeyCode = 9 Then
Me![xxx].SetFocus
KeyCode = 0
End If
End Sub
TABキーも対象に加え、SetFocusで移動します。これならばどこにでも移動できると考えるのですが、サブフォームからメインフォームを試していません。長いことアクセスのフォームはいじっていないので、メイン/サブのフォームの作り方を忘れました(と云うかめんどくさい)(^^;
この回答への補足
ややっ!できますねぇ。
ありがとうございます。
サブフォームからメインフォームへの移動は、
Forms![MainForm]![Field名].SetFocus
で出来ました。
ただ、矢印キー:KeyCode = 31,KeyCode = 28 には、反応しませんねぇ。
サブフォームからメインフォームに移動するのには、テキストコントロールの名前を指定して移動する事ができないという固定観念があったのですが、TABキーとENNTERキーでは見事に移動しました。
ただ、標準では下矢印キーでも同じ機能をしますが、上記のようにKeyDownイヴェントで↓はうまく機能しません。
もう少し調べますが、何らかのヒントでもあれば教えて頂けませんか?
追記:KeyPressイヴェントはENTERキーを検出出来るらしいです。TABキーとかは駄目みたいですね。
VBAは殆どご存じないし、サブフォームの作り方も分からないのに、アドバイスになりました。
なんで?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) マイクロソフト アクセス2021のフォームビュー作成でレイアウトを帳票形式から単票形式にあとから変更 1 2023/03/03 10:56
- Access(アクセス) accessについて(超初心者です) 1 2023/02/11 11:18
- Visual Basic(VBA) VB.net フォーム 親子 1 2022/07/04 19:00
- Access(アクセス) アクセス 意図せずサブプロシージャを移動してしまうのを止めたい 1 2022/09/02 09:19
- 楽器・演奏 ★この考え方 どう思われますかぁ? 5 2023/06/08 16:44
- Access(アクセス) Accessに関する質問です。 クエリーQ出勤 からフォームF出勤を作成 フォームは分割フォームで作 1 2023/05/26 08:57
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) Accessで独自メニューバーまたはリボンを作成したい 1 2022/12/02 14:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メインフォームとサブフォーム...
-
MicrosoftAccess2000「社員管理...
-
フォームが閉じる機能を無くしたい
-
Accessでタブの設定
-
Access 2010 分割フォームのフ...
-
Access2000 サブフォームのReco...
-
AC2000でフォームから入力した...
-
2回目に画面のレコードセットの...
-
単票フォームにあるタブのサブ...
-
ACCESS サブフォーム MAX関数...
-
サブフォーム内の再クエリー
-
Access レイアウト変更したサブ...
-
MS Accessでクエリの結果をフォ...
-
Sum関数の使い方
-
サブフォームのデータを保存す...
-
Access 複数フォームを...
-
サブフォーム(複数レコード)の...
-
エクセルで、抽出したデータだ...
-
X-Ripperというフリーウェアに...
-
アクセスのフォームのコンボボ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access サブフォームでの選択行...
-
Access 複数フォームを...
-
Access2000、これはいったい・...
-
access サブフォームにリストを...
-
(ACCESS)条件に応じて、テキ...
-
ACCSESS2013VBA フォームのレコ...
-
Access2000 サブフォームのReco...
-
Accessでサブフォームの中の並...
-
サブフォームが見えなくなる。
-
AccessのFormのみをスクリーン...
-
googleフォームでインストール...
-
初心者です。accessで請求書を...
-
サブフォームでのダブルクリッ...
-
Accessで、一覧からクリックし...
-
アクセスでサブフォームのレコ...
-
サブフォームのデータを保存す...
-
Accessのサブフォームから値を...
-
コンボボックスで選択実行後、...
-
アクセスで サブフォームの表...
-
サブフォームの切り替え方を教...
おすすめ情報