環境:XP&ACCESS2003
メインフォーム(下記A)に得意先名、全体の金額、消費税等、サブフォームに売上明細(工種番号、工種、数量、単価、金額)
を持っています。
明細テーブルは、工種番号1~8、工種1~8、数量1~8、単価1~8、金額1~8までの
フィールドを持っています。
マクロで、工種番号が変わった場合、数量が変わった場合、それぞれ金額を計算させていました。
マクロをVBに変換したところ、以下のようになります。(工種番号1_AfterUpdateの場合)
With CodeContextObject
DoCmd.RepaintObject acForm, "A"
.Form.工種1 = DLookup("[工種]", "測量台帳", "Forms![A]![年度]=[年度] And Form.[工種番号1]=[工種番号] AND [Forms]![A]![ブロック]=[ブロック]")
.Form.単価1 = DLookup("[単価]", "測量台帳", "Forms![A]![年度]=[年度] And Form.[工種番号1]=[工種番号] AND [Forms]![A]![ブロック]=[ブロック]")
.Form.数量1 = 1
.Form.金額1 = Int(Form.単価5 * Val(Form.数量1))
[Forms]![A]![測量委託費] = [計]
[Forms]![A]![消費税相当額] = IntA([計] * Val([Forms]![A]![消費税率] / 100))
End With
Private Functionを作り、サブフォーム上のオブジェクトを数量1~8までが変更された時に、引数で渡してやり
シンプルな作りにしようと以下の様に作成しましたが金額(=引数のkingaku)がうまく変わりません。
ご存知の方、よろしくお願いします。
-------------------------------同一フォーム上のPrivate Function
Private Function suuryoukeisan(kousyubangou As String, suuryou As String, tanka As String, kingaku As String, _
F_suuryou, F_tanka, F_kingaku)
With CodeContextObject
DoCmd.RepaintObject acForm, "A"
F_kingaku = IntA(Val(F_tanka) * Val(F_suuryou))
kingaku = F_kingaku
[Forms]![A]![測量委託費] = 計
[Forms]![A]![消費税相当額] = Int(計 * Val([Forms]![A]![消費税率] / 100))
End With
End Function
----------------------------数量1が変わった場合の処理
Private Sub 数量1_AfterUpdate()
Call suuryoukeisan("工種番号1", "数量1", "単価1", "金額1", 数量1, 単価1, 金額1)
End Sub
---------------------------
No.4ベストアンサー
- 回答日時:
他の方が言われる通り、課題は多々あると思いますが、一つ一つクリアしていけばいいと思います。
今回の質問の内容に的を絞って回答します。金額1 はテキストボックスですよね?そう仮定して話を進めます。
>Private Function suuryoukeisan(kousyubangou As String, suuryou As String, tanka As String, kingaku As String, _
>F_suuryou, F_tanka, F_kingaku)
F_suuryou, F_tanka, F_kingaku As TextBox)
関数の宣言部分で、F_kingaku の型宣言を省略しない。
又は、
>F_kingaku = IntA(Val(F_tanka) * Val(F_suuryou))
F_kingaku.Value = Int(Val(F_tanka) * Val(F_suuryou))
代入のところで、代入するプロパティを省略しない。
これで、テキストボックス 金額1 に合計が入ると思います。
解説:
F_kingaku = IntA(Val(F_tanka) * Val(F_suuryou))
この代入でやりたい事は、F_kingakuが参照しているテキストボックスの既定プロパティValueへ代入です。型宣言とプロパティを両方省略した場合、うまく行かないようです。
型宣言とプロパティを両方省略した場合、Variant型の変数 F_kingaku に合計が入ります。
No.3
- 回答日時:
<売上伝票>
ID___得意策_ID
1____101
<売上明細>
ID____売上伝票_ID___行番号___単価___数量
1______1__________________1___________\511___2
2______1__________________2___________\511___1
3______1__________________3___________\511___2
このようなデーブル構造とデータ登録になるのでしょう。
[イミディエイト]
? DBSum("単価 * 数量", "売上明細", "売上伝票_ID=1")
2555
? Rounds(DBSum("単価 * 数量", "売上明細", "売上伝票_ID=1") * 0.05, 切り捨て)
127
[税抜売上合計]、[消費税額]列は、このように簡単に求められるので通常は必要ありません。
<メインフォームへの[税抜売上合計]、[消費税額]の更新は不可>
さて、サブフォームが更新される都度にメインフォームを更新することは一般的に不可能です。
ですから、これらはサブフォームで自動計算させたらいいです。
これですと、サブフォーム=>メインフォームというフォーカスの移動が発生しません。
手法は、単にフッターにテキストボックスを配置して式を仕組むだけです。
複雑なマクロを組む必要はありません。
これは、現行の Excel 風のテーブル構造でも有効な手法です。
<No2さんのアドバイスと課題>
1、[売上明細]を8行で追加禁止にする方法の確立。
2、[売上明細]で3行入力して2行目が削除された場合の[行番号]のリナンバーするルーチンの確立。
多分、質問者は、1、2の手法が判らないので Excel風のテーブル設計にしたのでしょう。
ここが課題ですね。
No.2
- 回答日時:
コードの中身は見ていませんが
>工種番号1_AfterUpdate
>数量1_AfterUpdate()
こんなのが1から8まであるのですか?
これは質問以前の問題として、テーブルがデータベースのものになっていません
メインとサブを関連付けるフィールドも見当たらないですね
テーブルの見直しをされるほうが先でしょうね
うまくいかない原因もその辺にあるように思われます
売上とその明細なら
[売上メイン](売上ID、売上日、得意先名)
「売上明細](売上ID、工種番号、数量、単価)
のようにするところじゃないですか
No.1
- 回答日時:
全部検証する気力と時間がないのでざざっと書きます
(別の方の回答をお待ちください)
ファンクションsuuryoukeisanがおかしい気がしますが この関数自体は上手く機能していますか?
引数に kingaku と F_kingaku があって
>F_kingaku = IntA(Val(F_tanka) * Val(F_suuryou))
>kingaku = F_kingaku
と言うのはおかしいような気がするのですが・・・
引数が変わる、というのはどういうことでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 一戸建て 残土処理費用について 5 2023/07/27 21:13
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- 経済学 答えが二つ出て曖昧なので誰か時給教えていただけると幸いです。 ある財の市場における需要関数と供給関数 3 2022/11/15 23:10
- 国産バイク 大型バイク カワサキz900rsに付ける ヨシムラのマフラーの質問です、 【 商 品 I D 】14 2 2023/06/27 13:43
- その他(ビジネススキル・経営ノウハウ) 独占禁止法、下請法、優越的地位の乱用 1 2023/03/11 22:52
- FTTH・光回線 ソフトバンク光2年縛り IP電話番号 同番移行出来ない? 光回線変更は面倒で難しいですか? 1 2023/01/08 21:54
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- 投資・株式の税金 一般口座で同一銘柄の総平均法のことで 1 2023/02/27 22:08
- その他(お金・保険・資産運用) 至急!【Wolt】各メニューの価格設定の簡単な計算方法 3 2023/03/05 11:58
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
土曜の昼、学校帰りの昼メシの思い出
週休2日が当たり前の今では懐かしい思い出ですが、昔は土曜日も午前中まで学校や会社がある「半ドン」で、いつもよりちょっと早く家に帰って食べる昼ご飯が、なんだかちょっと特別に感じたものです。
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
TextBoxコントロールを引数として渡すには?
その他(教育・科学・学問)
-
【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには
Access(アクセス)
-
AccessのRefresh・Requery・Repaintの違い
Access(アクセス)
-
-
4
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
5
ACCESS 複数のフォームから同一テーブル参照
Access(アクセス)
-
6
Accessでリストの並び順を変更したい
Excel(エクセル)
-
7
ACCESSでクエリを作成したら「式が複雑すぎます。」の表記が…
その他(データベース)
-
8
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
9
アクセスVBAのMe!と[ ]
Access(アクセス)
-
10
Access サブフォームでの選択行の取得
その他(データベース)
-
11
Access2007 textboxに入力できない。
IT・エンジニアリング
-
12
accessで該当するレコードがない場合
その他(プログラミング・Web制作)
-
13
サブフォームのデータを保存する方法
その他(Microsoft Office)
-
14
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
15
ACCESSのSQLで、NULLかNULLでないかの判定
その他(データベース)
-
16
AccessのWHERE句において、変数は使用できますか?
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LEFT JOIN あいまいな外部結合
-
商品番号を入力すると、商品名...
-
アクセス・ファイルメーカーを...
-
orace SQL文のエラー(ORA-0092...
-
IDの欠番
-
SQLで追加処理
-
Accessのフォームで思った順番...
-
updateでグループ化
-
エクセルでリピート率
-
差し込み後、元データを変更し...
-
エクセルで最後の文字だけ置き...
-
SQLで特定の項目の重複のみを排...
-
SELECT 文 GROUP での1件目を...
-
外部参照してるキーを主キーに...
-
フィルターかけた後、重複を除...
-
INSERT文でフィールドの1つだ...
-
EXISTSを使ったDELETE文
-
Oracleのデータ型、NUMBERについて
-
日付により変動する「単価」を...
-
カーソル0件の時にエラーを発生...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
商品番号を入力すると、商品名...
-
LEFT JOIN あいまいな外部結合
-
2つのテーブルを結合して最大値...
-
Accessのフォームで思った順番...
-
updateでグループ化
-
特定条件での連番の振り方を教...
-
IDの欠番
-
各伝票に対して明細を1行目だけ...
-
Accessレポート 複数条件での集計
-
ACCESSでフォーム上のオブジェ...
-
エクセルでリピート率
-
orace SQL文のエラー(ORA-0092...
-
Word差し込み印刷 数式について
-
アクセスのフォームで連動した...
-
文字列のあるキーワードから開...
-
SQL SELECTの記述方法について
-
ACCESS2000でコードごとの連番...
-
accessクエリの結果の縦横表示...
-
ACCESSでテキストデータ...
-
ACCESSのテーブル設計と...
おすすめ情報