
Access2007の更新クエリーで標準モジュールの関数を利用して更新をかけたい。然し、標
準モジュールで提供されるグローバル変数の値は、1回更新をかけると最初の初期値に戻
すのは面倒だ。
だから、標準モジュールの関数でクラスモジュールの関数を使いたい。クラスモジュール
の関数ではフォームを開いた時のイベントで変数を初期化する事が出来る。然し、標準モ
ジュールの変数は普通には再度Access2007のファイルを開かない限りは更新されたままに
なる。
なので、ここではクラスモジュールの関数を使いたいが。残念な事に更新クエリーではク
ラスモジュールの関数を使う事は出来ない。なので、ここでは標準モジュールの関数でク
ラスモジュールの関数を使う事で機能を実現させたい。
やろうとしたい事は例えば下記のテーブルが有った場合に
日付 入金 合計
10/01 100
10/02 100
10/03 100
上記の時に合計の欄を更新クエリーで下記の様に更新をかけたい
日付 入金 合計
10/01 100 100
10/02 100 200
10/03 100 300
本来は、直接クラスモジュールの関数をここで指定が出来れば良いが。指定は出来ない。
なので、標準モジュールの関数を使う。例えば、この例では更新クエリーでfieldの所に
合計:count1([入金])
ここでは、標準モジュールの関数では累計の為の変数を用意しておかなければならない。
だから、ここでは予め使える様にその変数の値をゼロにして初期化をしておかないといけ
ない。
確かに、この方法でも使えない事は無いが。然し、これが上手く行くのは最初の1回のみ
です。2回目以降は標準モジュール内で累積された合計の値を保持していますので。もう
これは使えません。
なので、ここでこの変数をクラスモジュールの変数を使う事に依って。このクラスモ
ジュールの変数を毎回にそのクラスのフォームが開いた時に自動的に変数をゼロにしての
初期化を行ない。この事に依ってその変数が前の影響で累積される事を防止したいと思っ
ています。
では、どうやってこの標準モジュールからクラスモジュールの変数を使うのかと言う所が
分かりません。別に、直接クラスモジュールの変数を使うのでなくても。標準モジュール
の関数からクラスモジュールの関数を呼んでも良いですが。今度は、その標準モジュール
からクラスモジュールを呼び出す方法が分かりません。
この標準モジュールからクラスモジュールを使う方法が分かりませんのでその使い方を説
明願います。宜しくお願いします。
No.1ベストアンサー
- 回答日時:
Access組み込みのDsum関数で間に合いそうな気がしますけど?
クエリのSQLビューに
SELECT 日付, 入金, 合計, CLng(Nz(DSum("入金","元テーブル","日付<=#" & 日付& "#"),0)) AS 合計計算
FROM 元テーブル;
※入金は長整数型と仮定しています。CLng、CDbl、CCur ・・・。
計算で求められるのは基本的にテーブルに保存することはあまりありませんが、
更新クエリなら
UPDATE 元テーブル SET 元テーブル.合計 = DSum("入金","元テーブル","元テーブル.日付<=#" & [元テーブル.日付] & "#")
WHERE (((元テーブル.合計) Is Null));
では。
PS.
フォームのデータシートは、
デザインビューに切り替え、
プロパティシートから既定のビューをデータシートにして保存すれば
次回からはデータシートビューになっているハズ。
有難う御座います。
データとしては、必ずしも日付が一意になっていない場合もありますの
で。今回の例の場合は確かに上手く行きましたが。
今回の例です。
日付 入金 合計
10/01 100
10/02 100
10/03 100
然し、下記の例の場合は上手く行きません。
日付 入金 合計
15-10-01 100
15-10-01 100
15-10-02 100
15-10-02 100
15-10-03 100
この場合の実行結果は下記です。
日付 入金 合計
15-10-01 100 200
15-10-01 100 200
15-10-02 100 400
15-10-02 100 400
15-10-03 100 500
上記の場合も、下記の様に結果を表示をしたいのですが。
日付 入金 合計
15-10-01 100 100
15-10-01 100 200
15-10-02 100 300
15-10-02 100 400
15-10-03 100 500
違いは、
15-10-01 <--一番目のレコード
15-10-02 <--三番目のレコード
済みません、私の例示の仕方が悪かったです。
再度の質問ですが、宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- Visual Basic(VBA) マクロについて教えてください。 1 2023/06/06 00:57
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- Excel(エクセル) VBAで、㉑という数値が、正しく、入力できない 2 2022/07/26 20:22
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- Excel(エクセル) エクセルのイベントVBAを複数のシートで動かしたい 1 2022/12/07 16:55
- バッテリー・充電器・電池 AC-DC電源モジュールの選択について教えてください 3 2022/04/24 11:44
- Visual Basic(VBA) ブックのCOPY 4 2023/02/25 20:17
- C言語・C++・C# C言語について。 3 2022/11/05 20:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Form間での値の受け渡しについて
-
日付を入力すると曜日が返って...
-
古い Perl における制約??
-
パワーポイントでマクロ(Auto_C...
-
RaspberryPi Pico MicroPython...
-
Visual Basicプログラムのエラ...
-
関数が使えない
-
PHPのWEBアプリからexec関数で...
-
Jcodeモジュールを使うのが定石...
-
Macバイナリの除去法
-
ユーザーフォームに最小化・最...
-
モジュールの最大数はいくつな...
-
マクロ初心者です。今更なこと...
-
【VBA】SUBプロシージャーは標...
-
JavaScriptの部品
-
テキストボックスの数値を3桁ご...
-
PerlでDBをつなぐことはでき...
-
CPANを使うことによるオーバー...
-
oracle10g へ、アクセスでつな...
-
'Range'メソッドは失敗しました
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで別モジュールへの変数の受...
-
ユーザー定義関数に#NAME?が返...
-
エクセルVBAでシートモジュール...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBAで、ユーザーフォーム...
-
Excel VBA 定義されたプロージ...
-
VBでグローバル変数を宣言するには
-
vba userFormのSubを標準モジュ...
-
モジュールの最大数はいくつな...
-
【vba】フォームに書いてあ...
-
Excel VBA 『Call』で呼び出す...
-
VBAで旧字体を異字体に一括で変...
-
モジュールとクラスの違いって...
-
モジュールからフォームのボタ...
-
大量の標準モジュールを解放す...
-
acwzlibとは?
-
SendKeysの使い方について
-
標準モジュールを削除したい。(...
-
VBA This Workbookモジュール...
-
VBA モジュールで共通に使う変...
おすすめ情報
質問の件に関しては、最初に指摘した様に更新クエリーでのfieldの欄
に標準モジュールの関数でtotal1([入金])と言う事で解決しています。
但しこの件に関しては再度同一のクエリーを実行した場合には内容が壊
れてしまいます。この件に関しては、もうこの更新クエリー単独での解
決は断念して。他の方法で解決を図ります。
その方法はマクロで内部の標準モジュールのグローバル変数の値をゼロ
にリセットする方法です。
マクロの流れとしては、
1. メッセージの設定
2. 標準モジュールのグローバル変数の値をゼロにリセットする
3. 更新クエリーの実行
4. 更新されたテーブルを開く
と言う事で諦めてこれで解決とします。どうも有難う御座いました。他
に良いのが有るのかも知れませんが。これで、一応は閉めたいと思いま
す。