プロが教える店舗&オフィスのセキュリティ対策術

MicrsoftAccess2000「見積請求納品システム」を使用しています。
取引先の消費税の計算方法を四捨五入と切り捨てに区別したいです。
以前にも同じ質問をしたのですが、難しい為諦めました・・・。
ですが、やはりシステムの変更が必要なので教えてください!

Module1に以下の式があります。
Public Function funcSG(xCy As Currency) As Currency
If xCy > 0 Then
xCy = Int(xCy + 0.55)
Else
xCy = Int(xCy - 0.55)
End If
funcSG = xCy
End Function

請求書コマンドマクロは以下のようになっています。
マクロ名 計算
アクション 値の代入

アイテム [Forms]![請新フォーム]![消費税額]
式 funcSG([Forms]![請新フォーム]![税抜金額]*0.05)

アイテム [Forms]![請修フォーム]![消費税額]
式 funcSG([Forms]![請修フォーム]![税抜金額]*0.05)

今は全て四捨五入されるようになっていると思うので、切り捨てもできるようにしたいです。
得意先テーブルに消費税区分を設けて区別したいです!
宜しくお願い致します!

A 回答 (24件中21~24件)

【つづき】



#16,17では、コントロールソースへの書き方にしていましたが、
マクロで値を代入する式のところには、先頭の = を削除したものを指定してください。

例)
アクション: 値の代入
アイテム: [消費税額]
式: TaxInterPre([税区分],[税抜金額]*GetTax([日付]))

で良さそうですが・・・

>「txtax」も作成しました。
ということなら、
式: TaxInterPre([税区分],[税抜金額]*[txtax])

でも。


※税区分を消費税のように履歴を持てる形ではない、のですよね。
「税区分」の内容が、文字列の様なので、GetTaxDiv に変更が必要になります。

わからない点等は、また記述してください。

この回答への補足

30246kikuさんいつもありがとうございます!(5/20 15:50)
頭の整理をする為にもう一度以下のようにやり直しました。

T消費税の作成 #16参考

TaxInterPre/GetTax/funcSGという名前のモジュールを作成
(TaxInterPre funcSGは#12、GetTaxは#16参考)

得意先名テーブルに税区分(数値型)追加

請求書明細クエリーと請求書指定明細クエリーに税区分追加

マクロ作成

アクション:値の代入
アイテム:[Forms]![請新フォーム]![消費税額]
式:TaxInterPre([税区分],[Forms]![請新フォーム]!
[税抜金額]*GetTax([Forms]![請新フォーム]![日付]))

アクション:値の代入
アイテム:[Forms]![請修フォーム]![消費税額]
式:TaxInterPre([税区分],[Forms]![請修フォーム]!
[税抜金額]*GetTax([Forms]![請修フォーム]![日付]))

以上の様にしたところ、請新フォームは得意先ごとに区別して
税計算をするようになりました!
次に請修フォームで値を入力してみると
「このオブジェクトに値を代入することはできません。
※指定したオブジェクトは、読み取り専用フォーム上のコントロールです。
※デザインビューで開いているフォーム上のオブジェクトです。
※指定した値が大きすぎるために、このフィールドに代入できません。」
となります。通常通りの値を入力しているので大きすぎることは無いです・・・

アクションの実行エラーは
請求書コマンドマクロ.計算2
条件:True
アクション名:値の代入
引数:[Forms]![請修フォーム]![税抜金額],[15]+[610]
です。

請新フォームではできたので、なかなか理由が見つかりません。
宜しくお願いします!

補足日時:2010/05/20 15:51
    • good
    • 0
この回答へのお礼

30246kikuさんいつもありがとうございます!(5/20 16:18)

請新フォームにコピーというコマンドボタンがあり、
先月分の請求書をコピーして今月分の請求書を作成しています。
そのコピー(コマンドボタン)を押すと
「このフィールドに入力した値が不正です。
たとえば、数値型のフィールドに文字列を入力しました。」
となります。
アクションの実行エラーは
請求書コマンドマクロ.コピー
条件:True
アクション名:値の代入
引数:[Forms]![請新フォーム]![税抜金額],[Forms]![請修フォーム]![税抜金額]
です。
税抜金額(フィールド名)は通貨型(データ型)で書式は「\\#,##0;"-\"#,##0」です。

何を伝えたらいいのか分からないので足りない部分はおっしゃって下さい。
宜しくお願いします!

お礼日時:2010/05/20 16:19

#21です



なんか追記があるんじゃ・・・と見てみたら、ありましたね。
(さて、通知のメールはいつ届くのでしょう・・・)


> 「税区分」の内容は数字に修正したので回答番号:No.12の TaxInterPreを
> コピーしてモジュールを作成しました。

#12のものですか?
「税区分」の内容が文字列であれば、#20のものになると思います。


> 指定した式に、MicrosoftAccessが見つけることができない関数名が含まれています。

TaxInterPre / GetTax 関数の記述は、標準モジュールにしていますでしょうか。

各フォームに記述しているのなら、標準モジュールの方に記述を移し、
各フォーム内の記述は削除します。
(四捨五入部分の関数も同様に)

標準モジュールの挿入は、
VBE(VBAを記述していく画面)のメニューに挿入があったと思います。

まず、この変更をやってみてください。
(仮定で記述していますので、既に実施済みなら・・・)


また、わからなかったら記述してください。

この回答への補足

30246kikuさんありがとうございます!

「税区分」の内容を数字に修正したので#12のTaxInterPreを
コピーしてモジュールを作成しました。

TaxInterPre/GetTax/funcSG関数の記述はデータベースウィンドウの
オブジェクトからモジュールを選択して作成していましたので
挿入から標準モジュールを選択してそこに貼り付けて、
それぞれ別にして再度作成しました。

上記のようにして使ってみましたが
指定した式に、MicrosoftAccessが見つけることができない関数名が
含まれています。
となり前回と同じです。

ちなみに(TaxInterPre関数の画面→ツール→)参照設定は
Visual Basic For Applications
Microsoft Access 9.0 Object Library
Microsoft DAO 3.6 Object Library
OLE Automation
Microsoft Visual Basic for Applications Extensbility 5.3
にチェックが入っています。

宜しくお願いします!

補足日時:2010/05/18 14:33
    • good
    • 0
この回答へのお礼

30246kikuさんありがとうございます!

ちなみにバージョンは
Microsoft Windows XP
Microsoft(R) Access 2000
です。

一つ気になるのがモジュールを選択しても実行ボタンを
選択できないことです。

宜しくお願いします!

お礼日時:2010/05/18 16:19

ご迷惑をおかけしています。

#22です

回答していて、個人的に考えさせられることがあったので、しばらく離れていました。
解決したい、っていう質問者さんには、不利益なことと思ってしまいます。
経緯は、私の最近の回答履歴を参照されるとわかると思います。


> 消費税額は-1円になります

この現象は、TaxInterPre を呼び出す時に、TaxInterPre( 2, 0 ) のように、
四捨五入ありの区分で、消費税部分が 0円 の場合に発生します。

これは、内部の処理については言及していませんでしたが(書き方だけ)、
(どのような処理内容・・・は、客先が提示することだったような??)
funcSG の判別部分に起因します。

If xCy > 0 Then

により、結果的に -1 となる処理となります。

If xCy >= 0 Then

にすると、0 は 0 のままとなります。

-1 になるのは、この部分を修正することで対処できますが、
> 税抜金額が100円でも1000円でも
より、本質的な解決にはなりません。


値がセットされていて、チャンと TaxInterPre を呼び出しているはず!!!
と思われているものと察します。
こういった時には、デバッグ作業をしていくことになります。
(細かいところは私にはわからないので、自分でするしかありません)

ボタンをクリックする前に、module1 を開いて、
TaxInterPre 内の先頭 TaxInterPre = 0 部分をクリック後「F9」を押し、
ブレークポイントを設定します。
(もう一度「F9」を押すと解除になります)
設定/解除は、その行が反転表示されるのでわかると思います。
(メニューのデバッグから辿って選択しても同様です)

どういう値が設定されているの・・・
を確認するには、メニューの表示から「イミディエイト」「ローカル」「ウォッチ」
などで行います。

今回、その値だけを確認したいので「イミディエイト」を使ってみます。

ボタンをクリックすると、ブレークポイントに設定した TaxInterPre = 0 で止まります。
止まっている状態で、マウスのポインタを変数名のところに持っていくと
今の値は何ですよ・・・って簡単に確認することもできます。

cVal が 0 だったら、イミディエイトウィンドウに以下を入力して、元々の値を確認してみます。

? [Forms]![請新フォーム]![税抜金額]
? [Forms]![請新フォーム]![日付]
? GetTax([Forms]![請新フォーム]![日付])

起動していたフォームが「請修フォーム」だったら
? [Forms]![請修フォーム]![税抜金額]
? [Forms]![請修フォーム]![日付]
? GetTax([Forms]![請修フォーム]![日付])

行の頭に記述している ? は、教えてよ、って意味になります。

どこが 0 になっているの・・・っていう感じで、追いかけていきます。

値だけではなくて、付随するプロパティとかも確認していきたいって時には、
「ウォッチ」を使ったりします。


現在、「請新フォーム」「請修フォーム」の2つがあるようですが、
代入先、計算過程のコントロール/コントロールソース名が同じであれば、
マクロでの記述は、フォーム名を指定しない以下で共通で使えるような気がします。
(マクロはあまり得意ではないので検証はしていませんが)

アクション:値の代入
アイテム:[消費税額]
式:TaxInterPre([税区分],[税抜金額]*GetTax([日付]))

これを確かめられるのであれば、まずは先の問題が解決してからということに・・・


※ もしここで、参考URLの記述があったとしたらクリックされますか。
(解決されるための方法とかが記述されているところに誘導するのが目的ですが)
    • good
    • 0

#23です



クリックしますか・・・なんて、そのものを記述していないと気味悪いですよね。

ってことで、クリックされるかはご自身で判断してください。
(サイト内には、もろ広告があるようです)
(っていうか、後、何回書けるのでしょうか???)
(今後、削除対象になるかも・・・、、いや、今回のも削除対象でしょうか???)


実行時エラー、あわてないでデバッグを押す、デバッグ方法解説
http://www.ken3.org/vba/debug.html

その記事と合わせて、先頭にある
[Debug.Printを使い値の確認]/ [ウォッチ式とSTOP]
なども参考になると思います。
    • good
    • 0
この回答へのお礼

能力不足なので消費税を日付から求めることを諦めました・・・
長く教えていただいたので申し訳ないです。
以下でできました。

1.標準モジュールを#12を参考に作成
2.得意先名テーブルに税区分追加(1or2入力)
3.それぞれクエリに税区分追加
4.#12を参考にマクロ作成

まだまだ変更すべき点がありそうですのでまたよろしくお願い致します!

お礼日時:2010/05/24 17:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!