• ベストアンサー

ACCESSで非連結のテキストボックスに値を出力するには?

 ACCESSの初心者な者で大変困っています。 フォームで非連結のテキストボックスに、あるフィールドの値を条件にしてテキストに出力をするにはどうしたらよいでしょうか。モジュールで関数を作成しようと努力しましたがオーバーフロー的な状態になってしまいました。IF文はわかりますが出力するすべがわかりません。お願いします。 ちなみに条件が20以上あります。 例 ID   点検時間   10    200 10    500 20    500 IDが10のとき点検時間+150 IDが20のとき点検時間+200 等

質問者が選んだベストアンサー

  • ベストアンサー
noname#60992
noname#60992
回答No.2

VBAで作ることも、クエリで対応することも、フォームのつくりで入力することも、可能であると思います。 VBAにて作成したときに発生しうる問題は、新しく条件が追加された際にコードの変更を行う必要が出てくるということです。 それを行いたくないのであれば、条件をテーブルに入れてそれを読み出す物を作らなくてはいけません。 どうせ条件をテーブルに入れるなら、クエリで対応するほうが簡単だと思います。 まずもともとのテーブル(仮に名称を[T_Data]とさせていただきます)に 加算後点検時間、加算後購入日 のフィールドを追加しておいたほうが良いと思います。 それから、別に条件を入れたテーブル(仮に名称を[T_Kasan]とさせていただきます。)を作成します。  項目及び内容としては、  ID 加算時間 加算日数 10 150       0 20 200       1 30  0       2 のようなものでよいと思います。 一括で既存のデータを更新させるには、 更新クエリを一つ作り、[T_Data]to[T_Kasan]を表示させIDでリレーションシップで結び結合プロパティを「'T_Data'の全レコードと'T_Kasan'の同じ結合フィールドのレコードだけを含める。」とします。 更新する内容としては T_Data の [加算後点検時間]に[T_Data]![点検時間] + [T_kasan]![加算時間] [加算後購入日]に[T_Data]![購入日] + [T_kasan]![加算日数] としてクエリを実行させれば[加算後点検時間]、[加算後購入日]に加算されたデータが入力されます。 データ入力時に、同時に加算後のデータを更新するのであれば、上記クエリの選択版を作ります。(特に抽出条件は要りません。) このクエリをフォームのレコードソースとして、点検時間の更新後処理で、加算後点検時間を[T_Data]![点検時間] + [T_kasan]![加算時間]のような形で入力すればよいと思います。(購入日の加算も同じように行います。)

farmhill
質問者

お礼

更新クエリを使うという発想がもともと無かったのでとても参考になりました。丁寧な対応とてもありがとうございました。

その他の回答 (2)

noname#60992
noname#60992
回答No.3

VBAで作ることも、クエリで対応することも、フォームのつくりで入力することも、可能であると思います。 VBAにて作成したときに発生しうる問題は、新しく条件が追加された際にコードの変更を行う必要が出てくるということです。 それを行いたくないのであれば、条件をテーブルに入れてそれを読み出す物を作らなくてはいけません。 どうせ条件をテーブルに入れるなら、クエリで対応するほうが簡単だと思います。 まずもともとのテーブル(仮に名称を[T_Data]とさせていただきます)に 加算後点検時間、加算後購入日 のフィールドを追加しておいたほうが良いと思います。 それから、別に条件を入れたテーブル(仮に名称を[T_Kasan]とさせていただきます。)を作成します。  項目及び内容としては、  ID 加算時間 加算日数 10 150       0 20 200      1 30  0      2 のようなものでよいと思います。 一括で既存のデータを更新させるには、 更新クエリを一つ作り、[T_Data]to[T_Kasan]を表示させIDでリレーションシップで結び結合プロパティを「'T_Data'の全レコードと'T_Kasan'の同じ結合フィールドのレコードだけを含める。」とします。 更新する内容としては T_Data の [加算後点検時間]に[T_Data]![点検時間] + [T_kasan]![加算時間] [加算後購入日]に[T_Data]![購入日] + [T_kasan]![加算日数] としてクエリを実行させれば[加算後点検時間]、[加算後購入日]に加算されたデータが入力されます。 データ入力時に、同時に加算後のデータを更新するのであれば、上記クエリの選択版を作ります。(特に抽出条件は要りません。) このクエリをフォームのレコードソースとして、点検時間の更新後処理で、加算後点検時間を[T_Data]![点検時間] + [T_kasan]![加算時間]のような形で入力すればよいと思います。(購入日の加算も同じように行います。)

noname#60992
noname#60992
回答No.1

どのようなフォームなのかもう少し情報をいただけますか? いっぺんにいくつのデータを表示させているのか、レコードソースはあるのかないのか? それによって、作り方が変わってきます。  もしもいっぺんに1レコード分のデータを表示させているなら、 ID と 加算時間 をテーブルにしてデータを入れておいて、あとはクエリをつくり合計時間を計算する。 そのクエリをレコードソースとしたフォームを作れば、非連結にする必要はないと思います。

farmhill
質問者

補足

書き方がわかりにくく申し訳ありません。フォームは表形式のものです。またレポートでも出力したいと思っています。クエリーを作成すると考えたのですが分岐する条件が多すぎて難しいと判断しましたが大丈夫なのでしょうか? 具体的に書きますと ID  点検時間  購入日  時期点検日という4つのフィールドがあります。IDによって点検時間に時間を加算するものが15条件ぐらいと購入日に加算するものが5条件ほどあります。

関連するQ&A

  • Access 連結テキストボックスのフィルタ操作を非連結テキストボック

    Access 連結テキストボックスのフィルタ操作を非連結テキストボックスから操作 したいのですが、うまく出来ません。 使用しているのはAccess2007です。 フォームはウィザード使用によるメインフォームとサブフォームです。 構造は下記の通りになります。 ======================================== -メインフォーム-  ID □□□□←(連結テキストボックス、テーブル[IDコード](IDコード(オートナンバー)、名前(テキスト))     ↑ (フィルタ操作を(指定の値に等しい)で非連結テキストボックスの数値を反映させたい。)                   非連結テキストボックス□□□□                      (数値記入してエンターを押すとフィルタ操作実行) ---------------------------------------------------------------------- -サブフォーム-  [ 名前 ]←メインフォームの連結テキストボックスと連動する。 [___][____][____]  [___][____][____] =========================================      使用目的:メインフォームでID検索し、サブフォームで新規登録。 ネットや本をあさっていろいろ試してみたのですが、 非連結テキストボックスの数値がそのまま連結テキストボックス(IDフィールド)に反映されません。 違った数値がでたりしてどうにもなりませんでした。 どうすれば実現可能なのかとても知りたいです。 どうかよろしくお願いします。

  • Access2010 テキストの連結

    よろしくお願いします。 Access2010を使用しております。 非連結のフォームに入力した情報を、 保存ボタンで、テーブルに追加しております。 そこで、サブフォームにある複数のテキストボックスをボックス毎に改行して、 一つのフィールドに入れたいと思っております。 一つ一つのテキストボックスは別テーブルを作っておりますが、メインにしているテーブルには、一つのフィールドに入れたいのです。 txt箱1、txt箱2、…txt箱20の空白ではないテキストボックスを改行して、一つのフィールドに追加したいです。 テキストボックスが、ランダムに記入されていたり、空白が間にあると、 うまく一つのフィールドに入れることができません。 改行が何個も入った箇所ができてしまいます。 間に空白があっても、改行を綺麗に入れて、 一つのフィールドに入力させるには、どうしたらよろしいでしょうか。 お世話になりますが、よろしくお願いします。

  • 検索結果を非連結のテキストボックスに表示させるには

    accessでシステム開発しています。初心者です。 検索結果を非連結のテキストボックスに表示させる方法を教えてください。 条件(1) フォームのレコードはどのテーブルとも紐づいていない 条件(2) 2つのテーブルから1つの検索ボタンで検索できるようにしたい テーブルA;案件マスタ テーブルB:リソースマスタ ・検索テキストボックス(1つ) ・検索ボタン(1つ) 条件(3) 案件ID、リソースIDはともに数値型です。 検索結果表示テキストボックス(非連結) ・案件IDテキストボックス:案件マスタより検索した案件IDを表示する ・リソースIDテキストボックス:リソースマスタより検索したリソースIDを表示する 下記のように考えていますが ・非連結のテキストボックスに検索結果を表示させる ・1つの検索ボタンで2つのテーブルから検索ができるようにする 方法がわかりません。 どのようなコードを追記したらいいのか教えていただけないでしょうか。 よろしくお願いいたします。 Private Sub btn検索ID_Click() Dim strFilter As String Me![案件マスタ].SetFocus If Me!案件IDテキスト = Me![案件マスタ]![案件ID] Then strFilter = " AND 案件ID= " & Me!案件IDテキスト End If If Me!テキストリソースID = Me![リソースマスタ]![リソースID] Then strFilter = strFilter & " AND リソースID= " & Me!リソースIDテキスト End If ’↓?いらないかも.. 'Forms!ID検索.Filter = Mid(strFilter, 6) Forms!ID検索.FilterOn = True Me.案件IDテキストボックス= Null Me.リソースIDテキストボックス = Null

  • Access フォーム上でのテキストボックスとテーブルの連結

    フォームヴィザードからフォームを作成すると、 テキストボックスと指定したテーブルを連結させることができるのですが、デザインビューでそれをするときに、テキストボックスのプロパティのコントロールソースにテーブル名を入れれば連結できるのかと思いきや、うまく表示されません。どこを設定すればテキストボックスとテーブルを連結できるのでしょうか?

  • アクセスでテキストボックスの値が空白だったら

    お世話になっております。 フォームのテキストボックスの値が0か空白だったら、レポート上に表示されるものを変えたいのですが、うまくいきません。 If [Forms]![フォーム1]![テキストボックス1].value = 0 Or [Forms]![フォーム1]![テキストボックス1].value = "" Then Me![レポート上のテキストボックス] = "無" Else [Forms]![フォーム1]![レポート上のテキストボックス1] = [Forms]![フォーム1]![テキストボックス1] & "ヶ月" End If これだと何も入っていないときに"ヶ月"と表示されてしまいます。どのように書けばよいのでしょうか? ご教授願えませんでしょうか?

  • アクセスのテキストボックスで

    質問の仕方が適切でないかもしれませんがご了承下さい。 Access2000を使用しています。 社員テーブルには「性別」フィールドがあり、男なら1、 女なら2が登録されています。その社員テーブルを基にした フォームを作成し、そこに非連結のテキストボックスを作成、 1なら男、2なら女と表示させたいのです。 新規登録時は「性別」フィールドに連結したテキストボックス の更新後に表示させるようなVBAを記述しておいたのでうまく いくのですが、登録済みのデータを呼び出した場合は表示され ません(更新しているわけではないので当然といえば当然なの でしょうが・・・)。 何かしなければいけないのは分かっているのですが、どのイベント 時にどのようなアクションをすればよいのか教えてください。 よろしくお願いします。

  • Access の非連結テキストボックスについて

    Access 2000 を使用しています。 フィールド名 データ型 Code     テキスト型(フィールドサイズ=8) Name     テキスト型(フィールドサイズ=50) というテーブルがあり、このテーブルを元に帳票フォームを作成しました。このフォームは参照用として使用したいので、 AllowEdits/更新の許可 AllowDeletions/削除の許可 AllowAdditions/追加の許可 のプロパティは全て「いいえ」にしてあります。 このフォームのフッタ部分に txtFilter というテキストボックスと cmdFilter というコマンドボタンを置き、フィルターの動作をさせるため、 Private Sub cmdFilter_Click()   If IsNull(txtFilter.Value) Then     FilterOn = False   Else     Filter = "Code LIKE """ & txtFilter.Value & "*"""     FilterOn = True   End If End Sub としました。(見やすくするため全角空白を使用しています。) さらに、txtFilter に 8文字 ( Code フィールドのフィールドサイズ ) 以上は入力できないようにしようと思い、 Private Sub txtFilter_KeyPress(KeyAscii As Integer)   If KeyAscii <> 8 Then     'Delete 以外の場合     If Len(txtFilter.Text) = 8 Then       KeyAscii = 0     End If   End If End Sub としましたが、ここで問題が起きました。 ・FilterOn = False あるいは、 ・FilterOn = True でも何レコードが表示されている状態(該当レコードが存在する文字が txtFilter に入力されている) という場合は良いのですが、該当レコードが存在しない場合、 txtFilter に入力されている文字を変更しようとすると、 txtFilter_KeyPress() 中の If Len(txtFilter.Text) = 8 Then のところで「実行時エラー'2185' コントロールがフォーカスを取得していないときに、コントロールのプロパティまたはメソッドを参照することはできません。」となってしまいます。 入力中のコントロールですから、「そんな馬鹿な!?」という感じなんですが、 If Len(txtFilter.Text) = 8 Then の前に txtFilter.SetFocus を入れても状況は同じでした。 フォームの「AllowAdditions/追加の許可」プロパティを「はい」にすれば、上記のようなエラーは発生しないのですが(なぜ、「AllowAdditions/追加の許可」プロパティの違いでそのようなことになるのかは理解できませんが)、ユーザーにデータの変更や追加、削除はさせたくないテーブルなので、追加を許すわけにもいきません。 何かいい回避方法はありませんでしょうか。 よろしくお願いします。

  • ラベルと連結したテキストボックスの背景色を変える方法

    環境:XP&ACCESS2003 フォーム上にラベルと連結したテキストボックスがあります。 フォーム上のある連結テキストボックスの値を参照してラベルと連結したテキストボックスの背景色を変える方法が思い浮かびません。ご存知の方、教えてください。よろしくお願いします。

  • アクセス非連結フォームのテキストボックスの制御

    いつも楽しく勉強させていただいております。 Access2007、win7で前任者が作ったものを元に類似のシステムを作ることとなりました。 その中にあるフォームで私にとってよくわからないものがあります。 そのシステムとは検索条件を入力し、条件に一致したレコードを表示するというものです。 条件を設定するフォームはレコードソースプロパティは空白、つまり非連結のフォームです。 したがって検索条件を入力するテキストボックスのコントロールソースプロパティも空白です。 こういった場合「入力する値は数字だけに限定」といった制御をするなら、入力規則プロパティを設定するか、更新前のイベントでコードを書くかするものだと思っていました。 ところがこのフォームにはそれらしき設定がまるでないのです。 それなのに数字以外の値、たとえば"a"などを入力すると 「このフィールドに入力した値が正しくありません。たとえば、数値型のフィールドに文字列を入力しました。」というメッセージをちゃんと表示し、誤った入力を受け付けません。 どなたかこの謎を解明してくださるとうれしいのですが。 前任者に直接聞けるといいのですが、その人は派遣社員でして契約終了後は連絡が取れないのです。

  • テキストボックスの値をテーブルに追加

    お世話になります。 Access2000 あるテーブルの一覧をフォームのリストボックス(lst_1)に表示し、 そのリストボックスから選択された行を フィールド上の各テキストボックス(非連結)に表示しております。 そこで、表示されているテキストボックスの値を変更した時に テーブルに変更された値を反映させる方法をご教授よろしくお願いします。

専門家に質問してみよう