痔になりやすい生活習慣とは?

フォームを開いたとき、どこにもフォーカスを当てたくないです。

アクセス2003です。
フォームにテキストボックスを1つ設置して、そのフォームを開くと
フォーカスがテキストボックス上で、点滅しますが
どこにもフォーカスを当てない方法あるのでしょうか?

Private Sub Form_Open(Cancel As Integer)
Me.詳細.SetFocus
End Sub

とするとコンパイルエラーになってしまいます。
不可能でしょうか?よろしくお願い致します。

A 回答 (1件)

> どこにもフォーカスを当てたくないです



これを実現した後の操作はどのようになっていますか。
・マウスを使ってターゲットをクリックして・・・
・「Enter」「Tab」キーで移動したい・・・

見た目で良いでしょうか。
簡単な方法では、透明なコマンドボタンを配置して、そこにフォーカスを移動します。
配置場所としては、クリックしなさそうな場所や、大きさを極小さくとか・・・
・コマンドボタン「btnDmy」を作成します。
・プロパティを変更していきます。
 「透明」を「はい」
 「タブストップ」を「いいえ」、「タブ移動順」を先頭に

Form_Open なり Form_Load で Me.btnDmy.SetFocus を記述します。

「Enter」キーが押された時に、あるところにフォーカスを動かしたければ、
そのボタンの「クリック時」に処理を記述すればよいと思います。
「Tab」キーでは次に移動します。

非連結のフォームとか、帳票フォーム等でコマンドボタンが配置できれば上記で。
配置できないデータシート表示の場合は、レコードを選択してあげれば、
一ヶ所が強調されることはなくなります。

Dim bFirst As Boolean

Private Sub Form_Load()
  bFirst = True
End Sub

Private Sub Form_Current()
  If (bFirst) Then
    DoCmd.RunCommand acCmdSelectRecord
    bFirst = False
  End If
End Sub

これはデータシート表示だけではなく、連結したフォームで使えるものになりますが、
次の操作でマウスで選んであげる動作が必要になります。
(「Enter」「Tab」キーでは選択レコードが変わるだけです)
また、フォームの構成により使えない方法だったりと。

前者の方が良いと思いますが、参考にする/しない等々自己責任でお願いします。
    • good
    • 0
この回答へのお礼

とても参考になりました。ありがとうございました。

お礼日時:2011/12/07 21:14

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

Qユーザーがクリックするまでフォーカスをつけない方法(Access VBA)

こんにちは。
AccessVBAですが、ユーザーフォーム上で、
ユーザーが、コントロールをクリックするまで、
フォーカスを設定しない方法は、あるでしょうか。
テキストにフォーカスされたときの黒反転が、
綺麗でないので、フォーカスさせたくありません。

フォームを開いたときに、強引にボタンにフォーカス
する、方法もありますが、ボタンのないフォーム
ですと、この方法が使えません。

何か、いい方法がありましたら、教えてください。
お願いします。

Aベストアンサー

こんにちは。
フォーム上にテキストボックスを作成し見えないよう(背景色をフォームの背景色にし境界線を透明にし、最小にした状態にします。)にし目立たない所に置きます。
フォームが開いたときにそのテキストボックスにフォーカスがいくようにしたらいかがでしょうか。

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

QAccess カレントレコードがありません

フォーム社員情報からレコードを削除するボタンを作成してレコードの削除を行いたいのですが、全て削除をして1件もなくなった場合にデータベースを閉じる時に「カレントレコードがありません」というエラーが出てしまいます。OKをクリックすると閉じる事は閉じれるのでこのエラーが出ないようにしたいのですが。。。
よろしくお願いします。

'エラー開始
On Error GoTo err_RTN:

'接続
Set cnADO = CurrentProject.Connection

'レコードセットを取得
Set rsADO = New ADODB.Recordset

rsADO.Open "T社員情報", cnADO, adOpenKeyset, adLockOptimistic

'削除
ret = MsgBox(Me!txt氏名.Value & Chr(13) & "を削除しますか?", vbYesNo + vbQuestion, "削除")
Select Case ret
Case vbYes
rsADO.Delete
Me.Requery
Case vbNo
Exit Sub
End Select

'終了
rsADO.Close: Set rsADO = Nothing
cnADO.Close: Set cnADO = Nothing

フォーム社員情報からレコードを削除するボタンを作成してレコードの削除を行いたいのですが、全て削除をして1件もなくなった場合にデータベースを閉じる時に「カレントレコードがありません」というエラーが出てしまいます。OKをクリックすると閉じる事は閉じれるのでこのエラーが出ないようにしたいのですが。。。
よろしくお願いします。

'エラー開始
On Error GoTo err_RTN:

'接続
Set cnADO = CurrentProject.Connection

'レコードセットを取得
Set rsADO = New ADODB.Recordset

...続きを読む

Aベストアンサー

再びmaruru01です。

うーん、ちょっと分からないですね。
なので、別の方法を。
やりたいことは、フォームのtxt社員No.と一致する社員No.のレコードを削除するということですね。
なのでレコードセットを開かずに直接SQLを実行します。
(確認のIf文の中に)

mySQL = "DELETE * FROM T社員情報 " & "WHERE 社員No. =" & Me!txt社員No.
DoCmd.RunSQL mySQL

ただし、アクションクエリの確認メッセージが出ますので、
Accessのメニュー[ツール]→[オプション]→[編集/検索]タブ→[確認]→[アクション クエリ]のチェックは外しておきます。
なお、この「アクション クエリの確認」はVBAから次のように変更出来ます。

'確認オフ
Application.SetOption "Confirm Action Queries", False
'確認オン
Application.SetOption "Confirm Action Queries", True

これを、一番最初のフォームの読み込み時にオフにして、一番最後のフォームを閉じる時にオンすればいいでしょう。

ところで、フィールド名などに"."(ピリオド)を使用するのはやめた方がいいですよ。
では。

再びmaruru01です。

うーん、ちょっと分からないですね。
なので、別の方法を。
やりたいことは、フォームのtxt社員No.と一致する社員No.のレコードを削除するということですね。
なのでレコードセットを開かずに直接SQLを実行します。
(確認のIf文の中に)

mySQL = "DELETE * FROM T社員情報 " & "WHERE 社員No. =" & Me!txt社員No.
DoCmd.RunSQL mySQL

ただし、アクションクエリの確認メッセージが出ますので、
Accessのメニュー[ツール]→[オプション]→[編集/検索]タブ→[確認]→[アクション クエ...続きを読む

QMS Accessでフォームの「開く時」と「読込み時」のイベントの違い

Accessでフォームのイベントに「開く時」と「読込み時」のイベントがありますが、どのような違いがあるのでしょうか?
例えば、フォームのドロップダウンリストのリストのソースを変更するプログラムを「開く時」に設定していますが、「読込み時」だとまずいんでしょうか?
今は、問題なく動いているので結果オーライなんですが、ちょっと気になります。
特にフォームのテキストボックスにプログラムの条件で初期値を入れるときなどはどっちのイベントでやるのが正しいのでしょうか?
今はどっちでやってもうまく動いているのですが。
よろしくお願いいたします。

Aベストアンサー

イベントの発生順は
Open → Load
です。
また、Open はキャンセルできますが、Load はできません。
ドロップダウンリストのリストを変更しようとしてエラーが発生した場合にはフォームを開かずにおくようにするのであれば Open イベントに記述しなければなりません。
キャンセルする必要がなければ、どちらでもよいと思いますよ。どちらが正しいということでもないように思います。

QAccessでコードを入れると名前がでるようにしたい

Accessで顧客コードを入れると顧客マスタ通りの名前、住所TELがフォームに自動で出て、商品コードを入れると品物名が出るようにしたいのですが。
コードと商品名のはいったテーブルとフォームは作ったのですが・・・

Aベストアンサー

はじめの手順から書きます。

顧客コードと氏名・住所・TELが入ったテーブルを作ります。(顧客マスタの事)

>コードと商品名のはいったテーブルとフォームは作ったのですが・・・

と言うことですので、商品用のテーブルはできています。

もう1つ、テーブルとテーブルのリレーション(関連性)を設定しやすいように、

オートナンバーを設定した主キー用のフィールドと、
顧客コードと、商品コードを設定したテーブルを作ると良いでしょう。(以下Cテーブルと呼びます。)

あとは、テーブルのリレーション設定を行います。


リレーションシップボタンをクリックし、
テーブルをすべて表示させます。

次に、顧客用のテーブルから顧客コードをCテーブルの顧客コードへとドラッグし、参照整合性にチェックを入れます。
そして、作成をクリックします。

同様に、商品コードの入ったテーブルから、
Cテーブルへとドラッグし、参照整合性にチェックを入れます。そして作成をクリックします。

続いて、クエリの作成に移ります。
オブジェクトをクエリに変更します。

デザインビューでクエリを作成し、
テーブルの一覧を表示させます。

一覧から、まず
Cテーブルのオートナンバーを設定したフィールドを
ダブルクリックします。
次に、Cテーブルの顧客コードをダブルクリックします。
次に、顧客マスタに入っている名前・住所・TELの順にダブルクリックしていきます。

次に、Cテーブルの商品コードをダブルクリックします。
そして、商品名をダブルクリックして
必要なフィールドの設定が完了します。

クエリは、名前をつけて保存しましょう。
(以下では、Q顧客商品と呼びます。)

できた、Q顧客商品を
ウィザードを使用してフォームを作成するから
選択して、完了。

これで、コードを入れるだけで、
テーブルから名前・住所・TEL・商品名が
自動表示されるようになります。

文章で書き並べた感がありますので、
分かりにくければ、また、ご質問ください。では。

はじめの手順から書きます。

顧客コードと氏名・住所・TELが入ったテーブルを作ります。(顧客マスタの事)

>コードと商品名のはいったテーブルとフォームは作ったのですが・・・

と言うことですので、商品用のテーブルはできています。

もう1つ、テーブルとテーブルのリレーション(関連性)を設定しやすいように、

オートナンバーを設定した主キー用のフィールドと、
顧客コードと、商品コードを設定したテーブルを作ると良いでしょう。(以下Cテーブルと呼びます。)

あとは、テーブル...続きを読む

QAccessのフォーマット時イベント

宜しくお願いいたします。

Accessを使用していますが、
レポートの詳細セクションの[フォーマット時]
イベントについて教えてください。

この[フォーマット時]というイベントは、具体
的にいうと、どんなイベントのことを指してい
るのでしょうか?

[クリック時]イベントはマウスがクリックされ
たときなのは良く分かりますが、
レポートの詳細セクションがフォーマットされ
るときとはどういう意味なのでしょうか?

教えてください。

Aベストアンサー

通常レポートを印刷(プレビュー)するとき、まず内部でそのイメージを構築します。

このとき、一般的には設定してある紙の印刷可能領域からページヘッダーと、ページフッターを確保します。

その後に詳細部分を繰り返して残りの印刷可能領域に詳細を詰めていきますが、あるところまで行ったときに詳細の途中で印刷可能領域が足りなくなったとします。このときにその一つ前のレコードまででイメージを再フォーマットします。(プロパティーで項目を1ページに収める設定がしてある場合)

このようにフォーマット時は場合により数回繰り返されたりもします。フォーマットイベント内で回数のカウントなどしてみるとよくわかると思います。

また、フォーマットイベントの引数に何回フォーマットを行っているかというのもあったと思います。
必要により1回目のフォーマとの時のみに何か処理をさせるといったことも可能です。(たとえばSUMを使わずに項目の合計を求めるなどと行ったこと)

QAccessで、別のテーブルにある同じフィールドを結合する(至急)

いつも大変お世話になっております。m(_ _)m
分かりましたら、至急お願いしたいのですが

Accessで、別々のテーブル(またはクエリ)に同じ「型番」「数量」というフィールドがあって、それぞれ別々の情報が入っています。
それを、1つに結合することは可能ですか?

例)
テーブルA:
型番/数量
ABC/5
DEF/3

テーブルB:
GHI/2
JKL/3

この2つのテーブル(A・B)を1つのフィールドに表示したい。

型番/数量
ABC/5
DEF/3
GHI/2
JKL/3

というように。。。

Accessの基本にのっとっていないのかもしれませんが、何とかできたらと思います。できるだけ簡単な方法で・・・

どうぞよろしくお願いします。

Aベストアンサー

「ユニオンクエリ」というのを使います。
詳しくは参考URLを見て下さい。
実際の記述は下の通りです。

SELECT 型番, 数量
FROM テーブルA
UNION ALL
SELECT 型番, 数量
FROM テーブルB

参考URL:http://hamachan4.exblog.jp/2293904/

QAccessでレコードの保存をせずにフォームを閉じたい

Accessでデータベースのレコード追加を行うフォームを作成しています。

コマンドボタン(1)をクリック→新しいレコードの追加
コマンドボタン(2)をクリック→フォームを閉じる
としています。(ウィザードを使用して、埋め込みマクロ?を設定しています。)

コマンドボタン(1)でレコードが追加されるのは問題ないのですが、
コマンドボタン(2)をクリックした場合も、レコードが追加されていることに気がつきました。

一般的に入力する人は、
データを追加しようと思って入力していたけれど、
途中でやめてフォームを閉じることってありますよね?
そういう場合にレコードが追加されてしまったら問題だと思ったのです。

ですが、どうしたらレコードの追加をせずにフォームを閉じられるかがわかりません。
それって可能でしょうか?

Access初心者です。難しいVBAとかはまだよくわかりません。
何か方法、アドバイス等ありましたら
よろしくお願いします。

Aベストアンサー

フォームを閉じたときに保存されるのは仕様です
それ以外にAccessを終了したとき、レコードを移動したときにも保存されます

これらを完全にカバーするには、非連結のフォームにし
ボタンクリックでデータをテーブルに書き込むようにするか

作業用のテーブルから作ったフォームで入力し
ボタンクリックで本テーブルに転記するようにします

どちらにしてVBAが必要ですね、しかもへんなレコードを書き込もうとすると
コードが止まってしまいますから
転記前にデータの整合性を完全にチェックする必要があります

という訳でかなりきちんとしたコードが書けるスキルが必要ですね


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング