Private Sub 所属部署タブ_Change()
If Me!所属部署タブ = 4 Then
Me!部署データ.Form.Recordset.AddNew
Else
If Me!部署データ.Form.NewRecord Then Me!部署データ.Form.Recordset.MoveFirst
Me!部署データ.Form.Recordset.Move 所属部署タブ - (Me!部署データ.Form.CurrentRecord - 1)
End If
End Sub
Private Sub Form_Current()
Const max部署 = 4 '//この行を訂正
Dim cnt部署 As Long
Dim i As Long
cnt部署 = Me!部署データ.Form.Recordset.RecordCount
cnt部署 = IIf(cnt部署 > max部署, max部署, cnt部署)
me!所属部署タブ = 0
For i = 1 To cnt部署 - 1
Me("ページ" & i).Visible = True
Next
For i = cnt部署 To max部署 - 1 '//この行を訂正
Me("ページ" & i).Visible = False
Next
End Sub
Private Sub 所属部署タブ_Change()
Me!部署データ.Form.Recordset.Move 所属部署タブ - (Me!部署データ.Form.CurrentRecord - 1)
End Sub
Private Sub Form_Current()
Const max部署 = 3
Dim cnt部署 As Long
Dim i As Long
cnt部署 = Me!部署データ.Form.Recordset.RecordCount
cnt部署 = IIf(cnt部署 > max部署, max部署, cnt部署)
me!所属部署タブ = 0
For i = 1 To cnt部署 - 1
Me("ページ" & i).Visible = True
Next
For i = cnt部署 To max部署
Me("ページ" & i).Visible = False
Next
End Sub
Private Sub 所属部署タブ_Change()
Me!部署データ.Form.Recordset.Move 所属部署タブ - (Me!部署データ.Form.CurrentRecord - 1)
End Sub
Private Sub cboグループ_Click()
If Nz(Me.cbo名前ID) = "" Then
MsgBox "先に名前を選択してください。"
End If
End Sub
Private Sub cboグループ_Enter()
Me.cboグループ.Requery
End Sub
Private Sub txtグループ_Enter()
Me.cboグループ.SetFocus
End Sub
Select Case Forms!クエリ検索フォーム!モード
Case "Touroku"
施設ID = ほにゃらら
Case "kakikae"
'修正用処理
Case "etsuran"
'閲覧用処理(書き換え自体を禁止するとか)
Case Else
MsgBox "モード指定が不正です"
End Select
投稿してからそれらしいことやってることに気づきました(元投稿は削除)
Accessのインポート定義を編集する方法
試してないのでわからないんですが、編集する方法と謳う上記リンク先のようなことをしても編集できないということでしょうか?
やってみたらインポート操作の保存で保存するとMSysIMEXSpecsとかMSysIMEXColumnsとかにはデータ追加されないんですねぇ
MSysIMEXColumns自体はインポート定義用として正しく使われてると思うので今回の内容だと弄ってもダメそうですね
ランタイム自体は最新のもの(microsoft 365 Access ランタイム)でいいと思いますよ
動かない場合には動かないなりの理由がありますのでエラー内容を確認しながら適切な対応をしましょう
そもそものインストールの制限(office365はwin10以降とか)や、officeの共存環境とか思いもしないところでうまくいかないなんてこともあるので最終的には「やってみないとわからない」系の内容ですね
ハイパーリンク型のフィールドと連結したテキストボックスということでしょうか。
だとしたら、
下記のようにフォルダーパスを
#
で囲んでください。情報が不足しているので、具体的に何をしたいのか不明瞭ですが、
とりあえず、「パラメータクエリ」を使ってできないか、チャレンジしてみてください。
そのうえで、テーブルの情報、データ例、どのような結果が欲しいのか、等のやりたいことと、
どのようなクエリを作成したのか、等の試みたこと、試みた結果どこで躓いたのか、
を提示してください。
hirotonの環境では再現できませんでした。たとえば
Form_Current
に追加したコードをすべて削除すると(ページの表示ON/OFF機能を削除すると)ページは常に表示されたままになっていますか?新規登録用の画面自体は[部署データ]フォームですか?
[所属部署タブ]タブに[ページ4]を追加します
[ページ4]を選択すると新規登録用のレコードに飛ぶようになります。少し手抜きな部分(新規登録から既存のレコードに移るとちらつくかも)がありますが、動作を確認してみてください
ちなみに、このコードだけだと、実際に新規レコードが追加されてもタブの表示は変わりません。「新規で所属部署が登録されたとき」にページのON/OFFを見直す必要があります。親フォームとサブフォームを行ったり来たりな処理でちょっと大掛かりになるので、続きが必要な場合にいは改めて質問を立てなおしてください(大元の質問は、それはそれで続けているようなので)
追伸:
最初の質問に改めて戻るのですが
「F_メンバー」の中に「F_サブ所属部署」があります。
「F_サブ所属部署」は多くても4件くらいです。
この2つの情報を繋いでいる「T_メンバー所属部署」(メンバーIDと所属部署IDが主キー)が存在しています。
「Q_メンバー所属部署」の中に、特定のメンバーIDを指定した時「所属部署①」「所属部署②」「所属部署③」「所属部署④」を引っ張ることはできますでしょうか。
今、解決しました…
ボタンについて、画像(イメージ)を使っていたのですが
通常のボタンに差し替えたらうまく作動するようになりました。
イメージをボタン代わりにしていたことが問題だったのでしょうか…?
ご確認いただき感謝です。
帳票のレコードなのですが、「btnメール作成」をクリックすると
全て "メール不要です。"と表示されてしまいます。
どのレコードのボタンを押しても「cboメールテンプレID = "1"」と認識されてしまうようです。
実際はレコード毎に番号を変えているのですが…。
状況がよくつかめません。
「btnメール作成」をクリックすると、帳票フォーム「F_メールテンプレ」が開くと思いますが、
その「F_メールテンプレ」の表示がおかしいということでしょうか。
「F_メールテンプレ」のレコードソースはクエリですか、テーブルですか。
どこの表示がおかしいのですか。
追伸:
プロパティで「移動ボタン」を表示するときちんと2つ目の商品タブが表示されますが、表示しないを選択すると1つ目のタブしか表示されません。なぜでしょうね・・?
遅くなりましたが、できました!!素晴らしいです。
追加で質問ですが、現在登録済みだった所属部署は表示されるのですが、新規で所属部署を登録する画面の作成方法がわからず…
質問ばかりで申し訳ありませんが、ご教示願えませんでしょうか。
コード訂正
添え字(0~)と数(1~)の対応で処理に間違いがあったので修正しておきます
この件、色々試しつつ未だ解決できずです。
基本的なことなのかと思いつつ、帳票の理解が足りていないようで恐縮ですが、どなたか教えていただけませんでしょうか。
回答がついてとてもうれしいです!明日確認してみます。
サブフォームを単票フォームにするのならばタブの選択に合わせてレコードが移動できるようにすればいいですね
それと、親フォームのレコード移動時にサブフォームのレコード数に合わせてタブの表示/非表示を切り替えればよさそうです
新たに作るサブフォームを[部署データ]とします
タブコントロール[所属部署タブ]を設置します
[所属部署タブ]にページコントロールを[ページ0]~[ページ3]まで設置します
すみません、この質問の件について考えていて、改めて何がしたいのかわかりました‥。
フォームの中にサブフォームを作り、それを単票表示にして、その単票データをタブで切り替えるように見せることはできますでしょうか?
多くても4個くらいなのですが‥。
SQL = "SELECT FROM MT_test WHERE 名前 like" 川 * ""
*を%に変更して解決しました。
下記が参考になるかと。
帳票フォームで表示項目が多いとき、ページ切り替えで - hatena chips
本件、ご教示いただきありがとうございます。
結局、作成してみたら個人のフォームの「所属部署」の中にも色々登録しないといけないことがわかって
リンク(中間テーブル)で繋いでサブフォームにしました。
そこで、フォームの中身がごちゃごちゃしてきたので、
所属部署のサブフォームを1つずつタブ切替にしたいと思っています。。
上限は4くらいにしようと思っていますが、作成することはできそうでしょうか?
参照元データが同じなので無理な気もしていますが、可能であれば作成したく。。ご教示ください。
hatena様
提示して頂いたサイトがとても参考になり使用いたしました。ありがとうございます。
銀行コードは上記のサイトで実装できたのですが、そこからさらに支店コードを絞り出す方法はありますでしょうか?
銀行コードと銀行名のコンボボックスを配置し
その下に支店コードと支店名のコンボボックスを配置。
銀行コードや銀行名を選ぶと、支店コードと支店名がその銀行の支店だけを絞り込みたいです。
質問にさらに質問をしてしまい大変申し訳ありませんが宜しくお願い致します。
この現象、今日は起きなかったようです。。謎ですが、とりあえず仮クローズします。
ありがとうございます。やはりメッセージは表示されませんでした。
下記のコードと関係しますか・・?
わからなければこの件はあきらめようと思っています…
とりあえず、大きな問題が発生しているわけではないので
>DoCmd.OpenQuery "Q_メール作成"でクエリを実行したときに型変換エラーがでるのですか。
そのとおりです。
>管理IDフィールドのデータ型はなんですか。
T_送付リストの管理IDは数値型です。テーブルでは型が確認できますが、フォームは型って確認できないですよね??
その認識が間違っていればご教示ください。 ([F_管理]![txt管理ID]の書式は00000でしたが)
DoCmd.OpenQuery "Q_メール作成"
でクエリを実行したときに型変換エラーがでるのですか。管理IDフィールド
のデータ型はなんですか。"" ではなく Null なのかもしれません。見た目では区別付かないので。
Nz関数を使えば Nullでも""でもチェックできます。
フォームの銀行コード、支店コードのコントロールソースが、銀行コード_銀行コード、支店コード_支店コード になってませんか。
それだと、フォーム上で、マスターテーブルにコードを追加することになり、すでにマスターにあるコードならそのようなエラーになります。
マスターのコードは不要なのでSQLは下記のようにして、
フォームの銀行コード、支店コードのコントロールソースは、社員口座管理テーブルの銀行コード、支店コードにしてください。マスターテーブルから、コード(主キー)以外で表示したいフィールドを追加してください。
コンボボックスを使えば、レコードソースにマスターテーブルを含める必要はないです。
下記が参考になるでしょう。
コードでも名称でも入力できるコンボボックス - hatena chips
自己レスです。「異質な」については、そのPCだけ
・2003 mdb 形式にしてしまった。バックエンドと同じだと思っていたが、後になってそうでないのに気付いた
・参照設定でDAOが読み込めず、Access databese engine Object Libraryを指定した
です。
3つの状態を判断する方法もあるんですね。
ご丁寧にサンプルコード本当にありがとうございます。
チェックボックスとともに勉強、テストしてみます。
プログラミングのテクニックというやつですね
「新規か修正」、2つの状態を判断できればいいので「ONかOFF」2つの状態を持てるチェックボックスで代用するという流れです。IF文との相性がいい(コードが簡素)になるのもポイントです
その代わり、
新規登録モード = False
のとき、何モードなの?というのはコードを読んでも分かりにくいという面はありますテキストボックスで実装してもいいですし、3つの状態を判断しなければならないとかだとチェックボックスだと厳しいなんてこともあります
クエリ検索フォーム
[モード]テキストボックスを配置
登録修正用フォーム
先の回答の通りこのコード自体はあまり良いものではないですが、考え方としてはこういう流れになります
テキスト(文字)を使うとコードだけを見ても何をやっているのが分かりやすいというメリットもあります(
Case "etsuran"
の中で施設ID = ほにゃらら
とかあったら「おかしくない?」ってなるとか)ヘッダーに表示したいのなら、レポートヘッダーにテキストボックスを配置して、そのコントロールソースを
下記のように設定すればいいでしょう。
値集合ソースにテーブルを設定することも可能です。
設定例
テーフルが、
T_メンバー(※メンバーID 名前 所属部署・・・)
T_部署(※部署ID(数値型) 部署名)
として、
T_メンバー の所属部署フィールドの設定
データ型 数値型
ルックアップ
表示コントロール コンボボックス
値集合タイプ テーブル/クエリ
値集合ソース T_部署
列数 1
列幅 0
上記の設定で、下記のような表示になります。
複数値フィールドでも抽出は可能です。
Accessのクエリで複数のデータが入力されたフィールドを抽出する方法 | できるネット
■T'sWare Access Tips #659 ~複数値フィールドの中の値を条件に抽出するには?~
主キーは個性を出すための方法ですよね??(適切な表現がわからず個性と書きましたが、独自性?)
だとしたら2つの主キー以外は普通のフィールドで大丈夫ですね。リレーションシップとかの問題が出てくるかと思いましたが、関係ないですよね。失礼しました。
作成していて気づいたのですが、サブフォームに「所属部署」の中の「プロジェクトチーム」も追加します。
「所属部署」で絞り込んだ選択しとして、コンボボックスで選択させています。
(それ自体は作れています。)
この場合、サブフォームの元テーブルに「プロジェクトID」を追加しようと思っているのですが、これは主キーにする必要はないですよね?(主キーにする必要についてわからなくなってきました…)
①リストフォームでメンバー一覧を表示するとき、所属部署で絞り込みたい時があります。
↑
この件になります。
ありがとうございます!複数値を持つほうが未経験で、興味を持ったのですが、選択肢はテーブル設定の値集合ソースに記載しておかないといけないんですよね?
そうだとしたら、所属部署も増減がある可能性があり、外にフォームを持たせたいので2つ目の方法にしようと思います。
そこで、最初の質問に戻るのですが、サブフォームを作った場合、「F_リスト」で「メンバー所属部署」の数だけメンバーを表示することはできますでしょうか。
コンボボックスをつかうといいと思います。
例えば、下記は 番号(コード)と商品名(名称)を表示できるコンボボックスを2つ並べてますが、名称を表示するコンボボックスの設定の方を参考にすればいいでしょう。
コードでも名称でも入力できるコンボボックス - hatena chips
ご希望のことはだいたいつかめました。
メンバー一人が複数の部署に所属するときがある。
今までは、同じテーブルに複数レコードとして格納していた。
これは、あまり良い方法ではないと思うので、改善したいが、
どのような設計にしたらよいか分からない、というところですね。
方法としては2つあります。
一つは複数値を持つフィールドを利用する方法です。
複数値を持つフィールドの作成または削除 - Access
複数の値を記録するフィールド - もう一度学ぶMS-Access
上記のリンク先の画像を見てもらえれば分かると思いますが、
コンボボックスのドロップダウンリストにチェックボックスが付いていて、それをチェックすることで複数の所属部署を選択できるようになります。
ボックス部分には、選択した部署名がカンマ区切りで表示されます。
こちらだと、テーブル設計やフォーム設計の大きな変更なしに「所属部署」フィールドのルックアップで「複数の値を許可」を「はい」にするだけで簡単に実現できます。
もう一つは、
T_メンバー、T_部署 テーブルと、中間テーブルとして T_メンバー所属部署 を作成してそれぞれをリンクさせる方法になります。
テーブル設計は下記のような感じで。
T_メンバー(※メンバーID 名前 ・・・)
T_部署(※部署ID 部署名)
T_メンバー所属部署(※メンバーID ※部署ID)
※は主キー
「F_メンバー」のレコードソースは、T_メンバー。
これに埋め込むサブフォームのレコードソースは、T_メンバー所属部署。
サブフォームで 部署ID はコンボボックスにして部署名でも選択できるようにするといいでしょう。
コードでも名称でも入力できるコンボボックス - hatena chips
おかげさまでうまくいきました!ありがとうございました。
⑥に追記です。フィールドにメンバーIDも追加予定です。