Access VBA質問箱 IV

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

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


1470 / 2272 ツリー ←次へ | 前へ→

【6980】フォームから次のフォームに行くには にしもり 05/12/15(木) 12:03 質問[未読]
【6985】Re:フォームから次のフォームに行くには 小僧 05/12/16(金) 9:45 発言[未読]
【6995】Re:フォームから次のフォームに行くには にしもり 05/12/19(月) 8:56 お礼[未読]
【6999】Re:フォームから次のフォームに行くには にしもり 05/12/21(水) 9:30 質問[未読]
【7001】Re:フォームから次のフォームに行くには 小僧 05/12/21(水) 13:31 発言[未読]
【7009】Re:フォームから次のフォームに行くには にしもり 05/12/25(日) 22:43 質問[未読]
【7010】Re:フォームから次のフォームに行くには にしもり 05/12/26(月) 8:55 質問[未読]
【7011】Re:フォームから次のフォームに行くには 小僧 05/12/26(月) 11:15 発言[未読]
【7012】Re:フォームから次のフォームに行くには にしもり 05/12/26(月) 12:49 質問[未読]
【7013】Re:フォームから次のフォームに行くには 小僧 05/12/26(月) 13:15 発言[未読]
【7014】Re:フォームから次のフォームに行くには にしもり 05/12/26(月) 14:44 質問[未読]
【7015】Re:フォームから次のフォームに行くには 小僧 05/12/26(月) 15:12 発言[未読]
【7016】Re:フォームから次のフォームに行くには にしもり 05/12/27(火) 10:16 質問[未読]
【7017】Re:フォームから次のフォームに行くには 小僧 05/12/27(火) 10:51 発言[未読]
【7018】Re:フォームから次のフォームに行くには にしもり 05/12/27(火) 12:17 お礼[未読]
【7019】Re:フォームから次のフォームに行くには 小僧 05/12/27(火) 15:56 発言[未読]

【6980】フォームから次のフォームに行くには
質問  にしもり  - 05/12/15(木) 12:03 -

引用なし
パスワード
   こんにちは。
vbaの質問ではないかもしれませんが教えてください。
最近フォームを使いはじめました。いまFORM01、 FORM02があります。
FORM01はウィザードで作り、開けると店コード、店名、担当者が出ます。
20000レコードくらいで帳票形式ででます。

いまFORM01の店コードをクリックすると、
FORM02が開いて、FORM01にはない詳細(住所、電話など)がでるようにしたいのです。

FORM01のプロパティでクリック時イベントにマクロか何かをビルドすればいいのでしょうか??
どなたかご教示ください。

【6985】Re:フォームから次のフォームに行くには
発言  小僧  - 05/12/16(金) 9:45 -

引用なし
パスワード
   ▼にしもり さん:
おはようございます。

>いまFORM01の店コードをクリックすると、

テキストボックスをマウスで選択する度に別フォームが上がってしまうので、
ダブルクリックのイベントの方が良いかもしれませんね。


>FORM02が開いて、FORM01にはない詳細(住所、電話など)がでるようにしたいのです。

現在のテーブル構成がご提示されていないので何ともいえないのですが

・FORM01 を帳票フォームで作成(連結フォーム)
・FORM02 を単票フォームで作成(連結フォーム)
・FORM01 にあるテキストボックス「店コード」のダブルクリック時のイベントに

 DoCmd.OpenForm "FORM02", , "店コード = '" & 店コード & "'"

 のように、WhereCondition を指定してフォームを開く

というような動作で実現できると思われます。

【6995】Re:フォームから次のフォームに行くには
お礼  にしもり  - 05/12/19(月) 8:56 -

引用なし
パスワード
   ▼小僧 さん:
ありがとうございます。
「連結」にするのですね。
確かにデザインでやると連結とか非連結とか出ますね。
ウィザードを使って作ったので、ある程度自動的にできてしまいました。
何がわからないのかがわからないので、もうすこし勉強してからまた質問させていただきます。

【6999】Re:フォームから次のフォームに行くには
質問  にしもり  - 05/12/21(水) 9:30 -

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

みようみまねでコードビルド(?)というのをやりました。
1.FORM01をデザインモードでひらきました。
2.店コードを右クリックしました。
3.イベントのビルドで、コードビルドを選びました。
4.下記のコードを書いて保存しました。
5.FROM01を通常のモードで開き、店コードをクリックしました。

ですが、FORM02がひらきますがなにも表示されません。
なにが足りないでしょうか?

Option Compare Database
Option Explicit
Private Sub 店コード_BeforeUpdate(Cancel As Integer)
 DoCmd.OpenForm "FORM02", , "店コード = '" & 店コード & "'"
End Sub

【7001】Re:フォームから次のフォームに行くには
発言  小僧  - 05/12/21(水) 13:31 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは。

>3.イベントのビルドで、コードビルドを選びました。

「更新前処理」「更新後処理」…とたくさん選ぶ所がありませんでしょうか。

クリックした際に動作させたいのでしたら「クリック時」の所で
コードビルダを起動させてみて下さい。


>Private Sub 店コード_BeforeUpdate(Cancel As Integer)
>↓
>Private Sub 店コード_Click()

となるはずです。


テキストボックスの値が確定しないと店コードは空のままです。(Null値)
一度フォーカスをテキストボックス以外に移して値を確定させてから
クリックを行ってみてください。

【7009】Re:フォームから次のフォームに行くには
質問  にしもり  - 05/12/25(日) 22:43 -

引用なし
パスワード
   ▼小僧 さん:
こんばんは。
連休中に何とかできました。
質問がございます。

(1)小僧さんのアドバイスにしたがうとこうなります。

Private Sub フィールド1_Click()
On Error GoTo Err_フィールド1_Click

 DoCmd.OpenForm "FORM02", , "店コード = '" & 店コード & "'"

Exit_フィールド1_Click:
  Exit Sub

Err_フィールド1_Click:
  MsgBox Err.Description
  Resume Exit_フィールド1_Click
  
End Sub

(2)ですがいろいろ見た教本には、stDocName、stLinkCriteriaを宣言しているものがありました。
実はそれでも出来ました。

Private Sub フィールド1_Click()
On Error GoTo Err_フィールド1_Click

  Dim stDocName As String
  Dim stLinkCriteria As String

  stDocName = "FORM02"
  DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_フィールド1_Click:
  Exit Sub

Err_フィールド1_Click:
  MsgBox Err.Description
  Resume Exit_フィールド1_Click
  
End Sub

(1)と(2)ではそれぞれどういう利点があるのでしょうか?

なお、まぎらわしいのでsubプロシージャの名前は店コードでなくフィールド1にしました。

【7010】Re:フォームから次のフォームに行くには
質問  にしもり  - 05/12/26(月) 8:55 -

引用なし
パスワード
   ▼小僧 さん:
一度できたとおもったのに、また出来なくなってしまいました。

>テキストボックスの値が確定しないと店コードは空のままです。(Null値)
>一度フォーカスをテキストボックス以外に移して値を確定させてから
>クリックを行ってみてください。

とは、具体的にはどういう意味でしょうか?

【7011】Re:フォームから次のフォームに行くには
発言  小僧  - 05/12/26(月) 11:15 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは。

>>DoCmd.OpenForm "FORM02", , "店コード = '" & 店コード & "'"
>stDocName、stLinkCriteriaを宣言しているものがありました。

ごめんなさい。「,」が一つ足りていませんね。

1) DoCmd.OpenForm "FORM02", , , "店コード = '" & 店コード & "'"

2) stDocName = "FORM02"
  stLinkCriteria = "店コード = '" & 店コード & "'"
  DoCmd.OpenForm stDocName, , , strLinkCriteria

2) は変数を使っているだけですので、1) と中身は一緒です。


>具体的にはどういう意味でしょうか?

テキストボックスに「123」という値を書き込むとします。
「1」「2」「3」と入力した状態( 3 のとなりにカーソルがある状態)ですと、
ユーザがまだ入力を完了していない事になりますので、値は「Null」です。

この状態で TAB キー を押したり、Enter キー を押す事で入力が完了した事になり、
テキストボックスの値は「123」として認識されます。

【7012】Re:フォームから次のフォームに行くには
質問  にしもり  - 05/12/26(月) 12:49 -

引用なし
パスワード
   ▼小僧 さん:
こんにちは。

「,」をひとつ追加しました。
が、FORM02がひらいたあと、何も情報が表示されません。
素人かんがえですが、表形式で表示されている店コードを、クリックして次の単表形式で表示する際に
抽出条件として使えていない気がします。
FORM02作成時にウィザードをつかったのですがそれがいけないでしょうか?

なお質問の2点はわかりました。
ありがとうございました。

>2) は変数を使っているだけですので、1) と中身は一緒です。
中身は同じですね。

>この状態で TAB キー を押したり、Enter キー を押す事で入力が完了した事になり、
「確定」するということですね。



【7013】Re:フォームから次のフォームに行くには
発言  小僧  - 05/12/26(月) 13:15 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは。

>FORM02作成時にウィザードをつかったのですがそれがいけないでしょうか?

いえ、それはないと思われますよ。


>抽出条件として使えていない気がします。

という事ですので、FORM02に細工をして確認してみましょう。

FORM02 の「読み込み時」のイベントに

Private Sub Form_Load()
  MsgBox Me.Filter
End Sub

と記述してみましょう。

元のフォームからどのような条件でFORM02が開いたのかが確認できると思われます。

【7014】Re:フォームから次のフォームに行くには
質問  にしもり  - 05/12/26(月) 14:44 -

引用なし
パスワード
   ▼小僧 さん:
おっしゃるとおりにしました。
店コード='1000'という風にでます。
しかしFORM02には何も表示されません。
どうすればよいですか。

【7015】Re:フォームから次のフォームに行くには
発言  小僧  - 05/12/26(月) 15:12 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは。

店コードが 「1000」のレコードが存在しない、という訳ではなさそうですね…。

こちらの環境(Ac2002、WinXP)ですと、問題なく表示されます。
(ダブルクリック時に設定してあります。)

Private Sub 店コード_DblClick(Cancel As Integer)
  DoCmd.OpenForm "FORM02", , , "店コード = '" & 店コード & "'"
End Sub


もし、店コードが数値型でしたら、
  DoCmd.OpenForm "FORM02", , , "店コード = " & 店コード
とされてみて下さい。

また、色々とテストをしているうちに MDB の挙動がおかしくなる場合があります。
その場合は、

まず最適化を試す。
だめでしたら新規 MDB にテーブル、フォーム等全て移す。

などを試してみて下さい。

【7016】Re:フォームから次のフォームに行くには
質問  にしもり  - 05/12/27(火) 10:16 -

引用なし
パスワード
   ▼小僧 さん:
最適化してもだめでした。

FORM02をウィザードでつくったと申しましたが正確ではありませんでした。
テスト的にウィザードで作りました。
ウィザードでつくるとフォームの下端に、レコード:|▲  ▲|というのがでますよね。
いまわたしが問題にしているFORM02は、ウィザードでつくったものでなく手でつくったもので、
したがってレコード:|▲  ▲|はなく、当該レコードだけを表出させるというものです。

なお、いまわたしが問題にしているFORM02を直接開こうとすると、Forms!FORM02!CODE とダイアログボックスが出ます。
ただしそこに1000と入れても希望のとおりに表示されません。

問題はこのことと関係あるでしょうか?

また店コードは数値ではありません。

【7017】Re:フォームから次のフォームに行くには
発言  小僧  - 05/12/27(火) 10:51 -

引用なし
パスワード
   ▼にしもり さん:
おはようございます。

>DoCmd.OpenForm "FORM02", , , "店コード = '" & 店コード & "'"

は、

>>・FORM01 を帳票フォームで作成(連結フォーム)
>>・FORM02 を単票フォームで作成(連結フォーム)

という前提の元に提示させて頂いたコードですので、
FORM02が連結フォームでない場合まで動く訳ではありません。


>なお、いまわたしが問題にしているFORM02を直接開こうとすると、
>Forms!FORM02!CODE とダイアログボックスが出ます。
>ただしそこに1000と入れても希望のとおりに表示されません。

こちらは FORM02 の作りがどうなっているかが解りませんので当方には解りかねます。
FORM02がどのような作りになっているかが鍵になると思いますよ。

【7018】Re:フォームから次のフォームに行くには
お礼  にしもり  - 05/12/27(火) 12:17 -

引用なし
パスワード
   ▼小僧 さん:
すみません。
下端に、レコード:|▲ ▲|がないフォームは連結ではないのですね。
自分のは連結だと思っていました。
実際、下端にレコード:|▲ ▲|がないのに連結であるフォームをみたことがあるのですが。。
FORM02が連結フォームでない場合にもFORM02を希望どおり動かすことはかなり難しいそうですね。
もっとべんきょうしてから質問すべきだと自分で思いました。
失礼しました。

【7019】Re:フォームから次のフォームに行くには
発言  小僧  - 05/12/27(火) 15:56 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは。
すみません。ちょっと当方の勘違いがありましたので訂正です。

>下端に、レコード:|▲ ▲|がないフォームは連結ではないのですね。

こちらの勝手な想像でグレーアウト(表示はされていますが、灰色で選択できない状態)
になっているのかな、と思っていました。

▲のボタンの有無は、連結フォーム、非連結フォームに関わらず
フォームのプロパティにある「移動ボタン」によって表示・非表示を切り替える事が可能です。

連結フォーム、非連結フォームは

・フォームのレコードソース
・フォーム上に配置されたコントロール(テキストボックスやコンボボックス等)の
 コントロールソース

の有無によって変わります。

(コントロールソースが設定されている = 連結している)


WhereCondition で設定したものは、レコードソース対してフィルタを掛ける事なります。
ヘルプにも書いてあるのですが、SQL の Where 句に相当するものです。

例えば FORM01 から レコードソースが T_Temp に設定されている FORM02 に対して、
WhereCondition を "店コード = '" & 店コード & "'" として開くという事は、

SELECT * FROM T_Temp Where 店コード = Forms![FORM01]![店コード]

という SQL (クエリ)を基にフォームを開く事と同じとなります。

1470 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free