たびたびすみません。また詰まってしまったので教えていただけませんでしょうか。
Accessでレコード更新時にある項目に自動的に値を代入したいです。
前提としてテーブルは消費者マスターと単価マスターがあります。
単価マスターはフィールドとして単価ランク(主キー)と単価(通貨型)があります。
消費者マスターのレコードをフォームを使って編集する際に単価ランクをキーに
単価マスターから単価を引っ張ってきて 料金 というフィールドに代入して画面に表示し、
必要に応じて 料金 を画面から変更する形にしたいと考えてます。
どのように指定すればよいでしょうか?
それからこれは別の質問にした方がいいかもしれませんが、差し支えなければ
教えて下さい。
レコードの更新の際に 更新日 というフィールドに当日日付を自動的に代入したいのですが
どうすればいいでしょうか?
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
> 実行結果については、どちらも特にエラーメッセージは表示されず
> 画面で見る限りは何も入っていないように見えます。
> 該当項目に移動し金額や日付を入力し更新ボタンをクリックすると
> 正常に反映されていました。
ということは値の代入はできているが、表示に反映されてないという状況のようですね。
通常はすぐに反映されるはずなんですが、なにか普通でない設定をしているのかな。
とりあえず、OS、Accessのバージョン、単票フォームなのか帳票フォームなのか、など、
また、標準から変更した設定などがあればご提示ください。
あと、対症法的な対策になりますが、下記のコードを追加してみてください。
Private Sub 単価ランク_AfterUpdate()
Me.料金=DLookup("単価","単価マスター","単価ランク=" & Me.単価ランク)
Me.Repaint
End Sub
あるいは、Me.Recalc を追加してみてください。
この回答への補足
お手数かけます。
まずは本日のテスト結果を報告します。
Me.Repaint も Me.Recalc も特に変わらずでした。
それと今までは更新日も日付もブランクのままテストしていたのですが
今日は事前に値を入れてテストしてみました。
結果は事前に入れた値が表示されました。
それからパソコンの稼働環境ですが
OS は XP Home Editin Version 2002 Service Pack3
Office 2007
Explorer8
です。
Form は単票形式で作成しています。
設定は特に変更していないように思います。
テキストボックスで直接指定すれば、値が代入されたので
特に特殊な設定はしていないように思うのですが違うのでしょうか。
No.3
- 回答日時:
> 一つ目ですが、どんな値が入っているか調べようと思い、
> テキストボックスを作成し、そのコントロールソースに直接
> = DLookup("単価","単価マスター","単価ランク=" & Me.単価ランク)
> と指定したのですが、後ろの部分が自動的に [Me].[単価ランク] にされてしまい
> うまくいきませんでした。
Me というキーワードはVBAのコード中でしか使えません。
> = DLookup("[単価]", "単価マスター", "[単価ランク]=" & [Forms]![frm結果入力]![単価ランク])
> と指定したところテキストに単価の数値が入りました。
その式でもいいのですが、同じフォーム上のフィールドやコントロールを参照するときは、フォーム名を省略することでできます。
= DLookup("[単価]", "単価マスター", "[単価ランク]=" & [単価ランク])
> Private Sub 単価ランク_AfterUpdate()
> Me.料金=DLookup("[単価]", "単価マスター", "[単価ランク]="
> & [Forms]![frm結果入力]![単価ランク])
> End Sub
> と指定してみたのですが、うまくいきませんでした。
"[単価ランク]=" の後に改行が入ってますが、実際のコードにも入ってますか。
入っているなら削除してください。
ここに書き写すときに整形するために入れたのならいいのですが。
で、うまくいかないとは具体的にどのようになるのでしょうか。
エラーメッセージがでるとか、なんの反応もないとか、詳細に説明してください。
> それから二つ目ですが Me.更新日 = Date() と入力したのですが
> () が自動的に消されて Me.更新日 = Date となってしまい
> うまくいきませんでした。
() は消されても問題ないです。コード的には問題ないですね。
それで実行したときにどうなるのか。エラーがでるのか、でるならどんなエラーなのか。
何の反応もないのか。これも説明してください。
あと、コードを編集した後、VBAウィンドウのメニューの[デバッグ]-[****のコンパイル]をクリックしてから、上書き保存するようにしてください。コンパイルするとコードに構文間違いがあると指摘してくれます。
この回答への補足
遅い時間に考えていただきありがとうございます。
補足で説明させていただきます。
改行についてはしていません。
ご推測の通り説明する時に長すぎて見づらいと思い改行しました。
実行結果については、どちらも特にエラーメッセージは表示されず
画面で見る限りは何も入っていないように見えます。
該当項目に移動し金額や日付を入力し更新ボタンをクリックすると
正常に反映されていました。
コンパイルはご説明いただいた通りに行いエラーがないのを確認してから
SAVEしました。
私がわかる状況はこの程度ですが、これで判断できるでしょうか。
宜しくお願いします。
No.2
- 回答日時:
> 該当フォーム上の単価ランクのプロパティシートの更新後処理の欄に教えていただいた
> 式をいれてみましたが、うまくいきませんでした。
ひょっとすると更新後処理の欄に直接コードを記述したのかな。
更新後処理にイベントプロシージャとして関連づけるには、下記の手順で。
更新後処理のドロップダウンリストから [イベント プロシージャ] を選択。
右端のビルドボタン[...]をクリックする。
VBAウィンドウが開き、下記のように表示されるので、
Private Sub 単価ランク_AfterUpdate()
End Sub
真ん中の行に下記のようにコードを記述します。
Private Sub 単価ランク_AfterUpdate()
Me.料金=DLookup("単価","単価マスター","単価ランク=" & Me.単価ランク)
End Sub
二つ目についても、イベントプロシージャが下記のようになるようにしてください。
Private Sub Form_BeforeUpdate(Cancel As Integer)
Me.更新日 = Date()
End Sub
この回答への補足
懇切丁寧なご説明ありがとうございます。超初心者の私には大変ありがたいです。
イベントプロシージャなるものの存在もわかり一歩前進できました。
それで結果ですが申し訳ないですが、うまくいきませんでした。
それで昨日、今日と私なりに試したことを報告しますので、どこが悪かったか
指摘していかだけませんでしょうか。
一つ目ですが、どんな値が入っているか調べようと思い、
テキストボックスを作成し、そのコントロールソースに直接
= DLookup("単価","単価マスター","単価ランク=" & Me.単価ランク)
と指定したのですが、後ろの部分が自動的に [Me].[単価ランク] にされてしまい
うまくいきませんでした。
それでDLookup関数を調べ
= DLookup("[単価]", "単価マスター", "[単価ランク]=" & [Forms]![frm結果入力]![単価ランク])
と指定したところテキストに単価の数値が入りました。
そこでイベントプロシージャに
Private Sub 単価ランク_AfterUpdate()
Me.料金=DLookup("[単価]", "単価マスター", "[単価ランク]="
& [Forms]![frm結果入力]![単価ランク])
End Sub
あるいは
[Forms]![frm結果入力]![料金] = DLookup("[単価]", "単価マスター", "[単価ランク]="
& [Forms]![frm結果入力]![単価ランク])
と指定してみたのですが、うまくいきませんでした。
情報不足かと思いますが、わかる範囲で教えていただけませんか。
それから二つ目ですが Me.更新日 = Date() と入力したのですが
() が自動的に消されて Me.更新日 = Date となってしまい
うまくいきませんでした。
No.1
- 回答日時:
> 単価マスターはフィールドとして単価ランク(主キー)と単価(通貨型)があります。
> 消費者マスターのレコードをフォームを使って編集する際に単価ランクをキーに
> 単価マスターから単価を引っ張ってきて 料金 というフィールドに代入して画面に表示し、
フォーム上の 単価ランク の 更新後処理のマクロかイベントプロシージャで、DLookupで該当する単価を取得して、料金フィールドに代入すればいいでしょう。
イベントプロシージャのコード例
Me.料金=DLookup("料金","単価マスター","単価ランク=" & Me.単価ランク)
単価ランク は数値型の場合
> レコードの更新の際に 更新日 というフィールドに当日日付を自動的に代入したいのですが
フォームの更新前処理で、更新日にフィールドに Date() を代入します。
Me.更新日 = Date()
この回答への補足
日曜日にも関わらず早速回答いただきありがとうございます。
しかし私が初心者で回答頂いた内容が理解できていないせいかうまくいきませんでした。
具体的に言いますと一つ目については、
該当フォーム上の単価ランクのプロパティシートの更新後処理の欄に教えていただいた
式をいれてみましたが、うまくいきませんでした。
エラー表示はなく値がはいっていない状況でした。
指定する内容はコピー&ペーストで行ったので間違いはないと思います。
"単価マスター"の前の"料金"を"単価"に変えてみましたが結果は変わりませんでした。
二つ目については、
フォームのプロパティシートの更新前処理の欄に式を指定したのですが値は変わらず
レコードを更新する際に 'Me'オブジェクトを見つけることができません という
エラーメッセージが表示されました。
どのように指定すればよかったのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- 損害保険 火災保険、建物の評価額について 3 2022/09/11 19:48
- 電気・ガス・水道 燃料費調整単価について 2 2022/08/25 12:52
- Excel(エクセル) DSUM とSUMIFSについて。 6 2022/06/12 04:21
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) 関数を教えてください。 2 2023/08/01 10:59
- Access(アクセス) ACSESS初心者です マンション管理をACCESSで出来ないかとチャレンジしています。 リレーショ 3 2022/10/08 11:45
- 賃貸マンション・賃貸アパート マンション退去の原状回復について 1 2023/03/01 12:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
Accessの実行時エラーについて
-
SQL文で、合計が0のレコードを...
-
FROM句にサブクエリ使えませんか
-
日付により変動する「単価」を...
-
ACCESS ツリービューの作り方
-
フィルターかけた後、重複を除...
-
差し込み後、元データを変更し...
-
SQLで特定の項目の重複のみを排...
-
エクセルで最後の文字だけ置き...
-
SELECT 文 GROUP での1件目を...
-
外部参照してるキーを主キーに...
-
SQLで列名を変数にできないでし...
-
INSERT文でフィールドの1つだ...
-
テーブル列数とデータファイル...
-
Exel VBA 別ブックから該当デ...
-
SQLServerで文字列の末尾からあ...
-
Outlook 送受信エラー
-
VBA Scripting.Dictionary 連想...
-
datetime型でNULL値を入れたい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
SQL文で、合計が0のレコードを...
-
Accessの実行時エラーについて
-
ACCESS ツリービューの作り方
-
日付により変動する「単価」を...
-
ACCESS 商品毎の最新の単価を設...
-
アクセス フィールド名に変数...
-
最大値を含むレコードの抽出
-
アクセスにて月末日付を取得し...
-
アクセスのフォーム上でのルッ...
-
ACCESSでクエリ作成時複数のフ...
-
ACCESSでDLookUpすると、不正な...
-
前月の取得について
-
【SQL】あるマスタのレコードに...
-
レスポンス向上のためのDB設計
-
アクセス★非課税、課税の合計金...
-
inner join,left joi...
-
異なるデータベース間のテーブ...
-
サブクエリの書き方
-
ACCESS初心者です。
おすすめ情報