- 締切済み
Access: チェックボックスで入力可能に
Access初心者です。宜しくお願い致します。 Formを作成中です、株式ティッカーを入力すると会社名や事業内容をテーブルから自動入力するように設定しました。ここからが質問です、「未上場」というチェックボックスにチェックを入れると、(1)株式ティッカーの欄を入力不可にすることは出来ましたが、(2)会社名の欄に手入力をする(株式ティッカーとの紐づけの解除?)ことが出来ません。簡単な設定方法をご教示下さい。ありがとうございます。
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- chayamati
- ベストアンサー率41% (260/624)
お早うございます >紐づけの解除? ★これがリレーションシップなら<1:∞>の完全整合性だけにして下さい 紐づけ両フィールドに重複の情報があると重複数×重複数のレコード数に なってしまいます。 <∞:∞>のままでは完全整合性のリレーションは組めません 重複の無いフィールドとは 1.データ型がオートナンバー型 2.主キー(連読の複数のフィールドでの主キーも含む) 3.インデックスプロパティーが重複なし ★既に設定済みとは思いますが Accessファイルを起動ときに<アクセスオプション>で 最初に開くフォームを設定できます。 ファイル→オプション→現在のデータベース →フォームの表示のプルダウンリスト→メニュー→OK
- chayamati
- ベストアンサー率41% (260/624)
進行していますか?お忙しいようですね あるいは、検討外れの回答ですか、何かコメント頂けませんか? ------------------------------------------------------------ 添付は実行結果です。 添付中央は登録画面:レコードの追加行があります。 右は上場企業と未上場企業:タイトルが逆になっています、 追加行がありません、フィルタがかかっています 動作確認なら テーブル ・T_企業マスタ(Yes/No型の未上場のフィールドの確認) ・T_Astra ・T_Speeda ・プロフィール(数値型のフィールド:期初月) これ以外の項目はVBAの対象となっていません メニューフォームは レコードソースのテーブルをプロフィールとし、プロフィールのフィールドから期初月を配置 日付型のテキストボックスを基準日と 基準日から求める11個の非連結のボックス 期初月、期初日、開始日、期末日、繰越日、 月初日、月末日、前年度、当年締日、次年期初、次年期末 VBA起動用のラベルボックス 8個 前日、翌日、前月、翌月、前年、次年、終了、表題 課題解決の「オプショングループ」ツールを配置して VBAをコピペすると完成です。 オプショングループをフォームにドラッグすると 複数のボックスが作られます。 1.オプショングループ枠:この名前をFgとします 2.オプションボタン:ボタンの数だけの1からの連番がとられ、 クリック選択したボタンの値が枠の値です 3.枠とボタンのラベル:書式プロパティに 枠名前:Fg ボタンの名前:F_FM登録、上場企業、未上場企業
- chayamati
- ベストアンサー率41% (260/624)
メニューForm ・他のフォーム、クエリ、レポートの検索値を確定させてから開きます 検索値には、今回のように上場企業、未上場企業、両方の条件電話番号 F_FMをワンクリックで開くのが課題でしたが 通常 日報、月報、年報のように期間(開始日~終了日) 社員、顧客も検索項目になります。 この場合はコンボボックッスから開きます また、納品書等には自社名、所在地等の自社情報も必要でしょう。 これらをプロフィールと呼ぶテーブルに登録しておきます。 添付はメニューフォームの一例電話す。 ・フォームヘッダーにプロフィールのテキストボックス ・詳細部分:ほとんどがラベルボックッスで 非連結のテキストボックスボックッス名を基準日(規定値=Date()) 今回のオプショングループとオプションボタン オプショングル―プ内のオプションボタンは値を持っていて選ばれると オプショングループの値となります ・フォームフッタ:プロフィールの期初月と基準日より求めた 日付のオンパレード 画面を横断している標題バーはホームヘッダのプロフィールの上に配置し ダブルクリックで非表示にすると下に隠れていたプロフィールが表示され 編集が出来ます。 以下はメニューのコーディングリストです。 コピペして動作を確認ください。 ----------------------------------------------------------------- Option Compare Database Option Explicit Private Sub Form_Load() 基準日 = Date 基準日変更RTN End Sub '-------------------------- Private Sub 基準日変更RTN() If Month(基準日) < 期初月 Then 期初日 = DateValue(Year(基準日) - 1 & "/" & 期初月 & "/" & 1) Else 期初日 = DateValue(Year(基準日) & "/" & 期初月 & "/" & 1) End If 開始日 = 期初日 期末日 = 期初日 + 366: 期末日 = 期末日 - Day(期末日) 繰越日 = 期初日 - 1 月初日 = 基準日 - Day(基準日) + 1 月末日 = 月初日 + 31: 月末日 = 月末日 - Day(月末日) 前年度 = 期初日 - 360: 前年度 = 前年度 - Day(前年度) + 2 If 基準日 = 月末日 Then 当年締日 = 月末日 Else 当年締日 = 月初日 - 1 End If 次年締日 = 当年締日 + 370 - Day(当年締日 + 370) 次年期初 = 期末日 + 1 次年期末 = 次年期初 + 370 - Day(次年期初 + 370) End Sub '--------------------------------------- Private Sub 株評価推移登録_Click() DoCmd.OpenForm "株評価推移登録" End Sub '--------------------------- Private Sub 基準日_DblClick(Cancel As Integer) 基準日 = Date 基準日変更RTN End Sub '------------------------------------------------ Private Sub 基準日_AfterUpdate() 基準日変更RTN End Sub '--------------------------------------------------- Private Sub 次年_Click() 基準日 = 期末日 + 1 基準日変更RTN End Sub '----------------------------------------------- Private Sub 終了_Click() DoCmd.Quit End Sub '----------------------------------------------- Private Sub 前年_Click() 基準日 = 期初日 - 1 基準日変更RTN End Sub '-------------------------------------------------------- Private Sub 前月_Click() 基準日 = 基準日 - Day(基準日) 基準日変更RTN End Sub '------------------------------------------ Private Sub 前日_Click() 基準日 = 基準日 - 1 基準日変更RTN End Sub '------------------------------------- Private Sub 表題_DblClick(Cancel As Integer) If 表題.Visible = False Then 表題.Visible = False = True Else 表題.Visible = False End If End Sub '--------------------------------------------------------- Private Sub 翌月_Click() If Day(基準日) > 20 Then 基準日 = 基準日 + 20 Else 基準日 = 基準日 + 31 End If 基準日 = 基準日 - Day(基準日) + 1 基準日変更RTN End Sub '--------------------------------------------------------- Private Sub 翌日_Click() 基準日 = 基準日 + 1 基準日変更RTN End Sub -----------------------------------------------------------------
- chayamati
- ベストアンサー率41% (260/624)
回答No.4のF_FMのVBAに余分な命令文2行混じっていました 次の2行を除去して下さい ---------------------------------- Form.AllowEdits = False 'レコードの編集禁止 株式コード.Locked = False 'フィールドの編集禁止 ----------------------------------- いきなり「既定値_RTN」ガ出てきましたが これは別の --------------------------------------------------- Private Sub 既定値_RTN() Form.AllowAdditions = True 'レコードの追加許可 Form.AllowEdits = True 'レコードの編集許可 Form.AllowDeletions = True 'レコードの削除許可 株式コード.Locked = False 'フィールドの編集許可 End Sub ----------------------------------------------------- を呼び出す手法で、何度も同じ流れ、 また処理作業を分割するときの手法です ★添付は左がフォームのプロパティーで右がフィールドのプロパティーです これは静的にするときで、動的に設定するにはVBAによります。 -------------------------------------------------------- 返事漏れがないか、最初から見直してみました。 >株式ティッカーを入力すると会社名や事業内容をテーブルから自動入力するように設定しました。 ★このテーブルはファイル内にあるテーブルですか 他のファイルよりインポートしていますか >「未上場」というチェックボックスにチェックを入れると、 (1)株式ティッカーの欄を入力不可にすることは出来ましたが、 ★これは会社名のフィールドですね VBA 社名.Locked = True 'フィールドの編集禁止 で可能ですね >(2)会社名の欄に手入力をする(株式ティッカーとの紐づけの解除?) ★この紐づけはリレーションではなく、株式ティッカーは検索キーワードですか -------------------------------------------------------------------------------- >「未上場」と言うチェックボックスを作っています。 「未上場」と言うチェックボックスに( チェック)を入れた際は、 「株式コード」が選択不可で「社名」は任意で入力可能にしたいと思います。 ★株式コード.Visible =False とIIF分で可能ですね >「社名」と「株式コード」は「T_上場企業マスタ」から 「業種」は「T_Astraマスタ」 「設立日」は「T_Speedaマスタ」から、 「株式コード」でリレーションを組み「Q_上場企業」を作っています。 ★T_企業マスタ、T_Astraマスタ、T_Speedaマスタ間で 参照整合性のリレーションのテーブル設計で、 株式コードのフィールドはどれか一つのテーブルに作っておけば リレーションをつたってどのテーブルからも参照できます この時にでかい顔を出すのがテーブルデザインのルックアアップによる コンボボックスで設定はクエリ作成と同じ要領です。 Excelの入力規則のリストのプルダウンリストで、 リストの並び順は読み順、コード順 リスト行数も画面が許す限りOKです。 私は48行、縦長のディスプレイがないものかと 事前にリレーションの検索キーを調べる必要もなく、 -----------------------------------------------------------------------------
- chayamati
- ベストアンサー率41% (260/624)
今日は 回答No.3は無視して下さい。 1.メニューフォームの作成 作成→空白のフォーム 1-1.オプショングループ枠の配置 →オプショングループ→フォーム上へドラッグ→適当に大きさを決める →フレームの名前をFgに変更→左上のラベルをFgに変更 1-2.オプションボタンを枠内に配置 →オプションボタン→枠内→オプションXXをF_FM登録に変更 →オプションボタン→枠内→オプションXXを上場企業に変更 →オプションボタン→枠内→オプションXXを未上場企業に変更 1-3.オプショングループ枠値が1、オプションボタンの値が1,2,3になっている事を確認 1.4.VBAをコピペ ------------------------------------------------------- Option Compare Database Option Explicit Private Sub Fg_Click() Select Case Fg Case 1 DoCmd.OpenForm "F_FM" Case 2 DoCmd.OpenForm "F_FM", , , "未上場=True" Case 3 DoCmd.OpenForm "F_FM", , , "未上場=False" End Select End Sub ------------------------------------------------------------------------ 2.F_FMの仕上げ 2.1.T_企業マスタに未上場の項目を追加 企業マスタをデザインモードで開く →最後尾のフィールドに「未上場」データ型 Yes/No型→既定値を1 2.2.F_FMへ項目追加 2.2.1フォームをデザインモードで開く →未上場をフォームへ配置 →テキッスットボックッス(ボックス名:表題)を配置 2.3.VBAをコピペ ----------------------------------------------------------------------------- Option Compare Database Option Explicit Private Sub Form_Load() 既定値_RTN Form.AllowEdits = False 'レコードの編集禁止 株式コード.Locked = False 'フィールドの編集禁止 Select Case Forms!メニュー!Fg Case 1 表題 = "F_FM登録" Case 2 表題 = "上場企業" Form.AllowAdditions = False 'レコードの追加禁止 Form.AllowDeletions = False 'レコードの削除禁止 Case 3 表題 = "未上場企業" Form.AllowAdditions = False 'レコードの追加禁止 Form.AllowDeletions = False 'レコードの削除禁止 株式コード.Locked = True 'フィールドの編集禁止 End Select End Sub Private Sub 既定値_RTN() Form.AllowAdditions = True 'レコードの追加許可 Form.AllowEdits = True 'レコードの編集許可 Form.AllowDeletions = True 'レコードの削除許可 株式コード.Locked = False 'フィールドの編集許可 End Sub ------------------------------------------------------------
- chayamati
- ベストアンサー率41% (260/624)
テーブルとリレーションが出来ましたら次に進みます。 条件付きでフォームを開くときは前もって条件の情報の値を確定します。 確定していないフォームまたはクエリを開くと先ず入力窓が現れるのは体験済みですね。 開く条件は、期間、特定顧客、と多様です。 検索値を確定するフォームを作成し、 同じフォーム上に目的のフォームを開く配置すれば一石二鳥ですね そのフォームの名前をメニューとしたのが添付です。 メニューフォームについては色々記述したいですが、きりがありません。 --------------------------------------------------------- メニューのVBA Option Compare Database Option Explicit Private Sub F_FM登録_Click() If IsNull(Fg) Then DoCmd.OpenForm "F_FM" Else DoCmd.OpenForm "F_FM", , "未上場=[forms]![メニュー]![Fg]", "未上場=[forms]![メニュー]![Fg]" End If End Sub Private Sub Fg_LostFocus() Select Case Fg Case Fg = 1 F_FM登録 = "未場企業" Case Fg = -1 F_FM登録 = "上場企業" Case Else F_FM登録 = "F_FM登録" End Select End Sub ----------------------------------------------- F_FMのVBA Option Compare Database Option Explicit Private Sub F_FM登録_Click() If IsNull(Fg) Then DoCmd.OpenForm "F_FM" Else DoCmd.OpenForm "F_FM", , "未上場=[forms]![メニュー]![Fg]", "未上場=[forms]![メニュー]![Fg]" End If End Sub Private Sub Fg_LostFocus() Select Case Fg Case Fg = 1 F_FM登録 = "未場企業" Case Fg = -1 F_FM登録 = "上場企業" Case Else F_FM登録 = "F_FM登録" End Select End Sub
- chayamati
- ベストアンサー率41% (260/624)
お待たせしました >「F_FM」と言うフォームに、3つのテーブルを1つにした 「Q_上場企業」から「株式コード」「社名」「業種」「設立日」などのフィールドと、 「未上場」と言うチェックボックスを作っています。 ★「未上場」と言う非連結のチェックボックスを F-FMを開くためのフォーム上にも配置します これとF_FM上の比較して上場企業だけ、未上場だけの表示されます。 >「株式コード」が選択不可で「社名」は任意で入力可能にしたいと思います。 ★ フォームのプロパティーに追加の許可、削除の許可、更新の許可 フィールドのプロパティーに編集ロックがありますが レコードのあるフィールドの値ではありません >「社名」と「株式コード」は 「T_上場企業マスタ」から 「業種」は「T_Astraマスタ」 「設立日」は「T_Speedaマスタ」から、 「株式コード」でリレーションを組み「Q_上場企業」を作っています。 宜しくお願い致します。 ★次のように解釈しました テーブルは「T_企業マスタ」、「T_Speeda」、「T_Astra」の3つ ・ T_企業マスタ ID (オートナンバ型、主キー) 株式コード(整数型、重複なし) 未上場(Yes/No型) ・T_Speeda ID (オートナンバ型、主キー) 株式コード(整数型、重複あり) 設立日(日付/時刻型) ・T_Astra ID (オートナンバ型、主キー) 株式コード(整数型、重複あり) 業種(テキスト型) ★回答 「T_Speeda」、「T_Astra」は別のPcで登録されると考え、 T_企業マスタIDへのリレーション用のフィールドを追加し ★添付図の右は、リレーション設定の過程と、 リレーションの線を右クリックすることで確認できます。 リレーションシップはフォーム、レポートに反映されます1:∞の完全整合性です。 また、人間社会もこれに似ています。 父親は複数の子供を持つことが出来ますが、 子供は複数の父親を持てません 違う点は父親が亡くなっても子供は生きて行けますが、 子のテーブルのレコード数が0になるまで削除する事が出来ません 株式コードとは新聞の株価欄のコードですか 「T_Speeda」、「T_Astra」とはどのようなものですかどの様なものですか これは興味本位です。差し障りがあるようでしたらよろしいです。
- chayamati
- ベストアンサー率41% (260/624)
>Access初心者です。宜しくお願い致します。 Formを作成中です、 株式ティッカーを入力すると会社名や事業内容を テーブルから自動入力するように設定しました。 「未上場」というチェックボックスにチェックを入れると、 (1)株式ティッカーの欄を入力不可にすることは出来ましたが、 (2)会社名の欄に手入力をする(株式ティッカーとの紐づけの解除?)ことが出来ません。 簡単な設定方法をご教示下さい。ありがとうございます。 ★情報が不足しています。補足願いまし (1)テーブルの項目名【フィールド名)を列挙して下さい (2)「株式ティッカーの欄」これはテーブルの項目の一つですか (3)紐づけの対象は何と何ですか、 Accessにはリレーションシップと呼んで、売上情報と得意先情報を紐づけしますが これは紐づけたり、解除したりするものではありません
補足
ご連絡有難うございます。 「F_FM」と言うフォームに、3つのテーブルを1つにした「Q_上場企業」から「株式コード」「社名」「業種」「設立日」(レコードソースを確認するとそれぞれのテーブルの項目が選択されています)などのフィールドと、「未上場」と言うチェックボックスを作っています。 「未上場」と言うチェックボックスに(チェックボックス チェック)を入れた際は、「株式コード」が選択不可で「社名」は任意で入力可能にしたいと思います。「社名」と「株式コード」は「T_上場企業マスタ」から「業種」は「T_Astraマスタ」「設立日」は「T_Speedaマスタ」から、「株式コード」でリレーションを組み「Q_上場企業」を作っています。 宜しくお願い致します。