Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


52 / 500 ページ ←次へ | 前へ→

【12276】Re:新規フォーム作成時の初期設定
回答  かるびの E-MAIL  - 13/2/10(日) 1:44 -

引用なし
パスワード
    「フォームテンプレート」という機能があります。
 2003では、メニュー・バーの「ツール」→「オプション」と進み、
「フォーム/レポート」タブをクリックすると出てきます。
 ちょっとネットで調べてみましたが、御希望のことができそうな感じです。

 waji-mart.com/homeandabroad/?p=100
(冒頭のエイチ・ティ・ティ・ピィ・コロン・スラッシュ・スラッシュは省略)

 ただ、私は、フォームテンプレートは使ったことがないし、
今後も使わなさそうなので、それ以上のことはわかりません。
悪しからず。
・ツリー全体表示

【12275】Access データ保存
質問  たらますお  - 13/2/9(土) 0:39 -

引用なし
パスワード
   当方Accessど素人です。
いろいろ調査しましたが、どうしても判りません。
お判りの方、ぜひご教示願います。

<要件>
年度替わり際に洗い替えとして、旧年度分DBを保存したい場合、
新年度になった際に旧年度と新年度の両DBが参照できるような
保存方法はありますでしょうか?

宜しくお願いします。
・ツリー全体表示

【12274】新規フォーム作成時の初期設定
質問  wanda  - 13/2/7(木) 9:27 -

引用なし
パスワード
   新規フォーム作成時、毎回以下の設定を変えています。

スクロールバー  なし
レコードセレクタ いいえ
移動ボタン    いいえ
区切り線     いいえ
閉じるボタン   いいえ
フォームの背景色 XXXXXXXXX
右上にボタンを置いてそのボタンの標題を閉じるにして
それのクリック時は、Docmd.Closeになる。



その他もろもろあります。

これらを何かに記憶させて、
新規フォームを作成する都度、この状態にならないかなと思っております。

いまは、基本フォームというフォームを作り、そのフォームを上記状態にして
新しくフォームを作る場合はそれをコピーするということをしていますが、
ACCESSファイルそのものが新規作成の場合は、別なmdbファイルから
基本フォームをインポートしてということをやっています。

良い方法ありますか?
・ツリー全体表示

【12273】Re:コンボボックス絞り込みで2つに所属...
お礼  初心  - 13/1/31(木) 0:31 -

引用なし
パスワード
   かるびのさんの御指導のとおり行ったところ、お陰様をもちまして、無事に望み通りのものが完成いたしました。大変ありがとうございました。
おそらく、必要とされている方が多い技だと思いますが、なかなか見つからずに苦慮しておりました。(私が見つけられなかっただけかもしれませんが)
もし、また壁にあたった時は、御指導下さいますよう何卒お願い申し上げます。
・ツリー全体表示

【12272】Re:重複する値があるため主キーとして設...
お礼    - 13/1/30(水) 15:50 -

引用なし
パスワード
   ▼かるびの さん:
いつもお世話になります。
教えていただいた通りやってみましたらうまくいきました。
このフォームを使って今までのaccessファイルを作り直したいと思います。
ありがとうございました。
・ツリー全体表示

【12271】Re:パラメータクエリでのアスタリスク回避
お礼  うき  - 13/1/30(水) 13:44 -

引用なし
パスワード
   ▼かるびの さん:

素晴らしいです、一発解決しました!
ありがとうございました、もっと勉強します。


>>何も入力しない場合も「*」を入力した場合も、
>>全件が表示されないようにするには、どのようにしたらよろしいでしょうか?
>
> パラメータ・クエリは使ったことがないので、無責任な思い付きですが、
>抽出条件を
>   Like "*" & [名前は?(部分一致で検索)] & "*"
>  AND [名前は?(部分一致で検索)] Is Not Null
>  AND [名前は?(部分一致で検索)] <> "*"
>としたらどうでしょうか。
・ツリー全体表示

【12270】Re:パラメータクエリでのアスタリスク回避
回答  かるびの  - 13/1/29(火) 2:33 -

引用なし
パスワード
   >何も入力しない場合も「*」を入力した場合も、
>全件が表示されないようにするには、どのようにしたらよろしいでしょうか?

 パラメータ・クエリは使ったことがないので、無責任な思い付きですが、
抽出条件を
   Like "*" & [名前は?(部分一致で検索)] & "*"
  AND [名前は?(部分一致で検索)] Is Not Null
  AND [名前は?(部分一致で検索)] <> "*"
としたらどうでしょうか。
・ツリー全体表示

【12269】Re:コンボボックス絞り込みで2つに所属...
回答  かるびの  - 13/1/29(火) 1:28 -

引用なし
パスワード
    話を戻すようで申し訳ないのですが、
1名の担当者に複数の所属を持たせたいという場合の担当者コンボボックスの作り方は、
担当者の所属が1箇所だけの場合と同様です。

 部署コンボボックスの連結列が1であるとのことなので、
部署コンボボックスが返す値は「部署ID」フィールドの値になるわけですから、
現状の「所属及び担当絞り込みクエリ」からテーブルを一部変えてやればいいだけのはずです。


>記載した、VBAコードは調べて書いてみたのですが、過不足、誤り等があれば、御指導頂きたい
>です。(今回作成した、コンボボックス及びクエリと、どのように絡めていけばよいのか、まだ判ら
>ない状態です。)

 この点については、RowSourceプロパティを、
デザインビューのプロパティシートから指定するのか、
VBAを使って指定するのかというだけの違いです。
 プロパティシートから指定するのであれば、無理してVBAを使う必要はありません。
・ツリー全体表示

【12268】Re:重複する値があるため主キーとして設...
回答  かるびの  - 13/1/29(火) 0:03 -

引用なし
パスワード
   >Private Sub コード_AfterUpdate()
>[Forms]![サブフォーム]![コード].DefaultValue = [Forms]![フォームA]![コード]
>End Sub

 想像していたとおりのコードですね。

 Formsコレクションには、開かれているフォームだけが含まれます。
 メインフォームが開かれていても、サブフォームに使われているフォームは
フォームとして開かれているわけではありません。
 サブフォームがフォームとして開かれているならば、
アクセスのウィンドウ内に標題がサブフォーム名となっているウィンドウがあるはずですが、
メインフォームを開いているときにそんなウィンドウはありませんよね。
 したがって、サブフォームに使われているフォームはFormsコレクションに含まれず、
'サブフォーム’フォームが見つかりません。
というエラーになります。


 サブフォームを参照、取得するには、
   Forms!メインフォーム名!サブフォームコントロール名.Form
とします。
 サブフォーム上のコントロールを参照又は取得するには、例えば、
   Forms!メインフォーム名!サブフォームコントロール名.Form!コンボボックス名
のようにします。

 サブフォームコントロール名というのは、
メインフォームのデザインビューでプロパティシートを表示させたとき、
プロパティシートの標題に「サブフォーム/サブレポート:××××」と表示される
「××××」の部分のことです。
・ツリー全体表示

【12267】Re:コンボボックス絞り込みで2つに所属...
発言  初心 E-MAIL  - 13/1/28(月) 23:51 -

引用なし
パスワード
   こんばんは連日の御指導ありがとうございます。

記載した、VBAコードは調べて書いてみたのですが、過不足、誤り等があれば、御指導頂きたいです。(今回作成した、コンボボックス及びクエリと、どのように絡めていけばよいのか、まだ判らない状態です。)

御指導頂いて、作成した、「結合クエリ」は正常に作動しているようです。
名前はそのような都合が後から出てくるのだと知りました。以後、それを踏まえた上でクエリの名前を決めようと思います。

大項目コンボボックスは
RowSource(値集合ソース)所属テーブル
BoundColumn(連結列)は1となっております。
この部署テーブルは
部署ID(数値型)(主キー)
部署認識番号(テキスト型)会社規定の部署認識番号で数字に意味はありません。
部署名(テキスト型)
という構成になっています。

小項目コンボボックスは現在、
RowSource(値集合ソース)「所属及び担当絞り込みクエリ」という、上記の所属テーブルの(所属ID)と「担当テーブル」に作成した(所属ID)を一対多でリレーションをしたクエリを指定しており、(今までの1所属、1名担当の絞り込みで使用していたものです。今回、作成した「結合クエリ」に代える事になると思います。)
BoundColumn(連結列)は1となっております。

担当者テーブルは

担当ID(数値型)(主キー)
氏名(テキスト型)
生年月日(日付型)
住所(テキスト型)
役職(テキスト型)
Tel(テキスト型)という構成になっています。

すいません、以後、大項目コンボボックスは(部署コンボボックス)小項目コンボボックスは(担当者コンボボックス)でお願い致します。

色々と御迷惑をお掛け致しますが、よろしくお願い致します。
・ツリー全体表示

【12266】パラメータクエリでのアスタリスク回避
質問  うき  - 13/1/28(月) 16:38 -

引用なし
パスワード
   こんにちは

パラメータクエリを、フォームから呼びだして表示させ
ユーザーに検索させているAccessを作っています。

名前を、曖昧検索させているのですが
パラメータボックスに、何もいれずエンターを押すと全件表示されてしまうのを避けるため
以下の構文にしております。

Like "*" & [名前は?(部分一致で検索)] & "*" AND [名前は?(部分一致で検索)] Is Not Null

これで、何もパラメータボックスに入力せずエンターを押した場合は
データが出ないようにすることは成功したのですが、パラメータクエリボックスに
「*」を入れてしまうと、全件が表示されてしまいます。(当たり前かもですが、、)

何も入力しない場合も「*」を入力した場合も、
全件が表示されないようにするには、どのようにしたらよろしいでしょうか?

宜しくお願い致します。
・ツリー全体表示

【12265】Re:重複する値があるため主キーとして設...
質問    - 13/1/28(月) 10:20 -

引用なし
パスワード
   ▼かるびの さん:
こんにちは、いつもお世話になります

> どんなコードを書いたんですか。
> 特に、メインフォームのプロシージャにおいて、
>サブフォームのコントロールをどのように書くかというところは、
>初心者がつまづきやすいところなので、それをどのように書いたのか気になります。

書いたコードは下記のとおりです

Private Sub コード_AfterUpdate()
[Forms]![サブフォーム]![コード].DefaultValue = [Forms]![フォームA]![コード]
End Sub

そしたら、'サブフォーム’フォームが見つかりません。とエラーが出ます。
よろしくお願いします
・ツリー全体表示

【12264】Re:コンボボックス絞り込みで2つに所属...
回答  かるびの  - 13/1/28(月) 1:57 -

引用なし
パスワード
   >このクエリの元になっているテーブルである部署IDは「部署テーブル」の部署IDと多と一の関係で結ばれており、担当者IDは「担当者テーブルの」担当者IDと多と一で結ばれておます。これにリンクIDを付けたのですが、これで「部署テーブル」と「担当者テーブル」が「部署と担当者リンクテーブル」を介して多対多で結ばれ、多対多結合をした事にはならいのでしょうか?

 結合テーブルは作っていたのですね。
 多対多の結合として、OKです。  

 蛇足ですが、「部署と担当者リンクテーブル」という名前はやめた方がいいですよ。
 というのは、「リンクテーブル」という言葉は、違う意味で使われるからです。
つまり、A.mdbファイルにある甲テーブルをB.mdbファイルで使うときに、
テーブルをリンクさせるという手法が取られることがありますが、
このとき、B.mdbファイルから見た甲テーブルを「リンクテーブル」と呼ぶというのが、
通常の「リンクテーブル」という言葉の使われ方です。


 次ですが、「部署と担当者リンクテーブル」には然るべきレコードが積み込まれていますか。
 つまり、「部署と担当者リンククエリ」において、Bさんについて
   Bさん  ID1
   Bさん  ID2
というようにBさんが2レコード出てきていますか。


 次は、小項目コンボボックスのRowSourceとなるクエリですね。
 記事12261で、
>>>Private Sub Form_Load()
>>>
>>>Me.担当者コンボボックス名.RowSource = "SELECT [部署と担当者リンククエリ].[担当者名]
>>>
>>>End Sub
とありました。
 このSQL文は途中で切れていますが、その続きはどのようになっているのですか。

 それから、大項目コンボボックスの
BoundColumnプロパティとRowSourceプロパティには何が指定されていますか。
 RowSourceプロパティに指定されているのがテーブル名又はクエリ名である場合、
そのテーブル又はクエリでは、どういう順番で何というフィールドが並ぶのですか。

 また、小項目コンボボックスについて、
BoundColumnプロパティ、ColumnWidthsプロパティには何が指定されていますか。


 最後に、コンボボックスの名前が最初とは変わってきているようですが、
どれが正しいんでしょうか。
・ツリー全体表示

【12263】Re:コンボボックス絞り込みで2つに所属...
発言  初心 E-MAIL  - 13/1/27(日) 23:36 -

引用なし
パスワード
   ▼かるびの様お世話になっております。
リンクID「オートナンバー」、部署ID「数値型」、担当者ID「数値型」テーブルからなるクエリを作成しました。

と書きましたが、このクエリの元になっているテーブルである部署IDは「部署テーブル」の部署IDと多と一の関係で結ばれており、担当者IDは「担当者テーブルの」担当者IDと多と一で結ばれておます。これにリンクIDを付けたのですが、これで「部署テーブル」と「担当者テーブル」が「部署と担当者リンクテーブル」を介して多対多で結ばれ、多対多結合をした事にはならいのでしょうか?私の考え方が根本的に間違っているのでしょうか?御教授下さいますようお願い申し上げます。
・ツリー全体表示

【12262】Re:コンボボックス絞り込みで2つに所属...
回答  かるびの  - 13/1/27(日) 2:03 -

引用なし
パスワード
   >リンクID「オートナンバー」、部署ID「数値型」、担当者ID「数値型」テーブルからなる「部署と担当者リンククエリ」を作成しました。

 結合テーブルが作成された形跡がありませんが、
結合テーブルは作ったのでしょうか。


>Private Sub Form_Load()
>
>Me.担当者コンボボックス名.RowSource = "SELECT [部署と担当者リンククエリ].[担当者名]
>
>End Sub
 このコードにはいくつか問題がありますが、
それよりも、多対多結合を実現させることの方が先です。
・ツリー全体表示

【12261】Re:コンボボックス絞り込みで2つに所属...
発言  初心 E-MAIL  - 13/1/27(日) 0:16 -

引用なし
パスワード
   ありがとうございます。考え方が判って参りました。
リンククエリを作成するところまではうまくいっていると思います。
リンクID「オートナンバー」、部署ID「数値型」、担当者ID「数値型」テーブルからなる「部署と担当者リンククエリ」を作成しました。
このクエリで「リンクID」と「部署テーブル」「担当者テーブル」からそれぞれ、部署名、担当者名を選択し、クエリの部署名の抽出条件欄に=Forms!フォーム名!大コンボボックス名を記入するところまではできました。
ただ、RowSourceというVBAを使用したことがなく、他で調べてみるとフォーム全体のプロパティの「読み込み時」に書くと思うのですが、色々試したもののうまく作動しません。

Private Sub Form_Load()

Me.担当者コンボボックス名.RowSource = "SELECT [部署と担当者リンククエリ].[担当者名]

End Sub
と記述したのですが、上記に誤り等ございましたら、御手数をお掛け致しますが、
御指導の程、よろしくお願い致します。
・ツリー全体表示

【12260】Re:コンボボックス絞り込みで2つに所属...
回答  かるびの  - 13/1/26(土) 1:35 -

引用なし
パスワード
    私がこのスレッドで最もポイントになるなと思ったのが、
大項目テーブルと小項目テーブルの関係なんですね。

>部署テーブル(1)対担当者テーブル(多)がIDで繋がり、
とのことですが、
部署テーブルと担当者テーブルが一対多なら、
担当者が2つの所属部署を持つということはありえません。
 担当者が2つの所属部署を持つならば、両テーブルの関係は一対多ではありません。


 本当は、ここを初心さんに出してほしかったのですが、
一対多ということが出てきたので良しとしましょうか。
 担当者が2つの所属部署を持つならば、両テーブルの関係は多対多です。


 リレーショナルデータベースでは、多対多のテーブルは結合させられません。
 そこで、多対多の場合は、結合テーブルを別に作り、
これを介して両テーブルを結合させます。
 結合テーブルの具体的な作り方については、ネット上を検索してみてください。


 そして、部署テーブル、担当者テーブル、結合テーブルから成るクエリを作り、
それを小項目コンボボックスのRowSourceに指定します。

 このクエリでは、大項目コンボボックスの値で抽出するという抽出条件を
設定しておきます。
・ツリー全体表示

【12259】Re:重複する値があるため主キーとして設...
回答  かるびの  - 13/1/26(土) 0:54 -

引用なし
パスワード
   >これで動くことは動くのですが、サブフォームの最後の行を入れるときにだけ
>何も入らず(サブフォームは複数行の入力が可能)

 サブフォームの最後の行の場合に更新されないのは、
当該レコードがまだテーブルに保存されていないからだと思います。

 そのレコードをテーブルに保存してから更新クエリを実行すれば、
きちんと更新クエリが効くと思います。
 テーブルの保存は、
   DoCmd.RunCommand acCmdSaveRecord
というコードで行います。

 ただ、テキストボックスに値を代入すれば足りるところを、更新クエリを使うのは、
大がかり過ぎており、あまり一般的な方法ではないと思います。


>もう一度商品コードを入れると他のユーザーによって変更が加えられましたとか
>なんとかいうメッセージが出て、他のユーザーの変更を反映するというボタンを
>押すとやっとのことでコードに値が入ります

 このエラーメッセージには私もときどき遭遇します。
 原因は私もよくわからないのですが、
フォームで編集中のレコードを、テーブルのレベルでも内容を書き替えたりすると、
このエラーメッセージが出るようです。
 つまり、レコードが二重に編集されているということなのだと思います。

 回避策としては、フォームでレコードを編集中に更新クエリを実行するのはやめる
ということになると思います。


 そうすると、最初の、VBAで値の代入ということに戻ってきます。

>メインフォームのテキストボックスの更新後イベントに書いてみたんですが、
>サブフォームが見つからないとかなんとか言われてうまくいかなかったので、

 どんなコードを書いたんですか。
 特に、メインフォームのプロシージャにおいて、
サブフォームのコントロールをどのように書くかというところは、
初心者がつまづきやすいところなので、それをどのように書いたのか気になります。
・ツリー全体表示

【12258】Re:コンボボックス絞り込みで2つに所属...
発言  初心 E-MAIL  - 13/1/25(金) 23:48 -

引用なし
パスワード
   すいませんでした。テーブル構成等について説明が不足しておりました。
例として書かせて頂きます。

商品出品テーブルを元とした商品出品クエリをレコードソースに商品出品フォームを作成したました。(このフォームを親とし、サブフォームとして商品名や数量が表形式で埋め込まれています。)

フォームの上部で統一項目として下記を入力することとしています。

フィールド名 データ型

商品出品ID:オートナンバー
商品出品日:日付・時刻型
出品先施設:数値型←別の施設テーブル(住所・Tel等が入った施設テーブルと繋がっています。)
担当部署:数値型
担当者名:数値型

部署テーブル(1)対担当者テーブル(多)がIDで繋がり、絞り込みが掛かっています。
担当者テーブルが商品出品IDと繋がり、このフォームに日付を入力し、担当部署をコンボボックスで選び、絞り込んだ担当者名を担当者コンボボックスにて入力をできるようにしています。
担当者テーブルには、名前、年齢、個人住所等の情報が入っているので、IDを二つ持たせると、情報に変更が生じた場合両方を直さないといけないので担当者に持たせるIDは一つとしたいです。

このサイトを参考として、おっしゃるとおり、1人の所属は常に1つだけであるという前提下での連動はできています。
hamachan.info/access/sibori.html
他にも不足等ございましたら、お手数をお掛け致しますが、お知らせ下さいますようお願い致します。
・ツリー全体表示

【12257】Re:重複する値があるため主キーとして設...
質問    - 13/1/25(金) 12:18 -

引用なし
パスワード
   かるびの さん:
いつもありがとうございます

> メインフォームの「コード」のテキストボックス(txtCodeMain)が更新されたときに、
>サブフォームの「コード」のテキストボックス(txtCodeSub)の既定値プロパティに
>txtCodeMainのValueプロパティの値を指定する。

とのことでやってみたんですが、
メインフォームのテキストボックスの更新後イベントに書いてみたんですが、
サブフォームが見つからないとかなんとか言われてうまくいかなかったので、

更新クエリを作り、それを
サブフォームの商品コードの更新後クエリに
DoCmd.OpenQuery "更新クエリ"
と書きました。

これで動くことは動くのですが、サブフォームの最後の行を入れるときにだけ
何も入らず(サブフォームは複数行の入力が可能)
もう一度商品コードを入れると他のユーザーによって変更が加えられましたとか
なんとかいうメッセージが出て、他のユーザーの変更を反映するというボタンを
押すとやっとのことでコードに値が入ります

一行しかない場合、一行目からそうなります

難しいですね。何が駄目なのでしょうか

※更新クエリのSQLです

UPDATE テーブルB SET テーブルB.コード = [Forms]![フォームA]![コード]
WHERE (((テーブルB.A_ID)=[Forms]![フォームA]![A_ID]));
・ツリー全体表示

52 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1078299
(SS)C-BOARD v3.8 is Free