人生のプチ美学を教えてください!!

現在、Access2007にて、会社の顧客管理システムを作成している超初心者です。
本を数冊買い込んで、作成しているのですが、どうしてもわからず、質問をさせていただきました。どなたかご教授いただければと願っております。

基本的には、自社で取得するオリジナルの管理番号にて、商品の修理受付状態を管理するデーターベースです。
なお、管理番号は、商品別に取得しているので、商品が異なれば、同じ管理番号が存在します。
例えば、
  商品   管理番号
  AAA    001
  AAA    002
  BBB    001
  BBB    002
商品AAAの管理番号001というものは、1つしか存在しません。また、重複登録をしないような設定もしたいと思っていますが、そのやり方もよくわかっておりません。

現在、作成したテーブルならびにフォームは、
入力者テーブル   フィールドは、入力者ID(主キー)、入力者名、ふりがな
顧客テーブル    フィールドは、顧客ID(主キー)、顧客名、ふりがな、備考
商品テーブル    フィールドは、商品ID(主キー)、商品名、顧客参照ID、備考
管理番号テーブル  フィールドは、管理番号ID(主キー)、顧客名参照ID、商品参照ID、管理番号、備考
です。

このあとに、修理受付入力と修理受付明細、作業完了入力、作業完了明細、修理履歴の検索テーブル及び、フォームを作成する予定です。
(実際には、少し作成しているのですが、まったく機能していません。。)

1つの管理番号に対して、最終的に数回の修理を受付します。
現在、私が考えている、修理受付入力と修理受付明細、作業完了入力、作業完了明細フォームに関しては、以下の内容を必要とします。
■修理受付入力フォーム
 ・修理受付ID(主キー)
 ・入力日(自動入力)
 ・入力者(コンボボックス)
 ・顧客名(コンボボックス)
 ・商品名(コンボボックス)


修理受付入力フォームのサブフォームとして、
■修理受付明細テーブル
 ・修理受付明細ID(主キー)
 ・修理受付親ID
 ・明細行番号(入力した行について、行数を表示したい)
 ・管理番号(手入力)
 ・現在の状態(管理番号を入力したら自動的に状態が表示されるようにしたい。)
 ・修理回数(管理番号を入力したら自動的に過去の修理回数が表示されるようにしたい。)
 ・受付日(手入力)
 ・備考

*「現在の状態」については、受付をする際は、前回の修理分が「納品済」となっているので「納品済」、または、初めての受付の場合は、「新規」と表示したいです。また、修理受付が終わり、受付ボタンにて、作業完了フォームにコピーされた後は、作業完了明細にて、「受付中」と表示され、作業完了登録をすると、また「納品済」と表示したい。

*修理回数は、作業完了明細の完了日を入力した数をCountして、それに作業完了明細にて、修理不能返却をしたものは、完了日のCountマイナス1の数字を表示したい。

*商品AAAに対して、管理番号が異なるものをまとめて20個受付したりすることがあるため、サブフォームにて、異なる管理番号のものを、まとめて入力できるようにしたく、サブフォームを作りました。


■作業完了入力フォーム(修理受付をすると、内容が作業完了にコピーされるようにするつもりです。)
 ・作業完了受付ID(主キー)
 ・入力日
 ・入力者
 ・顧客名
 ・商品名

作業完了入力フォームのサブフォームとして、
■作業完了明細テーブル
(基本的には、作業完了入力フォームと同様、コピーされ、商品受付明細のフォームに、追加したフィールドがあります。)
 ・作業完了受付明細ID(主キー)
 ・作業完了受付親ID
 ・明細行番号
 ・管理番号
 ・現在の状態
 ・修理回数
 ・受付日
 ・完了日(手入力)
 ・修理不能返却(Yes/No型)←修理不能の場合はチェックを入れる。
 ・備考


今、つまずいている部分は数か所あります。
 ・商品AAAの管理番号001という商品は、1つしか存在しません。管理番号テーブルにて、重複登録をしない設定をしたい。
 ・明細行番号の表示の仕方
 ・修理受付明細フォームでの、現在の状態、修理回数の自動表示の方法。(クエリの作り方から、フォームへの反映の仕方が全くわかりません。)


どなたか、ご教授くださいませ。どうぞよろしくお願いいたします。

A 回答 (37件中21~30件)

#17の「9.このボタンを押したとき、以下のコードが実行されるようにする」は消し忘れです。

    • good
    • 0

迂回でVBA実行ができるようなので、先に進めましょう。

ただ先々不都合も考えられるので、プロトタイプが一応完成した時点で、もう一度マイクロソフトの有償サポートを検討してみては?
ともかくこれで#5に書いた工程表の1.がようやく終わった状態です。
次は
1.管理台帳フォームを作成する。データのSQL文は
SELECT 管理テーブル.管理ID, 管理テーブル.管理番号, 管理テーブル.商品ID, 管理テーブル.顧客ID, 顧客テーブル.顧客名, 管理テーブル.登録日, 商品テーブル.商品名
FROM (管理テーブル LEFT JOIN 顧客テーブル ON 管理テーブル.顧客ID = 顧客テーブル.顧客ID) LEFT JOIN 商品テーブル ON 管理テーブル.商品ID = 商品テーブル.商品ID
ORDER BY 管理テーブル.管理番号;

2.メニューバーの「表示」から「フォームヘッダー/フッター」を表示するようにする

3.ヘッダーにはフィールドリストから「商品ID」「商品名」「管理ID」を貼り付ける

4.詳細にフィールドリストから「管理番号」を貼り付ける
5.詳細にツールボタンからコンボボックスを貼り付け、コントロールソースを「顧客ID」、値集合タイプを「テーブル/クエリ」値集合ソースのSQL文を
SELECT 顧客テーブル.顧客名, 顧客テーブル.顧客ID
FROM 顧客テーブル;
とする

6.商品一覧フォームをデザインモードで開き、商品名の右側にボタンを、適当な場所に「商品ID」テキストボックス追加する

7.「商品ID」テキストボックスは書式で「可視」を「いいえ」にする

8.ボタンを押すと管理フォームが開くようにし、「特定のレコードを表示する」で「商品ID<->商品ID」とする。これはVBAで設定しても、マクロでやっても構わない

9.このボタンを押したとき、以下のコードが実行されるようにする

実行して、商品に対応した管理番号と顧客の組み合わせが表示されることを確認。もちろん、これに先立ち「管理テーブル」と「顧客テーブル」には、適切な値がはいっているものとする
「Countと受付状態の表示について」の回答画像17

この回答への補足

>8.ボタンを押すと管理フォームが開くようにし、「特定のレコードを表示する」で「商品ID<->商品ID」とする。これはVBAで設定しても、マクロでやっても構わない

についてですが、VBAでした場合、下記の内容で間違いないでしょうか。。

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "管理番号フォーム"
stLinkCriteria = "[商品ID]=" & Form_商品一覧フォーム![商品ID]
DoCmd.OpenForm stDocName, , , stLinkCriteria


昨晩、どちらも試してみたのですが、マクロですると、パラメータの入力をもとめられたり、VBAですると、入力内容が間違っているようで、うまくいかず、悪戦苦闘していました(汗)

補足日時:2009/03/20 07:34
    • good
    • 0

左上方でアクセスのアイコンの右側です。

その近辺の画像を貼り付けます。
「Countと受付状態の表示について」の回答画像16

この回答への補足

出来ました!!!
完璧に絞り込んで、中分類選択フォームを表示できました!!

ほんとうに、手とり足とり、ありがとうござます!!!

補足日時:2009/03/19 13:32
    • good
    • 0

>やはり、確認をした方が、この先の作業のためには良いでしょうか



良いと思いますが、有料と云うことでは難しいですね。
別の方法を試してみましょう
1.モジュールの作成
2.Module1がほとんど空白の状態で開くので、ツールバーの左から二番目のボタンを利用し、プロシージャの追加をします
3.名前は(適当でよいのですが)「中分類選択フォームOpen」種類は「function」後はディフォルトで
4.空白のファンクション中身に以下をコピーペースト
Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "中分類選択フォーム"
stLinkCriteria = "[中分類ID]=" & Form_中分類一覧フォーム![中分類ID]
DoCmd.OpenForm stDocName, , , stLinkCriteria

5.中分類一覧フォームをデザインモードで開き、ボタンを追加し、ウィザードはキャンセル
6.プロパティで「クリック時」の右「...」ボタンを押し、マクロビルダを起動
6.マクロのアクションをプロシージャの実行にし、下方のプロシージャ名テキストボックスに「中分類選択フォームOpen () 」
7.上記6.の作業はテキストボックス右側の「...」式ビルダボタンを押して、関数の「+」ボタンで中身を展開し、当該データベース名のmodule1の中から選択でできます

これでマクロ経由のVBA実行ができるはずですがどうでしょうか?

この回答への補足

早速のご回答ありがとうございます!!

いきなりで申し訳ないのですが、

>2.Module1がほとんど空白の状態で開くので、ツールバーの左から二番目のボタンを利用し、プロシージャの追加をします

上記の「ツールバーの左から二番目のボタンを利用し、プロシージャの追加をします」がわかりません(汗)

ツールバーのボタンって、どれでしょうか??(大汗)

ほんとうに、すみません。。

補足日時:2009/03/19 12:34
    • good
    • 0

#14を書いたつもりでいましたが、上手くアップロードされなかったようです。



>#7まで完了した状態になりましたので、恐れ入りますが、続きを
と云うことですが、マイクロソフトに質問できるのであれば、「#12のVBAは何故機能しないか?」を確認できないでしょうか。管理番号の自動生成など、どうしてもVBAによる記述が必要になります。マクロからさらにVBAを起動する方法もあるでしょうが、例えばボタンを押したとき、VBAで全て記述した方が自然ですし、メンテナンスも楽でしょう。

この回答への補足

先日は、マイクロソフトの無償サポートにて、確認をしました。
そこへ、早速、再度、#12のVBAについて確認をしようとしたのですが、VBAに関しては、有償サポートになるとのことで、確認できませんでした。。

やはり、確認をした方が、この先の作業のためには良いでしょうか。

補足日時:2009/03/19 09:58
    • good
    • 0

弱りましたね(^^;


あとは「中分類一覧フォーム」の「コマンドボタン28」のプロパティが添付画像のようになっているか?ウィンドウタイトルは違っていて仕方ありません。
「Countと受付状態の表示について」の回答画像13

この回答への補足

ご連絡、遅くなりました!!

コマンドボタンのウィザードについて、マイクロソフトに確認したところ、やはり、希望の動きができないみたいなので、マクロで開く方法を教わり、「商品中分類一覧フォーム」から、希望の「商品中分類名称」をクリックすると、商品中分類選択フォームを絞り込んで表示することができました。(ボタンはつけていません)

ちなみに、マクロは、
「フォームを開く」と「再クエリ」をアクションに入れ、「フォームを開く」でのWhere条件式は下記の通りです。

[商品中分類テーブル]![商品中分類ID]=[Forms]![商品大分類選択フォーム]![商品中分類一覧フォーム].[Form]![商品中分類ID]


ほんとうに、お手数をお掛けして、申し訳ございませんでした。

ということで、#7まで完了した状態になりましたので、恐れ入りますが、続きをご教授くださいますようお願い申し上げます。

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

補足日時:2009/03/17 10:40
    • good
    • 0

>何か、方法はございますでしょうか



1.確認。コピー・ペースとした結果は、下記のようなPrivate Subになっているか。

Private Sub コマンド9_Click() '←ここの数字は違っていても良い
Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "中分類選択フォーム"
stLinkCriteria = "[中分類ID]=" & Me![中分類ID]
DoCmd.OpenForm stDocName, , , stLinkCriteria
End Sub

2.ブレークポイントの設定
stDocName = "中分類選択フォーム" 'この行にカーソルを合わせて、F9キー
その行が茶色く反転され、ブレークポイントが設定される。この状態でフォームをアクティブにし、当該ボタンを押してみる。正常に動作すればブレークポイントで黄色く反転してプログラムの実行が都丸。

この回答への補足

早速のご連絡、ありがとうございます。

コピーペーストした内容は下記のとおりです。

Private Sub コマンド28_Click()
Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "中分類選択フォーム"
stLinkCriteria = "[中分類ID]=" & Me![中分類ID]
DoCmd.OpenForm stDocName, , , stLinkCriteria

End Sub


>2.ブレークポイントの設定

についてですが、ご指定の行で茶色く反転しましたが、黄色に反転せず、やはりフォームは開かない状態です。。。

きっと、とても簡単なことなのだろうに、つまずいてすみません。。

補足日時:2009/03/16 14:40
    • good
    • 0

>上記、完璧にできていますが、ボタンを押すと、フォームは開くのに、絞込みだけができないです



ウーン、良く判りません。以前提示された、埋め込みマクロの内容もおかしくないし。仕方ないので、強引にVBAを書く方法で試してみては?

1.ボタンを貼り付け、ウィザードが起動したら、すぐにキャンセルボタンを押す

2.当該ボタンのプロパティで、イベントを見て、クリック時(多分空白になっている)の右側にある「...」ボタンを押す

3.ビルダの選択で「コードビルダ」を選択

4.以下のようなコード(コマンド9の数字は色々)が生成されたら(バージョンが違うので、異なるコードが生成されるかも)
Private Sub コマンド9_Click()

End Sub

4.中間の空白部分に、下記をコピー・ペーストする

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "中分類選択フォーム"
stLinkCriteria = "[中分類ID]=" & Me![中分類ID]
DoCmd.OpenForm stDocName, , , stLinkCriteria

5.これを実行するとどうなるでしょうか?

この回答への補足

早速のご回答、ありがとうございます。

VBAをコピペして試してみましたが、まったく中分類選択フォームが開かず、無反応です。

何か、方法はございますでしょうか。。

補足日時:2009/03/16 12:55
    • good
    • 0

埋め込みマクロはAccess2007の新機能なんですね。

こちらで試験ができないので弱りました(^^;

>中分類一覧フォームから中分類IDで関連づけるフォームは中分類選択フォームですよね

ちょっと私の方で混乱していました。結論から云うと、「中分類選択フォーム」はなくても商品を絞り込むことができます。#9に着けたのはその画像でした。しかし「中分類選択フォーム」を介在させた方が、中分類名称を表示しながら、商品の絞り込みができます。ともかく以下は確認ですが
1.#9画像のようなところで「中分類ID<->中分類ID」とできたか?
2.「中分類選択フォーム」の「移動ボタン」を「はい」に替え、レコードの移動はできるか?
3.レコードが移動できたら、それに従い商品の絞り込みは変化するか?

この回答への補足

やっぱり、Accessのバージョンの違いだったのですね。

中分類選択フォームについては、了解しました!!

また、下記の件ですが、
>1.#9画像のようなところで「中分類ID<->中分類ID」とできたか?

できました!!ばっちり同じ画面が出てきて、まったく同じ作業ができました!!

>2.「中分類選択フォーム」の「移動ボタン」を「はい」に替え、レコードの移動はできるか?

できます!!

>3.レコードが移動できたら、それに従い商品の絞り込みは変化するか?

絞込み内容も完璧に変化しています!!


上記、完璧にできていますが、ボタンを押すと、フォームは開くのに、絞込みだけができないです。。

補足日時:2009/03/16 05:21
    • good
    • 0

>「商品選択」ボタンについては、あれから何度かやり直したりしてみましたが、やはり、うまく動作しません



ボタンを貼り付けてから、ウイザードの各段階をキチンとチェックしてください。とくに「関連づけるフィールド」を指定する段階。関連づけが正しくできれば、下の方に表示される「関連づけるフィールド」の右側に「中分類ID<->中分類ID」が出現します。
またボタン作成後、そのボタンのプロパティで「イベント」の「クリック時」を見て、右の方にある「...」ボタンを押すと、以下のようなコードが見えるはずです

On Error GoTo Err_コマンド6_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "商品一覧フォーム"

stLinkCriteria = "[中分類ID]=" & Me![中分類ID]
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_コマンド6_Click:
Exit Sub

Err_コマンド6_Click:
MsgBox Err.Description
Resume Exit_コマンド6_Click
「Countと受付状態の表示について」の回答画像9

この回答への補足

すみません、何度も最初から見直し、「商品選択」ボタンを試みているのですが、やはりうまくいきません。

なお、確認なのですが、中分類一覧フォームから中分類IDで関連づけるフォームは中分類選択フォームですよね?!商品一覧フォームですか?
ただ、現時点では、どちらにしても絞り込まれません。

また、ボタンのプロパティで「イベント」の「クリック時」を見て、右の方にある「...」ボタンを押しても、ご連絡いただいたコードはみえません。

ウィザードでボタンを作成した後、「イベント」の「クリック時」の「...」を押して表示されているものは、以下の通りです。
「アクション」 フォームを開く
「フォーム名」 =ChrW(20995) & ChrW(20855) & ChrW(20013) & ChrW(20998) & ChrW(-26530) & ChrW(-28552) & ChrW(25246) & ChrW(12501) & ChrW(12457) & ChrW(12540) & ChrW(12512)
「ビュー」 フォーム ビュー
「フィルタ名」 空白
「Whrer条件式」 "[中分類ID]=" & [中分類ID]
「データモード」 空白
「ウィンドウモード」 標準

また、コマンドボタンウィザードの最終段階、「ボタン名を指定してください」にて、

「注意:このウィザードでは、Access2003、およびそれ以前のバージョンでは実行と編集ができない埋め込みマクロが作成されます。」
と書かれています。何か関係ありますでしょうか。

ちなみに、ボタン作成後、プロパティの「イベント」「クリック時」には、「埋め込みマクロ」と記載されます。

恐れ入りますが、間違っている箇所お分かりになりますでしょうか。
ほんとうに、お手数をお掛けいたしまして、申し訳ございません。。

補足日時:2009/03/14 22:34
    • good
    • 0

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

関連するカテゴリからQ&Aを探す