Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2083 / 2272 ツリー ←次へ | 前へ→

【3925】いいフォームの作り方をアドバイス願います えなりん 04/11/30(火) 16:04 質問[未読]
【3926】Re:いいフォームの作り方をアドバイス願いま... クロ 04/11/30(火) 16:48 発言[未読]
【3927】Re:いいフォームの作り方をアドバイス願いま... クロ 04/11/30(火) 17:14 発言[未読]
【3936】Re:いいフォームの作り方をアドバイス願い... えなりん 04/12/1(水) 14:37 質問[未読]
【3937】Re:いいフォームの作り方をアドバイス願い... クロ 04/12/1(水) 15:16 回答[未読]
【3947】Re:いいフォームの作り方をアドバイス願い... えなりん 04/12/3(金) 14:18 お礼[未読]
【3950】余談 ひろのしま 04/12/3(金) 17:26 発言[未読]
【3959】Re:余談 えなりん 04/12/6(月) 16:36 お礼[未読]
【3960】Re:いいフォームの作り方をアドバイス願い... えなりん 04/12/6(月) 16:47 質問[未読]
【3961】Re:いいフォームの作り方をアドバイス願い... クロ 04/12/6(月) 16:59 回答[未読]
【3994】Re:いいフォームの作り方をアドバイス願い... えなりん 04/12/8(水) 18:01 お礼[未読]

【3925】いいフォームの作り方をアドバイス願います
質問  えなりん  - 04/11/30(火) 16:04 -

引用なし
パスワード
   みなさん こんにちは
センスのない私に「いいフォームの作り方」のアドバイスをよろしくお願いします。

ACCESS2000で発注データベースを作っています。
フォームを3つ作成し(常にこの3つのフォームが表示されている状態にしたい)
a.【検索】フォーム:発注年、発注月の入力

b.【一覧】フォーム(サブフォームにしてaに連結)
  aで入力した発注年、発注月に該当する一覧(発注年月日、発注金額)を表示
   ※発注金額は、発注年月日でSUMしたもの

c.【詳細】フォーム
  bにレコード移動時イベントを設定し、該当する発注年月日データをOPENFORMする
  発注年月日、取引先名、商品名、発注金額を表示

でも、他にもっといい方法があるのでは?と思っています。
また、cでデータを追加・修正・削除した時に、すぐにbに反映するにはどうしたらいいのでしょうか。
(今のフォームの作り方だと、フォームを閉じないと反映しないのです)

【3926】Re:いいフォームの作り方をアドバイス願い...
発言  クロ  - 04/11/30(火) 16:48 -

引用なし
パスワード
   正確には2つのフォームですよね。bはaのサブフォームと書かれているので...
良い悪いは利用する方(ご自身かも)が使いやすければいいので何とも言えません。

> また、cでデータを追加・修正・削除した時に、すぐにbに反映するにはどうしたらいいのでしょうか。

これについてはcフォームにコマンドボタンかなにかでリクエリしてあげればいいと思います。
例)コマンドボタンのクリック時のイベント
Forms!aフォーム名.aフォーム内のbフォームのコントロール名.Requery

【3927】Re:いいフォームの作り方をアドバイス願い...
発言  クロ  - 04/11/30(火) 17:14 -

引用なし
パスワード
   1つ案だけ...
cフォームもaフォームのサブフォームにします。

サブフォームbの発注年月日のフォーカス取得時のイベントに
Me.Parent!aフォーム内のcフォームのコントロール名.Requery
とします。

サブフォームcのコマンドボタンのクリック時のイベントに
Me.Parent!aフォーム内のbフォームのコントロール名.Requery
とします。

これでフォームは1つ(aフォーム)だけで済むかな?

※aフォーム内の★フォームのコントロール名はaフォームをデザインビューで
 開いた状態でツールバーの「オブジェクト」で確認してください。

【3936】Re:いいフォームの作り方をアドバイス願い...
質問  えなりん  - 04/12/1(水) 14:37 -

引用なし
パスワード
   クロさん
さっそくのアドバイスありがとうざいます!
クロさんに教えていただいた1つのフォームにまとめる案を実行したいのですが、どうもうまくいきません。
私の作り方が悪いんですけどね。

フォームのことだけで済むと思ってたのでフォームの説明しかしなかったのですが、
ここでテーブルのことも説明させてください。

X)検索テーブル←これがaフォームの元
  検索年(数値)、検索月(数値)
Y)発注テーブル
  発注年月日、取引先名、商品名、発注金額
Z)発注クエリー(発注テーブルを使ってます)←これがbフォームの元
  発注年月日、取引先名、商品名、発注金額、
  発注年:Year(発注年月日)、発注月:Month(発注年月日)

そして、aフォーム検索年=bフォーム発注年、aフォーム検索月=bフォーム発注月でサブフォームを作りました。
そしてbフォーム(帳票形式)にサブフォームを作れないためcを独立したフォームにしてレコード移動時イベントでOPENFORMしようと考えていました。

でもcフォームをaフォームのサブフォームにするには、このままだと連結データ型が一致しないし、Xテーブルに新たに「検索年月日」フィールドを作って、bフォームのレコード移動時イベントで年月日を取得するようにした「つもり」がうまくいきません。
(検索年月日とcフォーム発注年月日を連結させようと考えたのですが)

なんだか根本的な質問ですが、どうしたらいいのでしょう。
基本の基本から教えてください。
すみません、すみません。

【3937】Re:いいフォームの作り方をアドバイス願い...
回答  クロ  - 04/12/1(水) 15:16 -

引用なし
パスワード
   サブフォーム(c)のレコードソースは発注テーブルそのものですよね?

先にサブフォーム化するためのサブフォーム(c)を作成しましょう。
発注テーブルを元に「単票」か「帳票」で作成してください。
ヘッダ/フッダーを表示し何れかにコマンドボタンを作成してください。
※コマンドボタン作成はウィザードが動きますので最初ダイアログで
 キャンセルすれば「コマンド**」の空ボタンができます。
コマンドボタンは空のままで結構ですが
課題:更新
名前:cmbUP
としておきましょう

適当にメインフォーム(a)に先程のサブフォーム(c)を配置してください。

メインフォーム(a)をデザインビューからフォームビューにするとサブフォーム(c)
にすべてのレコードが表示されます。

次にサブフォーム(c)のレコードソースを「発注テーブル」から
SELECT 発注テーブル.*
FROM 発注テーブル
WHERE (((発注テーブル.発注年月日)=[Forms]![メインフォーム(a)名]![サブフォーム(b)].[Form]![発注年月日]));
と書き換えてください。

これでサブフォーム(b)を抽出条件としてたレコードのみを表示するようになります。


私が提示した案の操作は
1.メインフォーム(aフォーム)で検索年(数値)、検索月(数値)を入力
2.サブフォーム(b)がリストアップされます。
ここまではできていますよね?

サブフォーム(b)内の「発注年月日」のフォーカス取得時のイベントにコードで
Me.Parent!サブフォーム(c)名.Requery
としてください。
※サブフォーム(b)の「発注年月日」にフォーカスが移動したときに自分(Me)の
 上階層(メインフォーム(a))にあるサブフォーム(c)をリクエリします。

最後にサブフォーム(c)にある更新コマンドボタンに息をいれます。
クリック時のイベントにコードで
Me.Parent!サブフォーム(b).Requery
としてください。
※この処理でサブフォーム(c)内の更新されたレコードがサブフォーム(b)に反映されます。

最後にここで「サブフォーム(b)」「サブフォーム(c)」と書いているのは
メインフォーム(a)上のコントロール名です。
フォームとしてのオブジェクト名でないことに注意してください。
コントロール名はメインフォーム(a)をデザインビュー確認してください。

【3947】Re:いいフォームの作り方をアドバイス願い...
お礼  えなりん  - 04/12/3(金) 14:18 -

引用なし
パスワード
   ありがとうございます!

師匠と呼ばせてください!

【3950】余談
発言  ひろのしま  - 04/12/3(金) 17:26 -

引用なし
パスワード
   フォームの更新に関して
'自分以外のフォームを同時に開いている時にのみ更新を行う。
If application.currentProject.allforms("該当フォーム").isloaded=true Then
Forms("該当フォーム").refresh 
  '該当フォーム更新
Forms("該当フォーム").リストボックス名.Reuery
 'リストボックス更新。refreshメソッドは多分ない。
Forms("該当フォーム")("サブフォーム").form.Refresh
 'サブフォームの更新
else
msgbox "該当フォームは開いていませんね。",vbInformation
end if

自動的に他のフォーム起動中にそのフォームを更新するコマンドです。
多分便利かな?

【3959】Re:余談
お礼  えなりん  - 04/12/6(月) 16:36 -

引用なし
パスワード
   ひろのしまさん
アドバイスありがとうございます。

初心者のくせに高度なことをやりたがるから
知恵熱が出そうです。

【3960】Re:いいフォームの作り方をアドバイス願い...
質問  えなりん  - 04/12/6(月) 16:47 -

引用なし
パスワード
   クロ師匠!
愚弟子を助けてください!

検索フォーム(メイン):検索年、検索月
一覧フォーム(サブ) :発注年月日、金額(発注年月日でSUM)
  ※レコード移動時イベントで Me.Parent!詳細フォーム.Requery
詳細フォーム(サブ) :発注年月日、取引先名、商品名、金額
  ※【再計算】ボタンで Me.Parent!一覧フォーム.Requery

詳細フォームで新たにレコードを入力したり、「金額」を変更した時は【再計算】ボタンに問題はなかったのですが、「発注年月日」や「取引先名」を変更しようとすると
【実行時エラー2118 Requeryの前にカレントフィールドを保存しろ!】
と、Accessに怒られてしまいました。
思いつくままに、色々な所に docmd.save を入れてみたりしたのですが、愚弟子には解決できません。
よろしくお願いいたします。

【3961】Re:いいフォームの作り方をアドバイス願い...
回答  クロ  - 04/12/6(月) 16:59 -

引用なし
パスワード
   ▼えなりん さん:
>クロ師匠!
>愚弟子を助けてください!

師匠なんて呼ぶな!
冗談はおいといて...

>  ※【再計算】ボタンで Me.Parent!一覧フォーム.Requery

【再計算】ボタンを以下のようにしてみてどうでしょう?
DoCmd.RunCommand acCmdSaveRecord
Me.Parent!クエリ1のサブフォーム.Requery

【3994】Re:いいフォームの作り方をアドバイス願い...
お礼  えなりん  - 04/12/8(水) 18:01 -

引用なし
パスワード
   クロさん ありがとうございます。
おかげさまで解決しました。
accessって奥が深すぎて溺れてしまいそうです。

師匠がダメなら先生と呼ばせてください。

2083 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free