• 締切済み

ACCESS2021に変えたら値が代入されない

開いてくださりありがとうございます。 MS-ACCESS2003で開発した業務システムがあります。 今回、ACCESS2021(Microsoft365)に変更したところ、不可解な動作が生じていて非常に困っています。 以下に抜粋したコードを記載します。 -- Me!税抜合計 = Me!小計 Me!消費税 = Me!消費税計 Me!伝票合計 = Me!総額 -- 伝票入力フォームから伝票明細を入力し、その合計が表示されるテキストボックスの値を作業用のテキストボックスに代入しています。 ブレイクポイントで停止させて確認すると、右側の項目には間違いなく値が入っている(マウスポインターを合わせると例えば1000と表示される)のですが、左側の項目は0のままです。 この状況は伝票明細が5行以上の時に発生します。 (4行以下の伝票では発生しません) しかもACCESS2003では問題なく動作していました。 値が代入されないのは長く開発していて初めての現象です。 ぜひアドバイスをお願いします。

みんなの回答

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.7

>当該処理の前後にブレークポイントを設定して1行ごとに進めると  確かにその行を通過していて値が代入される事が確認でき、 ★この直後でも「左側の項目」は0のままでは無いですか。  命令文は次で試して頂けましたか  ------------- Parent!税抜合計 = 小計 Parent!消費税  = 消費税計 Parent!伝票合計 = 総額 ---------------- ★添付図は  【T見積】テーブルをレコードソースとするメインフォームと  【T見積明細】テーブルをレコードソースとするサブフォームです。  【T見積】内の【ID】と【T見積明細】内の【見積ID】とが  1:∞のリレーションシップに定義されています ★フォームに於いても、添付図のようにメインフォームと  サブフォームの関係を【リンク親フィールド】  【リンク子フィールド】と表現されます ★【変数の宣言を強制する】  これはどー成っていますか? もし未だならなら、  実行時に新しい変数として処理されています。

この投稿のマルチメディアは削除されているためご覧いただけません。
stylishcoolguy
質問者

お礼

非常に丁寧な回答ありがとうございます。 質問文にも書きましたが、 -- Dim La as long La = Me!税抜合計 -- 上記の部分のさらに下の行にブレークポイントを設定して一時停止させてマウスポインターを合わせて値を確認すると、Me!税抜合計 は 1000 と 表示されますが Laは 0 となっています。 全く分からないので "雲作業" という外注ワーカーのサイトで見つけた技術者に外注しました。 ご協力ありがとうございました。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.6

いったん止めたら代入されるということですので DoEventsを入れてみるとか DoEvents Me.税抜合計 = CLng(Me.小計) DoEvents Me.消費税 = CLng(Me.消費税計) DoEvents Me.伝票合計 = CLng(Me.総額) 他にSleep関数やWaitメソッドも ただ、動作は遅くなると思いますが…。

stylishcoolguy
質問者

お礼

回答感謝します。 ご指摘の通り試してみましたが結果は変わりませんでした。 伝票編集では問題なく値が代入されているので記述が原因ではないように思います。

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.5

>現象としては、質問文で示したコードのさらに下方の行に  ブレークポイントを設定すると  当該行左側のテキストボックスに値が代入されず、  そのコード自身にブレークポイントを設定すると代入されます。  ブレークポイントを設定しないとまるでその部分を  すっ飛ばして実行していないように見えます。  なので正常に処理が行われていないと考えられてます。  その原因が全く分かりません。 ★ブレークポイントは添付図の命令文の左の●印ですか  ここで止まりますが、ここからは【F8】キーで命令文毎進みます。  これで、飛ばされているかどうかのチェックが出来ます ★添付図のオプションの枠内の編集タグの  【変数の宣言を強制する】に✅がないと  テキストボックスも変数と見なされてパスします。  エディター画面の  【ツールリボン】→【オプション】→【編集】確認して下さい

この投稿のマルチメディアは削除されているためご覧いただけません。
stylishcoolguy
質問者

お礼

アドバイスありがとうございます。 当該処理の前後にブレークポイントを設定して1行ごとに進めると確かにその行を通過していて値が代入される事が確認でき、設定しないで実行させると値が入らず3つの項目がゼロのまま保存されます。 全く経験のない現象で原因が皆目見当がつきません。

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.4

>伝票入力フォームから伝票明細を入力し、  その合計が表示されるテキストボックスの値を  作業用のテキストボックスに代入しています。 ★次をお試しください ------------- Parent!税抜合計 = 小計 Parent!消費税  = 消費税計 Parent!伝票合計 = 総額 ------------------------------ 【伝票入力フォーム】は【伝票明細】をサブフォームとする  フォームではありませんか  これ等の命令文は【伝票明細】の側にあると思います  とすると左の項目のMe!はおかしいですね  また、日本だけかも知れませんがMe!は省略できます。   サブフォームからメインフォームの項目は特定できますが   メインフォームからサブフォームの項目は複数の   レコードがあり特定できません ★メインフォームとサブフォームのレコードソースのテーブルが  1:∞のリレーション   このリレーションフォームのデータタグで定義が必要

stylishcoolguy
質問者

お礼

アドバイスありがとうございます。 これまで2003バージョンでは問題なく動作していました。 今回2021バージョンに変更したら不具合が発生して困っています。 現象としては、質問文で示したコードのさらに下方の行にブレークポイントを設定すると当該行左側のテキストボックスに値が代入されず、そのコード自身にブレークポイントを設定すると代入されます。 ブレークポイントを設定しないとまるでその部分をすっ飛ばして実行していないように見えます。 なので正常に処理が行われていないと考えられてます。 その原因が全く分かりません。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

> 5行以上になると0になるのかが理解できません。 そうですね。 あとは ありきたりですが 最適化や修復 フォームの再作成 くらいしか思いつきません。

stylishcoolguy
質問者

お礼

回答ありがとうございます。 私も全く見当もつきません。 Dim La as long で変数を定義して La = Me!小計 という行を挿入して値を確認してみたのですが、 Me!小計は1000, Laは0という状況です。 条件によってLaに値が代入される事もあります。 不可解です。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

ACCESS2021(Microsoft365)がないので単なる想像になりますが Me.税抜合計 = Me.小計 Me.消費税 = Me.消費税計 Me.伝票合計 = Me.総額 にしてみたらどうでしょう。

stylishcoolguy
質問者

お礼

アドバイス誠にありがとうございます。 試してみましたが結果は同じでした。 質問文で記載している通り、明細行が4行以下の伝票は問題なく値の代入ができているのに5行以上になると0になるのかが理解できません。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

MS-ACCESS2003で開発した業務システムは、ACCESS2021(Microsoft365)では動かない場合が多いです。できれば、MS-ACCESS2003でお使いください。

stylishcoolguy
質問者

お礼

アドバイスありがとうございます。 ACCESSのバージョンが変わると正常に動作しなくなる事があるのは理解しています。 ただ、ACCESS2003はすでにサポート終了していますし今後、いつまで使用できるかもわかりませんのでバージョンアップは必須と考えています。 それと今回の事例はバージョンが異なる事による機能の違いとは思えません。 テキストボックス(変数)に値が代入されない事例なんて聞いた事がありません。