• 締切済み

ACCESSのフォームについて

ACCESS勉強中の若輩もんです。 今一つのテーブルに顧客の住所や電話番号など15項目程度あります。 フォームで数人の入力作業員が打ち込んでいきます。 その中にツアーNo.というフィールドがありまして、それは一回フォームを開いて入力作業をしたらほとんど変わらず同じNo.を入れているのです。 作業の効率やミスを防ぐため、フォームを開く時にNo.を最初に入れるフォームを作り、一度の入力で顧客一人一人に反映させたいのです。 まだまだ初心者なので、ご教授お願いいたします。

みんなの回答

noname#140971
noname#140971
回答No.4

Option Compare Database Option Explicit Private Sub Form_Load()   Me.ツアーNo_既定値 = DBLookup("ツアーNo_初期値", "各種設定", "ID=1")   Me.ツアーNo.DefaultValue = Me.ツアーNo_既定値 End Sub Private Sub ツアーNo_既定値_AfterUpdate()   CnnExecute "UPDATE 各種設定 SET ツアーNo_初期値=" & Me.ツアーNo_既定値   Me.ツアーNo.DefaultValue = Me.ツアーNo_既定値   PauseMsg "[各種設定]![ツアーNo_既定値] を更新しました。", 2 End Sub 上記のやり方は、[各種設定]という様々な初期値等を記憶しておくテーブルを用意する方式。 フォームの起動時に[各種設定]に記憶された初期値を呼び出して表示します。 同時に関連するフィールドの既定値も更新します。 初期値が変更されたならば、[各種設定]を更新しメッセージで知らせます。 まあ、担当者が入れ替わろうが、途中でフォームを閉じようが同値の入力が保障されます。 さて、問題は、このやり方の実現の方法です。 僅か5行の VBAコードですが、なかなか難しいと思います。 Private Sub Form_Load()   Me.ツアーNo_既定値 = DLookup("ツアーNo_初期値", "各種設定", "ID=1")   Me.ツアーNo.DefaultValue = Me.ツアーNo_既定値 End Sub DBLookup 関数を Access がサポートしている DLookup関数に変更しました。 多少、実行速度が遅くなりますが2行は実現dきました。 Private Sub ツアーNo_既定値_AfterUpdate()   CnnExecute "UPDATE 各種設定 SET ツアーNo_初期値=" & Me.ツアーNo_既定値   Me.ツアーNo.DefaultValue = Me.ツアーNo_既定値   MsgBox "[各種設定]![ツアーNo_既定値] を更新しました。" End Sub 2秒経過したら自動的にメッセージを閉じる PauseMsg 関数も MsgBox 関数に変更。 多少、ユーザにとっては煩わしいですが、「そんなもん」と思ってもらうことにします。 さて、残るは CnnExecute 関数です。 これが無ければ、[各種設定]の更新も1行とはいきません。 そこで、 CnnExecute 関数だけは、以下に示しておきます。 Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)    MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & CnnErrors.Description & Chr$(13) & _       "・Err.Number=" & CnnErrors.Number & Chr$(13) & _       "・SQL State=" & CnnErrors.SQLState & Chr$(13) & _       "・SQL Text=" & strSQL, _       vbExclamation, " ADO関数エラーメッセージ" End Sub Public Function CnnExecute(ByVal strSQL As String) As Boolean On Error GoTo Err_CnnExecute    Dim isOK As Boolean    Dim cnn As ADODB.Connection       isOK = True    Set cnn = CurrentProject.Connection    With cnn      .Errors.Clear      .BeginTrans      .Execute strSQL      .CommitTrans    End With Exit_CnnExecute: On Error Resume Next    cnn.Close    Set cnn = Nothing    CnnExecute = isOK    Exit Function Err_CnnExecute:    isOK = False    If cnn.Errors.Count > 0 Then      ErrMessage cnn.Errors(0), strSQL      cnn.RollbackTrans    Else      MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _         vbExclamation, " 関数エラーメッセージ"    End If    Resume Exit_CnnExecute End Function

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

別のフォームに入力した値を、 複数のフォームへの入力で使うのでなければ わざわざ別のフォームに入力するのは面倒ですね 単に連続して入力する場合の省力を考えるのなら 最後に入力されたものを規定値にセットしてやる とするほうが簡単です ツアーNoの更新後イベントに Private Sub 数量_AfterUpdate() Me.ツアーNo.DefaultValue = "'" & Me.ツアーNo & "'" End Sub 表示されているものは規定値ですから他のものに書き換えることもできます

  • Te-Sho
  • ベストアンサー率52% (247/472)
回答No.2

初心者の方という事なので説明の仕方を悩んでしまうのですが... 制御としては可能です。 その代わりですがVBAを使用する方法が一番簡単です。 始めにAccessアプリケーション内で有効な変数を定義し、その変数を設定するための簡単なコードを標準モジュールとして作成します。 -------------------------------------------------------------- Option Compare Database Dim TourNo As Integer -------------------------------------------------------------- Public Sub setTourNo(inTourNo As Integer) TourNo = inTourNo End Sub -------------------------------------------------------------- Public Function getTourNo() As Integer getTourNo = TourNo End Function -------------------------------------------------------------- このモジュール名を仮にPropsとして保存します。 次にツアーNo入力フォームを作ります。選択用のコンボボックスの作り方などは割愛します。コンボボックス名はコンボ0とします。決定ボタンはコマンド0とします。 コマンドボタンのイベントプロパティでクリック時として -------------------------------------------------------------- Private Sub コマンド0_Click() Props.setTourNo (Me.コンボ0) DoCmd.Close acForm, "ツアー入力フォーム" DoCmd.OpenForm "入力フォーム" End Sub -------------------------------------------------------------- として標準モジュールのセットメソッドを呼び出します。 その後にツアーNo入力フォームを閉じて通常の入力フォームをオープンします。 あとはレコード入力のフォームでProps.getTourNoで設定したツアーNoが取得できるとおもいます。 設定は入力フォームの作り方によって変わります。 データ移動時等に直接代入してしまうとレコードが変わるたびに戻ってしまうとおもいますので、実際にいろいろと変更して試して見てください。 また、今回のポイントはVBAを使用した場合の変数の適用範囲(スコープ)ですので、ヘルプやネットを検索する際には上記語句で検索を行って見てください。(VBやVBAの基本ですので頭に入れておくと今後、役に立つと思います。) (ちょっとJavaっぽく書いてしまいました。適用範囲から考えれば標準モジュールPropsのTourNoをDimではなくPublicとし、そのままProps.TourNoとして参照しても問題ありません。その場合はgetTourNoメソッドは不要となります。) ちょっと急いで書きましたので、コンパイルエラー以外のデバッグしてありません。ごめんなさい。

  • toku8
  • ベストアンサー率26% (64/246)
回答No.1

フォームでヘッダー、フッターを表示(表示タイトル使用) ツアーNoのテキスト(入力項目)をヘッダー部分に作成 詳細部へ他の項目テキストを作成

関連するQ&A

  • Accessのフォームとテーブルについて教えてください。

    Access2003を使用しています。 既存のフォームAにフィールド3個を増やしました。 フォームAはテーブル(1)と連動していました。 追加したフィールドはテーブル(6)のものです。 ところがフォーム上で追加フィールドに入力が出来なくなりました。3フィールドのうち、ひとつはコンボボックスです。表示はされますが確定ができません。 フォームAのSQLステートメントではテーブル(1)・(6)以外にテーブル(2)・(3)・(4)・(5)が結合されています。 フォームAからするとテーブル(2)・(3)・(4)・(5)のデータはIDの名称を見るための参照用です。 テーブル(6)は、追加フィールドのコンボボックスが参照用で、他の2追加フィールドは、フォームから入力してテーブル(6)に反映させたいものです。 テーブル(6)の画面では入力できます。 フォーム上からは入力できません。 設定が何か欠けているからでしょうか? 他の質問では2つのテーブルをひとつのフォームにする場合は、クエリを別に設けた方がいいとなっています。フォームが出来上がっているので、できればクエリを設けずに行いたいのですが、よくない方法でしょうか? 手順なども踏まえて教えていただけると助かります。 よろしくお願いいたします。

  • フォームの作り方 アクセス2000

    アクセス2000を使い始めた初心者です。 顧客群に関するテーブルAがすでにあります。 このテーブルは事情があって、フィールドを追加することはできません。 もうひとつのテーブルBを作って、こちらに情報を追加するためのフィールドをいくつか作ります。 やりたいことは、 入力用のフォームに、テーブルAの情報内容を表示させて、テーブルBの入力をしたいのです。 クエリを作ってリレーションを設定するのだろうと思うのですが、具体的に進め方がわかりません。 よろしくお願いします。

  • Accessについて教えて下さい。

    Access初心者です。 フォームのクリック時のイベントで開いた別のフォームを、サブフォームのリンクフィールドように、リレーションの項目を入力しなくてもテーブルに反映させるにはどうしたらいいのでしょうか? 今現在の状況は テーブルは顧客リスト、送付物、問合せがあり顧客IDでリレーションになっています。フォームはそれぞれ作りました。 メインフォームは顧客フォームで問合せのサブフォームが組み込まれています。送付物フォームはボタンでクリック時開くようマクロで作成しました。where条件は[顧客ID]=[Forms]![顧客リスト]![顧客ID]となっています。 例えば手紙を送ることになり、顧客フォームで該当者を選択→ボタンをクリックし送付物フォームを開く →顧客IDを入力→その他必要事項を入力というかんじです。 顧客IDを入力しないと『フィールド顧客IDとキーが一致しているレコードをテーブル顧客リストで探すことはできません』とエラーになります。 問合せのサブフォームは顧客IDでリンクフィールドとなっています。 ID表示が必要ないので顧客IDは消してあります。 こちらは顧客フォームで該当者を選択し、顧客IDを選択しなくても入力すると問合せテーブルに顧客IDも反映されています。 問合せのように送付物にも顧客IDを選択しなくても反映させるようにするにはどうしたらよいでしょうか? 説明がわかりづらいとは思いますが、お分かりになる方よろしくお願い致します。

  • Access2003でのフォーム作成について(再度です)

    民宿の顧客管理をAccessでしようかと思っています。 氏名、住所、来客日などのフィールドを持つ顧客テーブル。 来客日、その日の献立1~17までを持つ日別献立テーブル。 この2つのテーブルからクエリーを作成し、 それを基にフォームを作ってデータを両方のテーブルに振り分けしようとしたんですが、うまくいきません。 クエリーで来客日同士を結ぶとデータは表示されますが新規の入力が出来ません。 顧客テーブルの顧客ID(オートナンバー)と 日別献立テーブルに顧客ID(数値型)を挿入し、2つを結んでも一方のデータしか表示されません。 おかしいとは思いますが、何がおかしいかわかりません。 何か良い方法があればお教え下さい。

  • access,フォームで最新のコンボ内容が反映不可

    フォーム入力時、顧客や商品データが無い場合、フォームを開いたままで、そのテーブルを開き、顧客や商品データを入力、閉じます。 フォームでは、顧客や商品データはコンボボックスで選ぶ用にしていますが、それにテーブルに新たに入力したそのデータが出てきません。 フィールド→更新、やフォームを閉じ開きすれば、現れます。 これを、例えばボタンを作成し、テーブルにデータ追加後、ワンクリックで、フォームのコンボボックスに新入力データを反映させるにはどうすれば良いのでしょうか(SQLの方が良いか?)。 また、フォームのコンボボックスのデータは、フォームを開いた時のテーブルやクエリのデータそのままで、コンボボックス選択時に再読み込みなどはしないのでしょうか? 正確にはコンボボックスのデータは順の関係でクエリで整順させたものです。 access2000でwindows2000です。 宜しくお願いいたします。

  • アクセスのフォーム

    アクセスでウィザードを利用して入力フォームを作りました。 当初はテーブルにあるデータがフォームにも反映されていたのですが、いろいろといじっているうちに、フォームのデータが消えてしまいました。コントロールソースをいじってみたのですが、直りませんでした。 フォームにも、テーブルのデータを反映させるためにはどこを直したらよいか教えて下さい。よろしくお願いします。

  • Access2007 フォームでの計算結果をテーブルに反映させるには?

    ビスタでAccess2007を使っています あるテーブルにA~Dまでのフィールドが設定されています。 フォームでフィールドA.Bは手入力して C.Dには計算式を設定して計算結果を表示させていますがテーブルに反映されません。 (フォームにはきちんど式通りの答えが表示されますがテーブルのフィールドC.Dは空っぽです。) 例 A・・・10,000 B・・・0.1 C・・・1,000(計算式 A*B) D・・・9,000(計算式 A-C) フォーム上で行った計算結果をテーブルに入力反映させるにはどうすればよいでしょうか? テーブルやフォームの作り方が悪いのか? 計算式の設定が悪いのか? なぜテーブルに反映しないのか理由がわかりません。 そもそもフォーム上での計算はテーブルには反映しないのか? だとすれば反映させるにはどうすればよいのでしょうか? テーブルのフィールドに計算式を設定することは出来るのでしょうか? 出来るとすればその方法は? 疑問だらけでどうすれば求める結果が得られるのかさっぱり解りません。 当方Access2007は初心者も同然ですのでわかりやすく解説して戴ければ幸いです。 よろしくご教授ください。

  • Access2000 フォームからレコード検索

    Access2000で質問です。 「顧客テーブル」を作ります。 顧客テーブルには以下のフィールドを設けます。 顧客ID(主キー) 名前 TEL 住所 変更住所 顧客IDから住所まではすでにデータが入っています。 「変更住所」に新しくデータを入れていきます。 その際に、フォームを利用したいと思っていますが、 新規フォーム(何もデータが入っていない)に顧客IDを入れたら、すでに顧客テーブルに入力されている名前、TEL、住所がパッと表示され、変更住所だけが空欄で表示されるようなフォームを作りたいと思います。 どのような方法がありますでしょうか? ぜひお知恵を貸してください。よろしくお願いいたします。

  • ACCESS

    どうか皆さんのお力添えを下さい。 ACCESS2010を利用して、以下の様な注文フォームaccdbを完成させていと考えています。現在、以下のところまで作業が進んでいます。 (1)テーブル (1) 注文履歴テーブル 注文ID・・・オートナンバー型 商品No・・・テキスト型 数量・・・数値型 (2) 商品テーブル 商品No・・・テキスト型 商品名・・・テキスト型 単価・・・通貨型 (3) 顧客テーブル 顧客ID・・・数値型 顧客名・・・テキスト型 パスワード・・・テキスト型 (2)フォーム (1)ログインフォーム 顧客ID入力用テキストボックス パスワード入力用テキストボックス ログインボタン・・・VBAを使って顧客テーブルに入っている顧客ID、パスワードが一致すれば注文フォームが開くところまではできました。 (2)注文フォーム(商品画像一覧があり、それをクリックすると商品No毎に個別に作成した注文フォームにジャンプします) ・コントロールボックスで数量を選ぶ ・注文ボタンを押すと注文履歴テーブルに商品ID、商品名、商品数が反映されます。 ここからが質問内容になります。 まず、はじめにログインフォームで入力後、照合OKになった顧客ID、パスワードを その後開いた注文フォームでの注文作業が完了、または中断するまでの間、 注文履歴に自動的に入力させ続けることはできますでしょうか?複数商品の注文が あった際は注文履歴テーブルにおいて複数レコードが連続して同じ顧客IDになるような 方法はあるでしょうか? ネット通販のようなものをイメージしております。 その他にもっと効率の良いやりかたなどあればご教授下さい。 どうぞよろしくお願いします。

  • Accessについて。フォームでデータ入力

    超基本的な質問ですみません。 仮に下記のような構造のデータベースがあったとします。 テーブル 都道府県名 フィールド 都道府県 テーブル 住所    フィールド 都道府県 市町村 テーブル 顧客    フィールド 都道府県 市町村 顧客にデータを入れていくために"顧客情報入力"というフォームを作ります。 "都道府県"をコンボボックスで選択しました。 市町村のコンボボックスに上の"都道府県"で選択した都道府県の"市町村"だけを表示させるためにはどうしたら良いのでしょうか。 クエリについてはある程度理解していたつもりなのですが、頭が真っ白になってしまいました。

専門家に質問してみよう