- ベストアンサー
ACCESSでフォーム上のオブジェクトが引数に渡らない
環境: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 ---------------------------
- idek
- お礼率47% (170/361)
- その他(データベース)
- 回答数4
- ありがとう数1
- みんなの回答 (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 に合計が入ります。
その他の回答 (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風のテーブル設計にしたのでしょう。 ここが課題ですね。
- CHRONOS_0
- ベストアンサー率54% (457/838)
コードの中身は見ていませんが >工種番号1_AfterUpdate >数量1_AfterUpdate() こんなのが1から8まであるのですか? これは質問以前の問題として、テーブルがデータベースのものになっていません メインとサブを関連付けるフィールドも見当たらないですね テーブルの見直しをされるほうが先でしょうね うまくいかない原因もその辺にあるように思われます 売上とその明細なら [売上メイン](売上ID、売上日、得意先名) 「売上明細](売上ID、工種番号、数量、単価) のようにするところじゃないですか
- pouyo
- ベストアンサー率28% (48/166)
全部検証する気力と時間がないのでざざっと書きます (別の方の回答をお待ちください) ファンクションsuuryoukeisanがおかしい気がしますが この関数自体は上手く機能していますか? 引数に kingaku と F_kingaku があって >F_kingaku = IntA(Val(F_tanka) * Val(F_suuryou)) >kingaku = F_kingaku と言うのはおかしいような気がするのですが・・・ 引数が変わる、というのはどういうことでしょうか?
関連するQ&A
- Accessでサブフォームの合計をメインフォームに
Access2007で開発しています。 メインフォームにサブフォームを貼り付けており、 サブフォームに入力した「数量」「単価」から「金額」を計算して表示し、 その合計金額をメインフォームのテキストボックス(非連結)に表示しようと しています。 サブフォームは行単位で追加、削除が可能です。 サブフォームの更新結果が正しくメインフォームに表示されずに困っています。 おわかりの方、おられましたらお教え頂きたく、よろしくお願い致します。 【サブフォーム】 ・レコードソース:T_明細 ・[詳細]項目:数量・・・レコードソース=T_明細・数量 単価・・・ 〃 =T_明細・単価 金額・・・数量および単価のAfterUpdateで計算して表示。 [フォームフッター]項目:金額計・・・コントロールソース=Sum([金額]) ・Vbaコード: Private Sub Form_AfterUpdate() Forms![メインフォーム].合計計算 End Sub Private Sub Form_Delete(Cancel As Integer) Forms![メインフォーム].合計計算 End Sub 【メインフォーム】 ・テキストボックス:「合計金額」(非連結) Public Sub 合計計算() Me.サブフォーム.Requery 方法1: Me!合計金額 =DSum("金額", "T_明細", (キー項目指定 記述省略)) 方法2: Me!合計金額 = Me![サブフォーム].[Form].[金額計] End Sub ここで、 方法1の場合:数量、単価の変更入力及び行追加は正しく動作するが、 行削除の後、メインフォームの「合計金額」が再計算されず、変更前のまま。 方法2の場合:数量、単価の変更入力及び行追加すると、「合計金額」が”0”になる。 行削除しても「合計金額」は変わらず、変更前のまま。 どちらも、サブフォオームの「金額計」は正しく表示されています。 以上、よろしくお願い致します。
- 締切済み
- Visual Basic
- Access2003 四捨五入の方法について
Access初心者です。ご存知の方がいらっしゃいましたら教えて下さい。 現在以下のようなプロシージャを作成しました。 この計算方法だと小数点が切り捨てとなり、例として1000.5円という金額になった場合、1,000円として 表示されてしまいます。これを1,001円で表示できるようにしたいのですが、どのようなプロシージャを作成 したら良いかご存知の方がいらっしゃいましたら教えて下さい。よろしくお願い致します。 以下プロシージャ Private Sub 課税_AfterUpdate() On Error GoTo 課税_AfterUpdate_Err If (Forms!F_請求書!課税 = 1) Then Forms!F_請求書!消費税率 = 0 End If If (Forms!F_請求書!課税 = 2) Then Forms!F_請求書!消費税率 = 0.05 End If [小計] = Nz(DSum("単価*数量", "Q_請求明細", "[請求番号]=forms![F_請求書]![請求番号]")) [消費税] = Fix([小計] * Nz([消費税率])) [合計] = [小計] + [消費税] 課税_AfterUpdate_Exit: Exit Sub 課税_AfterUpdate_Err: MsgBox Error$ Resume 課税_AfterUpdate_Exit Me.Recalc End Sub
- ベストアンサー
- オフィス系ソフト
- ACCESS2003のグループ化のエラーについて
こんばんは、ACCESS2003のグループ化について助言をお願いします。 (OS:WIN7) ”TBL1”から抽出して”クリエ1”を作成したものがあります。 この”クリエ1”からさらに”クリエ2”を抽出して、フォームから入力できるように”フォーム1”を作成しました。 (”クリエ1”は他の方が作成したのを借りている状態です。) ”クリエ2”には”日付”、”商品番号”、”単価”があり、”フォーム1”で使えるように ”クリエ2”の各項目に以下のように抽出条件を設定、フォームから入力出来るようにしました。 <日付> Between nz([forms]![f_kensaku]![day_s]) And nz([forms]![F_kensaku]![day_e],#2099/12/31#) (空欄でも表示されるように”Nz()”を使いました。) <商品番号> Like "*" & [Forms]![f_kensaku]![shouhin] & "*" <単価> Like "*" & [Forms]![f_kensaku]![tanka] & "*" ”フォーム1”及び”クリエ2”から実行して問題なく検索できるのですが 日付、商品番号、単価が重複して見ず来らいので、”クリエ2”の”Σ”からグループ化を実行するとエラーとなってしまいます。 <エラー表示内容> 集計関数の一部として指定された式(上記3個のSQL文が表示)を含んでいないクエリを実行しようとしました。 当然、グループ化を外すと問題なく動くのですが、何が悪いのでしょうか?
- 締切済み
- その他(データベース)
- アクセス・ファイルメーカーを使っての枝番処理
はじめまして。データベースソフトに外部CSVファイルを取り込んで伝票処理を行いたく思っています。 取り込むCSVファイルには 伝票番号 枝番 品名 数量 123456 1 ○○ 2 123456 2 △△ 5 123456 3 ■■ 9 123457 1 ◎◎ 3 123457 2 ※※ 6 ~~~~~~~~~~~~~~ このような感じのCSVデータをデータベースソフトに取り込みたいのですが、一つのレコードに同一伝票番号のデータを多段にして枝番フィールド順に取り込む事は可能でしょうか? 伝票番号 123456 品名1 数量 単価 金額 品名2 数量 単価 金額 品名3 数量 単価 金額 品名4 数量 単価 金額 ~~~~~~~~~~~~ 品名10 数量 単価 金額 ------------------------- 合計 合計金額 こんな感じで表示されたいです。 お知恵を貸してください。
- 締切済み
- その他(データベース)
- Access-フォームのCaption変更
お願い致します。 Access97のフォームのクラスモジュールでCaptionの変更を行うコードを書いたのですが、いまいちうまくいきません。 ご指導お願い致します。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ *********************************************** Private sub Form_Load() DoCmd.OpenForm "F_OPEN" Forms!F_OPEN!Msg.Caption="お待ちください" ************************************************ このForms!F_OPEN!Msg.Caption="お待ちください" のところで、エラーメッセージ 「'Item'メソッドは失敗しました:'Forms'オブジェクト」がでてしまうのです。 お願い致します。
- 締切済み
- オフィス系ソフト
- アクセス モジュールの意味
下記はどうゆう意味なのですか?考えたのですが、よく分かりません。 private sub form open(cancel As Integer)・・・開いたとき ●If Forms!F_Main!検索条件 = 4 Then・・・??? これで分かりますか?? 宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- access 関数で出した合計に文字を挿入
初心者です、よろしくお願いします。 仕様環境 WinXP Access2002 レポートで請求書を作っているのですが、 [商品][数量][単位][単価][金額]とあり、 商品が複数あった場合の小計は =sum([数量]*[単価])となりますが、 更に消費税をつけると =sum([数量]*[単価])*0.05を足して 合計金額は=sum([数量]*[単価])+sum([数量]*[単価])*0.05 で出て来ます。 ちなみに書式は「通貨型」です。 そこで、合計金額を\10,500だとして それを”税込み合計金額 \10,500-”と表記できるようにしたいと思っています。 つまり関数で出した合計の前に”税込み合計金額”を そして最後に"-"をつけたいのです。 ラベルを貼ってしまえば出来ますが、 金額が千円台から百万円台まで対応させたいため 体裁をよくする上でラベルを貼るのは避けたいです。 請求書の定型の都合上で申し訳ないのですが、 こういうことは出来るのでしょうか? お知恵をおかしください。
- ベストアンサー
- オフィス系ソフト
- Access2000フォーム/サブフォームにつおて
Access2000でフォーム/サブフォーム(売上伝票)を作っています。 フォーム(売上伝票メイン)には伝票番号、売上先などを入力・・・ サブフォーム(売上伝票サブ)は商品、数量、金額などを入力します。 そこで質問ですが、サブフォームの商品は商品コード(コンボボックス)を入力すると該当する商品名、単価などを商品台帳から引いてくる、としたいと思い、商品コードの「更新処理後」に以下のコードを記述しました。 Me![商品名] = DLookup("[商品名]", "[商品台帳]","[商品コード]= Forms![売上伝票メイン]![売上伝票サブ]![商品コード]") サブフォーム上の商品名に商品台帳の商品名を入力するとしたつもりなのですが、何も表示されません。 単価も単位も同様です。 この方法ではだめなのでしょうか?
- 締切済み
- オフィス系ソフト
- 関数 「単価×売上数量」
B C D E F G 商品名 単価 売上数量 割引金額 消費税 箱代 5 E列の「割引金額」は、「単価」が200より小さい場合、または「売上数量」が100以上の場合は「単価×売上数量」の10%引きで表示し、それ以外の場合は「単価×売上数量」で表示。 「割引金額」の出し方を教えてください。 よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)