Access97でサブフォームを使用したフォームを作成しています。

サブフォームの明細行の最後に新規レコード行がありますよね。
サブフォームの初期表示時に、この新規レコード行にカーソルを位置付けたいのですが、
Docmd.GoTORecord,,acNewREc とやると、新規レコード行がサブフォームの
最上部にいってしまい、その前にある既存レコードが見えなくなってしまいます。

理想は、サブフォームの1ページが10明細分の大きさで獲ってあるとすると、
新規レコード行を10行目に表示されるようにもっていきたいのですが、
サブフォームに対してこのような制御は可能なのでしょうか。

RecordCountを操作したりしてやってみたのですが、既存レコードの件数によって、
うまくいったりいかなかったりです。

よろしくお願いします。

A 回答 (2件)

私も同じことで悩んだことがあります。

そのときの結論ですが、

(1) 一番簡単なのは、
サブフォームのビューをデータシートにすれば新規レコードに移動しても10行表示されます。

(2) サブフォームのビューをを帳票にする必要があるなら、
DoCmd.GoToRecord , , acLast
DoCmd.GoToRecord , , acPrevious, 9
DoCmd.GoToRecord , , acNewRec
のように、一度9行前のレコードに行ってから、新規レコードに移動すれば、ちゃんと10行表示されます。
(なんだか裏技っぽくてスマートじゃないんで、自分では納得できてないんですが・・・)

(3) 最後の9レコードより前を表示する必要が無ければ、
サブフォームのクエリーを
SELECT ID, フィールド1, フィールド2,・・・・
FROM テーブル1
WHERE ID In (SELECT TOP 7 ID FROM テーブル1 ORDER BY ID DESC;)
ORDER BY ID;
のようにして、レコード数を新規も含めて10に限定してしまうのも一つの方法かと思います。

とりあえず (2) で用が足りるということでは、自信あり(経験済み)ですが、この方法がベストか? ということではちょっと自信なしです。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

実は、私も不本意ながら、(2)にやや近い方法で実験していたのですが、
あともう少しというところでうまくいかなかったりでした。

で、yoishoさんのいわれたようにやってみたところ、うまくいきました。

ちょっと1回余分にレコード移動しているので、
画面のチラツキが気になるところですが、しょうがないですね。

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

お礼日時:2002/01/18 18:06

画面のちらつきを止めるには



Application.Echo False
画面の更新処理
Application.Echo True

とすれば良いと思います。
    • good
    • 0
この回答へのお礼

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

早速試してみたところ、なるほどうまくいきました。
目からウロコ状態です。
まだまだ知らないメソッドがいっぱいあるなあと痛感...

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

お礼日時:2002/01/21 09:29

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

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

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

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

QAccess2000のフォームでのフォームのIMEが、2度目以降変更してしまう。

アクセス初心者です。
Accsss2000のフォームでのデータ入力を楽におこなうために、例えば名前ならばテキストボックスのプロパティシートのその他タブから、IME入力モードをオンにしてかつIME変換モードを人名/地名に変更したのですが、1回目の入力はIMEが全角・人名モードになるのですが、2度目以降は半角カタカナ・人名/地名モードになってしまいます。全角ではありません。なぜでしょうか?
また上のタブにIME入力モード保持というのもありますが、どういう時に利用すればよいのでしょうか?

Aベストアンサー

> 1回目の入力はIMEが全角・人名モードになるのですが、
> 2度目以降は半角カタカナ・人名/地名モードになってしまいます。

恐らく、1回目の入力から2回目に当該テキストボックスへの移動までの
間に、半角カタカナを指定したテキストボックス(またはコンボボックス)を
経由しているのではないでしょうか。
(或いは『IME 入力モード』が「オフ」や「使用不可」、または英数系?)

ともあれ、回避策としては、『IME 入力モード』を、現在の「オン」から
「ひらがな」に変更します。
(「オン」は、「ひらがな/全角カタカナ/半角英数」などのモードを特に指定
 しない場合に使用します。そのため、特定モードで固定したい場合は、
 それに合わせた設定値(ここでは「ひらがな」)を指定する必要がある、
 ということです)


> 上のタブにIME入力モード保持というのもありますが、どういう時に
> 利用すればよいのでしょうか?

私自身はこの設定は使用していないのですが・・・(汗)

例えば、取引情報を入力する場合、『企業略称』テキストボックスには
「アルファベットの略称」や「漢字の略称」、「カタカナの略称」がそれぞれ
連続することになります。
このとき、同テキストボックスの『IME 入力モード』を「ひらがな」などに固定
してしまうと、アルファベットやカタカナの略称のデータを入力する際には
毎回手動で「全角カタカナ」や「半角英数」に切り替える・・・という使い方を
する方もいる可能性があります。
『IME 入力モード保持』は、恐らくそういう場合を想定した機能ではないかと
思います。
(もちろん、ひらがなからの変換で全角カタカナや半角英数に変換するように
 している人の場合は、切替は不要ですので、この設定は使用しなくても
 かまわないことになります)

> 1回目の入力はIMEが全角・人名モードになるのですが、
> 2度目以降は半角カタカナ・人名/地名モードになってしまいます。

恐らく、1回目の入力から2回目に当該テキストボックスへの移動までの
間に、半角カタカナを指定したテキストボックス(またはコンボボックス)を
経由しているのではないでしょうか。
(或いは『IME 入力モード』が「オフ」や「使用不可」、または英数系?)

ともあれ、回避策としては、『IME 入力モード』を、現在の「オン」から
「ひらがな」に変更します。
(「オン」は、...続きを読む

Qサブフォームへの新規レコードを一度に複数行を出したい

access初心者です。マクロやVBAもほとんどわかりません。

前任者がTHE CARDというソフトで見積書を作っていたのですが
最近データが壊れやすくなってきて、作り方も忘れたとのこと。
そこでaccessを使う事になったのですが、フォームで見積書を作り
サブフォームには見積の詳細を出しています。
そこで無駄には見えますが、新しいレコードを追加した時に
サブフォームに13行を自動的に出せないでしょうか?
あと、そのカレントのレポートのみの印刷方法も教えて下さい。
わかりにくいかと思いますが宜しくお願いします。

Aベストアンサー

>サブフォームに13行を自動的に出せないでしょうか?
サブフォームの元になっているテーブルに13個の新しいレコードを追加してやればいいいのです

テーブルの情報が全くないので
適当にモデルで回答しますから応用してください

テーブルは以下のようなものだとします

[見積見出し](見積番号、日付、顧客CD、・・・)
[見積詳細](見積番号、行番号、・・・・)

メインのデータ入力後、ボタンを押した時に
13の新しいレコードを見積詳細に追加するには
下のような追加クエリを作成し、ボタンで走らせるようにします

1~13までの数字だけのテーブルを作成します
このテーブルから

行番号:数字
見積番号:Forms!メインフォーム名!見積番号

というクエリを作り、見積詳細への追加クエリに変換します

Qフォーム等入力時においてIMEが働かない(?)

よく起こる現象で、インターネットでフォーム入力や、Yahooとかの検索入力で日本語入力をしたいときに、IMEが働かない現象が起きています。半角英数のみ入力ができます。私の環境だけでしょうか‥。
キーボードの「半角/全角」キーが効かないので、IMEツールバーを出して、マウスで日本語入力の「あ」にしても入力画面では半角英数に戻ったりします。
Wordやメモ帳を起動すると、正常に働くので、メモ帳を立ち上げてそこへ入力して、コピーしてペーストをしたりして対処をしています・・。
常にメモ帳を立ち上げておけば解決とかの意味ではありません。
IEをアクティブウィンドウにした場合、IMEが働くなくのです。

Aベストアンサー

確かIEのバグだったと思います。

対処法のリンクを貼っておきますので、参考にしてください。
http://www.tku.ac.jp/~densan/local/ie7-ime/ie7-ime.html

QACCESSのフォーム内のレコードへのサブフォーム内のレコードの表示

いつも色々な方々に大変お世話になっております。
今回は見積書というフォームの中に、得意先一覧というサブフォームがあり、その得意先一覧にはもちろん得意先の名前があります。
現時点では、見積書フォーム内の得意先名レコードにコンボボックスを設置して選べるようにしてあります。
これを得意先一覧サブフォームの中から、見積書フォーム内の得意先レコードに表示させたい、得意先名をダブルクリックすると転記されるようするのは可能でしょうか?
宜しくお願いします。

Aベストアンサー

> 得意先名をダブルクリックすると転記されるようするのは可能でしょうか?
サブフォームの得意先名をということですよね?

Me.Parent!得意先レコード = Me!得意先名
のように、サブフォームのイベントに記述すれば、親フォームのコントロールを指定できます。

QWebフォームのIMEモードを入力項目毎に自動切替

ある人と話していて、議論になったので質問します。世の中にはたくさんのウェブフォームがあって、名前や住所、電話番号などの登録情報を入力することが多々あります。あまり深く考えたことはなかったのですが、私はなんとなく、「名前や住所のテキスト入力時には自動的にIMEの入力モードが日本語(ひらがな)になり、電話番号やメールアドレスのテキスト入力時には英数になる」ものだと思っていました。自分でIMEを操作することなく、テキストフィールドにタブで移動したりもしくはマウスをクリックしたときにアプリケーション側で制御されるものが大半だと思っておりました。それを聞いてある人は「そんなことはない、世の中の大半のアプリはそんなことを制御していない、「普通」は自分でIMEで制御しながら入力するものだ」、と言っていたので議論になりました。これからウェブサイトを作ろうと思っているので、最終的にはこの議論はアプリ側にそのような実装をするかどうかというところに帰着するのですが、まずは「一般的にどうなのか」というところでご意見を頂きたいと思います。ちなみに、日本のメジャーなサイト(航空会社、ポータル、携帯電話、電気屋)10個でユーザ登録フォームを確認したところ、名前欄をクリックしてもいずれもIMEのモードはひらがなに変更されませんでした。そこで今は友人が正しくて、僕が間違っていたどころか、「そもそも、名前入力時に自動的にひらがなにモード変換されるようなサイトって本当にあるのだろうか。。」というような状態になっております。どなたか、教えてください。よろしくお願いします。

ある人と話していて、議論になったので質問します。世の中にはたくさんのウェブフォームがあって、名前や住所、電話番号などの登録情報を入力することが多々あります。あまり深く考えたことはなかったのですが、私はなんとなく、「名前や住所のテキスト入力時には自動的にIMEの入力モードが日本語(ひらがな)になり、電話番号やメールアドレスのテキスト入力時には英数になる」ものだと思っていました。自分でIMEを操作することなく、テキストフィールドにタブで移動したりもしくはマウスをクリックしたときにア...続きを読む

Aベストアンサー

IMEのON/OFFができるスタイルシート「ime-mode」は、Internet Explorerが独自に追加した仕様で、Internet Explorerでは入力モードが切り替わりますが、その他のブラウザでは保証されません。
http://www.htmq.com/style/ime-mode.shtml

今、確認したところ、IE8はもちろん切り替わり、Firefox 3.6も切り替わりましたが、Google Chromeは切り替わりませんでした。
Opera,Safari,Sleipnir…等は試してません。

大手のサイトでは「より多くのブラウザで表示できること」が求められますので、独自仕様の「ime-mode」を使っているところは少ないのではないでしょうか。
逆に「Internet Explorerしか表示できなくて良い」と割り切ってるサイトや、社内だけに公開するようなページは「ime-mode」が使われていると思います。

Qサブフォームの新規レコードに移動したい アクセス

親フォームのコマンドボタンをクリックしたら
親フォームにはまっているサブフォームの新規レコードに移動したいのですが、
うまくできません。

サブフォームのオブジェクト名は、"F_SubForm"です。
サブフォームはデータシートビューです。

VBAコードは
Private Sub cmd_test_Click()
DoCmd.SelectObject acForm, "F_SubForm"
DoCmd.GoToRecord , , acNewRec
End Sub
です。

上記コードを実行すると
DoCmd.SelectObject acForm, "F_SubForm"
の部分で、
「実行時エラー 2489
 オブジェクトが開いていません。」
となります。

だからと言って、
DoCmd.GoToRecord , , acNewRec
だと、何も起こりません。(新規レコードに移動しません)

解決方法をご教授ください。

Aベストアンサー

> DoCmd.GoToRecord

これは、現在フォーカスがあるフォームに対して有効だったと思うので、

> 親フォームのコマンドボタンをクリック

した状態では、
フォーカスはコマンドボタンにあり、
そのコマンドボタンは親フォームにあるので、
親フォームに対して・・・という解釈になります。

> DoCmd.SelectObject acForm, "F_SubForm"

この DoCmd.SelectObject acForm は、フォームとして起動されている・・・
組み込まれたサブフォームは、フォームとして起動されているわけではないので NG

親フォームをデザインで見た時、
サブフォームコントロール名が F_SubForm なら
サブフォームコントロールにフォーカスを移した後に、DoCmd.GoToRecord しては?

Private Sub cmd_test_Click()
  Me.F_SubForm.SetFocus
  DoCmd.GoToRecord , , acNewRec
End Sub

※ 未検証

QACCESS フォーム上 テキストボックスを移動するごとに文字の入力モードが戻ってしまう

ACCESSでフォーム上で入力をしています。
テキストボックスを移動するごとに半角英数になってしまい非常に不便です。

テーブルではIME入力モード:ひらがな、IME返還モード:一般としています。
テーブルのデザインビューの状態では指定している通りのひらがなで入力できるのが、フォームになると半角英数の状態です。
フォームのプロパティから何か設定を変更しなければいけないのでしょうか?
よろしくお願い致します。

Aベストアンサー

maigo-no-konekoさん
ACCESS2000では次の機能があります。
テーブルの項目定義のIMEの設定内容が引き継がれる仕様なのか
否か不明ですが、フォームの定義画面でテキスト項目やコンボボックス
など入力項目毎に指定します。
(ただし、シフトキーを押しながらマウスクリックすることで
複数選択できます)

1)テキストポックスのプロパティ画面を呼び出します。
2)その他 タブにIME関連の項目があります。
  IME入力モード保持 直前に入力した項目のIMEの入力設定
  状態を引き継ぐ場合は「はい」にします。直前の入力項目の
  設定によらない場合は「いいえ」にします。
  IME入力モード オンまたはひらがな等にします。
           ここでご希望の入力方法を選択します。
  IME変換モード 一般(人名や地名などを入力す場合は
  人名/地名)にします。

Q親フォームからサブフォームのレコードソースを設定

親フォームからサブフォームのレコードソースを設定するには?
フォーム1にテーブル1をドロップアンドドラッグして、「テーブル1のサブフォーム」を作成しました。

フォーム1にあるコマンドボタンから「テーブル1のサブフォーム」のRecordSourceを設定する方法を教えてください。

「テーブル1のサブフォーム」からなら
Private Sub Form_Load()
Me.RecordSource = ""
End Sub

とできるのですが、
やりたいことはフォーム1からのイベントなので
「テーブル1のサブフォーム」からのイベントは使えません。

だからってフォーム1の
Private Sub コマンド2_Click()
Me.テーブル1のサブフォーム.RecordSource = "テーブル1のサブフォーム"
End Sub

とするとコンパイルエラーになります。

良い方法があれば教えてください。アドバイスよろしくお願いします。

Aベストアンサー

No2です。説明もれがあったので追加しておきます。
No2のところで、

>このとき、「テーブル1のサブフォーム」
>のフィールドには「#Name?」のような表示がされていると
>思います。すなわちこときはサブフォームにはレコードソースが
>設定されていないからです。

としていますが、「#Name?」と表示される理由はフィールドの
コントロールソースが設定されているために、「#Name?」のような
表示が出てきます。


ここからは蛇足ではありますが、コントロールソースが設定されていなければ
こうした表示はでませんが、もしコントロールソースも取り除いて
いるならば、コマンド1でもコマンド2のクリックイベントでもどちらでも
かまいませんが、たとえば「テーブル1のサブフォーム」の
フィールドのコントロールソースをすべて取り除いておいて、
コマンド2のクリックイベントで設定するとすれば、一応
「テーブル1のサブフォーム」のフィールドの名前をID、名前、住所として
テーブル1のフィールド名を同じくID、名前、住所とするならば、

Private Sub コマンド2_Click()
Me.テーブル1のサブフォーム.Form.RecordSource = "テーブル1"
Me.テーブル1のサブフォーム.Form.Controls("ID").ControlSource = "ID"
Me.テーブル1のサブフォーム.Form.Controls("名前").ControlSource = "名前"
Me.テーブル1のサブフォーム.Form.Controls("住所").ControlSource = "住所"
End Sub

として、レコードソース、コントロールソースを設定します。

No2です。説明もれがあったので追加しておきます。
No2のところで、

>このとき、「テーブル1のサブフォーム」
>のフィールドには「#Name?」のような表示がされていると
>思います。すなわちこときはサブフォームにはレコードソースが
>設定されていないからです。

としていますが、「#Name?」と表示される理由はフィールドの
コントロールソースが設定されているために、「#Name?」のような
表示が出てきます。


ここからは蛇足ではありますが、コントロールソースが設定されていなければ
こうした表示はで...続きを読む

QAccess フォームのテキストボックスに半角英字のみで入力する設定は

IME入力モードをテーブル・フォームともオフにしたのですがひらがな入力モードになってしまいます。
フォームのテキストボックスに半角英字のみで入力する設定としてプロパティのIME入力モードをオフにするやり方自体が間違っているのでしょうか。
それともATOKを使っているなど利用するパソコン側の問題でしょうか

Aベストアンサー

IME入力モードを「使用不可」にしましょう。

Qメインフォームとサブフォームのレコードを複製

(昨日同じ質問をあげましたがカテゴリが間違っていたのでこちらにあげなおしました)

メインフォーム「MAIN」にサブフォーム「REN」を埋め込んでいます。

【メインフォームMAIN】
テーブル名:JIK
ID:事件ID

【サブフォームREN】
テーブル名:REN
ID:連絡先ID(・事件ID)

ボタンをクリックすると、メインフォームで表示させているレコードを複製させたいです。

以下を参考に、そのとおり(のつもり)に作ってみたのですが
(メインフォーム「MAIN」に「txtCopy事件ID」という名前のテキストボックスも作成しました)
「コマンドまたはアクション”追加貼り付け”は無効です。」
とエラーメッセージが出てしまいます。
どのように修正すればよいでしょうか?
http://www.accessclub.jp/bbs3/0103/superbeg36719 …

ちなみに追加クエリだけを実行すると
表示させているメインフォーム「MAIN」のレコードに、
サブフォーム「REN」のレコードが追加され、
サブフォーム「REN」のレコードが2倍になりました。

以下追加クエリとコードです。

【追加クエリ】
INSERT INTO REN ( 事件ID, 氏名, フリガナ, ・・・ )
SELECT [Forms]![MAIN]![事件ID] AS 式1, REN.氏名, REN.[フリガナ], REN.報告書, ・・・
FROM REN
WHERE (((REN.事件ID)=[Forms]![MAIN]![txtCopy事件ID]));

【VBA】
Private Sub 明細コピー_Click()
On Error GoTo Err_明細コピー_Click

Me!txtCopy事件ID = Me!事件ID

DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70 'Paste Append


Dim stDocName As String

DoCmd.SetWarnings False ' システムメッセージ非表示
stDocName = "追加クエリ"
DoCmd.OpenQuery stDocName, acNormal, acEdit
DoCmd.SetWarnings True ' システムメッセージ表示

' サブフォーム再クエリ
Me!REN.Requery

Exit_明細コピー_Click:
Exit Sub

Err_明細コピー_Click:
MsgBox Err.Description
Resume Exit_明細コピー_Click

End Sub

よろしくお願いいたします!

(昨日同じ質問をあげましたがカテゴリが間違っていたのでこちらにあげなおしました)

メインフォーム「MAIN」にサブフォーム「REN」を埋め込んでいます。

【メインフォームMAIN】
テーブル名:JIK
ID:事件ID

【サブフォームREN】
テーブル名:REN
ID:連絡先ID(・事件ID)

ボタンをクリックすると、メインフォームで表示させているレコードを複製させたいです。

以下を参考に、そのとおり(のつもり)に作ってみたのですが
(メインフォーム「MAIN」に「txtCopy事件ID」という名前のテキストボックスも作...続きを読む

Aベストアンサー

メインフォーム側の方は解決しました様で良かったです。

サブフォーム側のキー違反に関してですが、リンク先のURLの内容によると

メインフォーム→見積明細フォーム
 見積明細ID→オートナンバー型(主キー)
 見積品名→テキスト型
 ・・・

サブフォーム→工程明細フォーム
 工程明細ID→オートナンバー型(主キー)
 見積明細ID→数値型
 工程コード→テキスト型
 ・・・

とあります。これをそっくりそのまま質問者様の仕様に置き換えると

メインフォーム→MAIN
 事件ID→オートナンバー型(主キー)
 ・・・

サブフォーム→REN
 連絡先ID→オートナンバー型(主キー)
 事件ID→数値型
 ・・・

となるかと思います(一つ前の回答にも同じような事を書きましたが)
考えられるキー違反の原因としては、サブフォーム側で「事件ID」が主キー設定されていませんか?

リンク先のURLのイメージですと、例えば

【メインフォーム】
1 A みかん
2 C りんご
3 D ぶどう
項目名は左からID1(オートナンバー)、コード、品名とします。主キーは「ID1」

【サブフォーム】
1 1 A みかん 愛媛
2 2 C りんご 青森
3 3 D ぶどう 山梨
項目名は左からID2(オートナンバー)、ID1(数値)、コード、品名、産地とします。主キーは「ID2」

というレコードが各フォームにあるとして、メインフォームで2のりんごの項目を表示させてボタンを押すと

【メインフォーム】
1 A みかん
2 C りんご
3 D ぶどう
4 C りんご

【サブフォーム】
1 1 A みかん 愛媛
2 2 C りんご 青森
3 3 D ぶどう 山梨
4 2 C りんご 青森

という感じの動作になるかと思うのですが(間違っていたらお恥ずかしい限りですが。。。^^;)
この時サブフォームの「ID1」(=事件ID)は同じ値が複製されるので、主キーが設定されているとキー違反になってしまうかと思われます。

もしサブフォーム側の「事件ID」に主キーが設定されていたら、そちらは主キーを外して「連絡先ID」の方に主キー設定して下さい。
(勿論、メインフォーム側の「事件ID」は主キーでOKです)

他の原因だったらすみませんm(_ _)m

メインフォーム側の方は解決しました様で良かったです。

サブフォーム側のキー違反に関してですが、リンク先のURLの内容によると

メインフォーム→見積明細フォーム
 見積明細ID→オートナンバー型(主キー)
 見積品名→テキスト型
 ・・・

サブフォーム→工程明細フォーム
 工程明細ID→オートナンバー型(主キー)
 見積明細ID→数値型
 工程コード→テキスト型
 ・・・

とあります。これをそっくりそのまま質問者様の仕様に置き換えると

メインフォーム→MAIN
 事件ID→オートナンバー型(主キー)
 ・・...続きを読む


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

人気Q&Aランキング