Access2003です。
フォームにサブフォームを設置し、直接テーブルを表示させています。
このサブフォームのテーブルのある行をダブルクリックしたら
その行のデータを他のフォームのオブジェクトにセットしたいのですが
行や行のデータ全てを取得は出来るのですが、サブフォームのイベントがEnterとExitしかなくて、イベント発生が出来ません。
フォームのダブルクリックでXとYを見て…と思ったのですがサブフォーム上ではフォームのダブルクリックイベントが発生せず。
サブフォームのテーブルはユーザーがソートする事もあるのでベタに上にテキストボックス等を置く事は出来ません。
どうにかダブルクリックで動作させる方法はありませんでしょうか?

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

A 回答 (2件)

> どうにかダブルクリックで動作させる方法はありませんでしょうか?



前回の質問でも触れたように(下から2つ目の段落)、
http://oshiete1.goo.ne.jp/qa4952701.html

> サブフォームの「コントロールとしてのイベント」は「Enter」と「Exit」の2つしかありませんが、
> ソースオブジェクトに指定したフォーム(上記の例では「SF1」)側で、各種イベント(Open
> その他)が実行

されます。

ですので、No.1の方の回答にもあるように、『既定のビュー』(フォームのプロパティシートの
『書式』タブにあります)を「データシート ビュー」にしたフォームを、サブフォームのソース
オブジェクトにすれば、テーブルと同様の表示で、かつ、ダブルクリック等のイベントを発生
させることができます。
(但し、テーブル/クエリでは「サブデータシート」を表示できますが、これには非対応です)


【重要】
「フォームのダブルクリックイベント」は、データシートの外側(データが表示されていない、
グレーの背景部分)をダブルクリックした時にしか発生しません。
『データシート内でのダブルクリック』でデータを取得するレコードを指定する場合は、面倒
でも「各コントロールのダブルクリックイベント」に処理を記述してやる必要がありますので
ご注意下さい。
(以下のように、他のフォームへの代入を行う部分を、イベントとは別のSubとして作成して、
 各コントロールではそれを呼び出す形にすると、コードを組むのも修正/管理するのも
 比較的楽だと思います)

なお、ダブルクリックした時点で、コントロールの値は「現在のレコードのもの」しか参照
できないので、x,yなどで「どのレコードが選択されたか」の判定は不要です。念のため(汗)


Private Sub 社員コード_DblClick(Cancel As Integer)
  Call FromAtoB
End Sub

Private Sub 氏名_DblClick(Cancel As Integer)
  Call FromAtoB
End Sub

Private Sub FromAtoB()
  With Forms!フォームB   '別フォームの名前が「フォームB」の場合
    !社員コード = Me!社員コード
    !氏名 = Me!氏名
    '(以下、データを転記する処理を必要な追加)
  End With
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
直接で出来ないかと思っていたのですが、それは無理なのですね。
No.1の方の回答でテーブル仕様で作成しようとしてだめだったのですが

>、『既定のビュー』(フォームのプロパティシートの
『書式』タブにあります)を「データシート ビュー」にしたフォーム
で出来ました!
検索で「テキストうんぬん」と出てくるのもこれですね!
一度出来てしまえば色んなイベントをいじれそうです。ありがとうございました!

お礼日時:2009/05/14 14:11

> フォームにサブフォームを設置し、直接テーブルを表示させています


これを変更すればできると思います。

手順)
・フォームウィザードで、そのテーブルを対象に表形式でフォームを作成します。
・ダブルクリックなどのイベントを設定します。
・動作等確認します。

・フォームのプロパティで、既定のビューをデータシートに変更し、保存します。

・親フォームのサブフォームコントロールのプロパティで、「ソースオブジェクト」に先ほど作成し保存したフォームを指定します。

※データのやり取りは、サブフォームコントロール名を経由して行います。
サブフォームコントロール名を「FSUB」とした場合、
親から子には(親側で実行)
 Me.FSUB.Form.子テキストボックス = Me.親テキストボックス とか、
子から親には(子側で実行)
 Me.Parent.親テキストボックス = Me.子テキストボックス とか
 Forms("親フォーム名").親テキストボックス = Me.子テキストボックス など

で、どうなりますか。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
>これを変更すればできると思います。
あ、そうなのですね。このまま何とか出来ないかと思ってましたが、変える必要があるのですね。

早速やってみようとしたら
>・フォームウィザードで、そのテーブルを対象に表形式でフォームを作成します。
のとこで「フィールドが多すぎて作成出来ません」となってしまいました;;

お礼日時:2009/05/14 13:54

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

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

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

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

QAccess2007のフォームウイザードでデータシートを作りたいが方法が分からない

Access2003では、フォームウイザードでデータシートを作れたが。
Access2007では、フォームウイザードでは単票のフォームしか作れない様だ。

どうやって、作るのだろうか。操作が分からない。

Aベストアンサー

どういう帳票が欲しいかわかりませんが一応例として....
まずAccess上部にある作成をクリックします。
フォームウィザードをクリックして使用するテーブルとフィールドを選択します。
次に表形式を選択すれば帳票形式でフォームが作成されます。

もう1つはその他のフォームから複数のアイテムを選択すれば帳票形式でフォームが作成されます。

QAccess メインフォーム サブフォームにて

お世話になります。

Accessにて
メインフォームにコマンドボタンを置いて、クリックするとサブフォームのレコードが
次に行くようにしたいのですが、

コマンドボタン クリック
Forms![メインフォーム]![サブフォーム名].Form!フィールド名.SetFocus
DoCmd.GoToRecord , , acNext

メインフォームとサブフォームのレコードが次に行ってしまいます。
サブフォームだけ次のレコードに行くには、どのようにすれば良いのでしょうか。

分かる方教えて下さい。
宜しくお願いします。

Aベストアンサー

>Forms![メインフォーム]![サブフォーム名].Form!フィールド名.SetFocus


Forms!FMain!埋め込み0.SetFocus
DoCmd.GoToRecord , , acNext

以下の[サブフォーム表示コントロール名]はサブフォームそのものの
名前でなく、デザインビューでサブフォームを表示するために設定
するコントロールの名前で、初期値は[埋め込み0]のような名前
であることに留意をしてください。もしサブフォームと同じ
名前に設定しているならば問題はありませんが。

以上を踏まえて、たとえば、

Forms![メインフォーム]![サブフォーム表示コントロール名].SetFocus
DoCmd.GoToRecord , , acNext

これで、サブフォームの次のレコードに移動します。
もし、質問の中の特定のフィールドにフォーカスを
当てたいのであれば、移動後にその特定のフィールドに
フォーカスを当てればいいので、

Forms![メインフォーム]![サブフォーム表示コントロール名].SetFocus
DoCmd.GoToRecord , , acNext
Forms![メインフォーム]![サブフォーム表示コントロール名].Form![フィールド名].SetFocus

これで、レコードを移動したときにフォーカスは
特定のフィールドに当たっています。

>Forms![メインフォーム]![サブフォーム名].Form!フィールド名.SetFocus


Forms!FMain!埋め込み0.SetFocus
DoCmd.GoToRecord , , acNext

以下の[サブフォーム表示コントロール名]はサブフォームそのものの
名前でなく、デザインビューでサブフォームを表示するために設定
するコントロールの名前で、初期値は[埋め込み0]のような名前
であることに留意をしてください。もしサブフォームと同じ
名前に設定しているならば問題はありませんが。

以上を踏まえて、たとえば、

Forms![メインフォーム]![サブフォー...続きを読む

Q【Access】複数フォームを閉じる時の、選択処理について

Access Ver. : 2003
Windows Ver.: XP

Accessフォームの「閉じる時」処理で、下記のような工夫をした
いと考えております。

・フォームがひとつしか開かれていないとき、Accessを終了する
・複数のフォームが開かれている時、そのフォームのみを閉じる

そんなVBAコードがありましたら、教えてください。
何か参考になるページでも、かまいません。
どうぞ、宜しくお願いいたします。

Aベストアンサー

forms.count で開いているフォーム数を得て分岐
Application.quit

Access VBE のヘルプで、CurrentProject オブジェクト を見てみたら?

QACCESSのメインフォームとサブフォームについて

ACCESSで、受注伝票のようなものを作成したいと思っています。受注伝票フォームに受注明細のサブフォームを埋め込んだようなフォームを作ろうとしています。その際、受注伝票と明細に受注コードのフィールドを設け関連づけたいのですが、メインフォームに受注コードを入力したらサブにも同じコードが自動的に振られるようなことはできるのでしょうか。
出来ないのであれば、どのように作ればよいのでしょうか。

Aベストアンサー

新規入力用でも可能です。

メインフォームで受注コードを新規に入力し、データ更新(Tabキー等でフィールド移動など)すると自動的にサブフォームの受注コードに同じコードが挿入されます。

QACCESSフォームのボタン表示

ACCESSフォームのボタン表示

ACCESS2000で作成したフォームのボタンはACCESS2007でも変わりません。
ACCESS2007で一から作成したMDBは、ボタンの表示スタイルが異なります。
※ボタンの角が丸く、マウスカーソルをボタンの上に当てるだけで色が変わる。
ACCESS2000で作成したMDBをACCESS2007で上記のように表示させる設定は
あるのでしょうか?
いろいろ見ても、見当たらないのです。
よろしくお願いします。

Aベストアンサー

[Office ボタン] - [Accessのオプション] - [カレントデータベース] で
「フォーム上のコントロールに Windows のテーマを使用する」にチェック。

Qサブフォームと子フォームは同じ意味でしょうか?

アクセスにおいてサブフォームと子フォームは同じ意味でしょうか?

アクセスの勉強をしているのですが
「サブフォーム」「子フォーム」という言葉が出てきます。
これは同じ意味と認識していいのでしょうか?
よろしくお願いいたします。

Aベストアンサー

個人的な感覚ですが、一緒だと思います。
サブフォームからメインフォームの名前を
MsgBox Me.Parent.Form.Name
とかでやっていますので・・(私の親のフォームの名前)(^^ゞ

ただ、親子関係にある・・といった場合は
メインとサブのフィールドがキーで繋がっている
と考えます。

QExcelで作成されたフォームをAccessにコンバージョンしたいので

Excelで作成されたフォームをAccessにコンバージョンしたいのですが、フォームのインポートはできないのでしょうか?
Accessのフォーム作成画面から、インポートを選択していって、Excelファイルを開くのですが、シートしか選択できません。
コントロールのコピペもできないみたいですが。。。
Excelで作成されたフォームはAccessにはインポートできないのですか?
コーディングをそっくり使用することはできなくても、せめてフォームのデザインはコピーしたいのですが。。。(> <)
よろしくお願いします。m(_ _)m

Aベストアンサー

質問者はプロかプロ経験者ですか。でないならこんな勉強は試みないほうが良いでしょう。
市販の書物や初心者向けの講習で説明される話題ではない。プロで会社にその辺の経験者がいたりすれば聞けるでしょうが。原理的には最熟練者の人は変換プログラムは組めるかもしれませんが、そのレベルの人は、この質問コーナーを読んでないでしょうし、無料で教えるスキルではないと思います。
WEBの記事も多分少ないでしょう。
Googleででも「エクセル フォーム アクセス 移行」で出てくる記事を参考にしてはどうでしょう。
http://www.accessclub.jp/bbs2/0080/beginter24987.html
同じ発想の人はいることはいるが。
ーー
VBAとVBのフォームはコードで扱う上で微妙に違うし、アクセスVBAとエクセルVBAでは違う点も多い。
またコントロールの生成もコードで行う方法は隠して、易しいD&Dやマウスによる移動、プロパティボックスでの入力にして易しくしています。
エクセルのUserForm1のフォームも本格的なものではないサービスのような気がする。エクセルで第3者を巻き込んだ業務の開発までは予定して無いように推測する(何でもエクセル的な過大期待が横行している)。
それにエクセルでのセルとの連携をつけた機能LinkedCell、FillいstRangweなどはエクセル特有で、RecordSourceのSQL指定やフォーム指定はアクセス特有と思います。
外観を決めるサイズや書式関係は(エクセルでフォームやコントロールの)プロパティーメモー(アクセスでのフォームやコントロールの)プロパティ設定でやや似せて移せるかもしれない。
エクセルバージョン内の相違、エクセル・アクセルで使えるコントロールの種類の相違などもあります。

質問者はプロかプロ経験者ですか。でないならこんな勉強は試みないほうが良いでしょう。
市販の書物や初心者向けの講習で説明される話題ではない。プロで会社にその辺の経験者がいたりすれば聞けるでしょうが。原理的には最熟練者の人は変換プログラムは組めるかもしれませんが、そのレベルの人は、この質問コーナーを読んでないでしょうし、無料で教えるスキルではないと思います。
WEBの記事も多分少ないでしょう。
Googleででも「エクセル フォーム アクセス 移行」で出てくる記事を参考にしてはど...続きを読む

Qサブフォームからメインフォームの絞込をしたい

サブフォームの項目からメインフォームの絞込をおこないたいのですが、うまくいきません

やりたいこととデータベースの状況は以下のとおりです

メインフォームに「会社名」があり、サブフォームにその会社の「ブランド名」(一社に対し複数存在する)とその「業種」(1つのブランドにつき1つ)がある。

メインフォーム----会社名(テキスト)
サブフォーム--ブランド名(テキスト)----業種(コンボボックス)

【やりたい事】
サブフォームにある業種をメインフォーム上のフィルタ用コンボボックスで選択し、選択した
業種を持つ会社名のみ表示したい(たとえばケーキを扱うA社とD社、Z社のみメインフォームで表示するようにする)

【コード】
現在以下のようなコードを作成しています。
テキスト欄に「業種」を打ち込み、コマンドボタンを押して絞り込む
※本当はコンボボックスで選択したいのですが・・・

Private Sub コマンドボタン名_Click()
Me![サブフォームのパーツ名].Form.Filter = "[コンボボタン-業種] Like '*" & Me.テキスト欄 & "*'"
Me![サブフォームのパーツ名].Form.FilterOn = True
Exit_コマンドボタン名_Click:
Exit Sub
End Sub

作成しましたが、レコードを移動するたびにパラメータ入力のポップアップがでてきます
フィルターもかからず、絞込が全くできていません

どなたか詳しい方ご教授よろしくお願いいたします

サブフォームの項目からメインフォームの絞込をおこないたいのですが、うまくいきません

やりたいこととデータベースの状況は以下のとおりです

メインフォームに「会社名」があり、サブフォームにその会社の「ブランド名」(一社に対し複数存在する)とその「業種」(1つのブランドにつき1つ)がある。

メインフォーム----会社名(テキスト)
サブフォーム--ブランド名(テキスト)----業種(コンボボックス)

【やりたい事】
サブフォームにある業種をメインフォーム上のフィルタ用コンボボックスで選択し...続きを読む

Aベストアンサー

メインとサブフォームは、会社名でリンクされているのでしょうか?


以下が参考になると思います

サブフォームのフィールドを対象にメインフォームにフィルタをかける
http://hatenachips.blog34.fc2.com/blog-entry-235.html

QVBからmdbファイル(Access2000)の特定のフォームを開きたい?

VisualBasicのフォームに配置したコマンドボタンをクリックすることで、特定のmdbファイルをAccess2000で開き、開くと同時に特定のフォームが表示されるようにしたいのですが、こんなことできますか?できるとすればどのようにすればよいのですか?

例えば、C:\商品管理\在庫一覧.mdbにフォーム商品があるとしたとき、
Form1のcommand1をクリックすると、C:\商品管理\在庫一覧.mdbがAccess2000で開き、フォーム商品が最初に表示されるようにしたいのですが・・・
ちなみに、Access2000の起動時の設定では他のフォームが最初に開くようになっています。
よろしくお願いします。

Aベストアンサー

オートメーションを使ってAccessを制御しましょう。
で、他のフォームが最初に開くようになっていることなので、最初に開くフォームを閉じてからAccessを表示するようにすればいいと思います。

Dim acs as Object

'AccessのApplicationオブジェクトを取得する。
Set acs = CreateObject("Access.Application")

'c:\test.mdbを開くacs.OpenCurrentDatabase "c:\test.mdb"

'起動時に開かれたフォームを閉じる
'2はacForm定数のこと
acs.Close 2,"フォーム名"

'Accessを表示させる
acs.Visible = True

'表示させたいフォームを開く
acs.OpenForm "フォーム名"


こんな感じで。

最後に、Accessを終わらせるときは

'オブジェクトの開放
Set acs = Nothing

で、オブジェクトを開放してください。

オートメーションを使ってAccessを制御しましょう。
で、他のフォームが最初に開くようになっていることなので、最初に開くフォームを閉じてからAccessを表示するようにすればいいと思います。

Dim acs as Object

'AccessのApplicationオブジェクトを取得する。
Set acs = CreateObject("Access.Application")

'c:\test.mdbを開くacs.OpenCurrentDatabase "c:\test.mdb"

'起動時に開かれたフォームを閉じる
'2はacForm定数のこと
acs.Close 2,"フォーム名"

'Accessを表示させる
acs.Visibl...続きを読む

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ランキング

おすすめ情報