• 締切済み

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

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

みんなの回答

  • chayamati
  • ベストアンサー率41% (254/607)
回答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
  • ベストアンサー率65% (1614/2452)
回答No.6

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

stylishcoolguy
質問者

お礼

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

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

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

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

お礼

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

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

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

stylishcoolguy
質問者

お礼

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

  • kkkkkm
  • ベストアンサー率65% (1614/2452)
回答No.3

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

stylishcoolguy
質問者

お礼

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

  • kkkkkm
  • ベストアンサー率65% (1614/2452)
回答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はすでにサポート終了していますし今後、いつまで使用できるかもわかりませんのでバージョンアップは必須と考えています。 それと今回の事例はバージョンが異なる事による機能の違いとは思えません。 テキストボックス(変数)に値が代入されない事例なんて聞いた事がありません。

関連するQ&A

  • ACCESSで値を代入できないとは?

    ACCESS2000を使用しています。 フォームを作り、画面のテキストボックスに値を入れると、エラーになります。 エラーコードは 2448。 エラーメッセージは オブジェクトに値を代入できない と出ますが、ヘルプが参照できません。 どういうことなのでしょうか。

  • ACCESS 値の代入

    テキストボックスの値の代入をさせたい下記 例1 Aのテキストボックス Is not Null Bのテキストボックス null 結果 Cのテキストボックス OK 例2 Aのテキストボックス null Bのテキストボックス null 結果 Cのテキストボックス NG 例3 Aのテキストボックス Is not Null Bのテキストボックス Is not Null 結果 Cのテキストボックス NG

  • Access(office)のマクロの「値の代入」を使用するとき、式に

    Access(office)のマクロの「値の代入」を使用するとき、式にフォームにテキストボックス値を入力させたいのですが、対象のテキストボックスが「001234」と頭に「0」がつくテキストのせいか、入力値は「1234」となってしまいます。頭に「0」を入れて入力させたいのですがどうしたらよいでしょうか? 使用ソフトはAccess2000です。 ご教授お願いします。

  • ACCESSの値の代入に関して

    ACCESS2000を使用しています。 あるテキストコントロールに8桁のコードを入力します。 入力後、更新後のアクションで隣にあるコントロールに=left(8桁のコントロール,4)の 値を代入する仕組みを作成したのですが、この8桁に数字と文字(アルファベット)が 混在することがあり、数字のみの場合はなんなく代入できるのですが、文字が混在する 場合、エラーとなってしまいます。 代入するコントロールのデータ型は勿論テキスト型にしております。 このエラーの対処方をご存知の方がいらっしゃいましたらご教授お願いします。

  • Accessでの外税・内税

    Accessで請求書を作りました。 まず、フォームでサブフォームを組み込み、内訳を入力し、合計金額・消費税・税込合計金額のテキストボックスに自動的に数字が入るように作ってみました。請求書ごとに内税の物と外税の物があるので、外税と内税のコマンドボタンを作成し、どちらかをクリックすると、消費税のテキストボックスに消費税額または"税込価格"と表示され、合計金額のテキストボックスに消費税込の金額または合計金額をそのまま表示するという設定をしました。 こんな感じで↓ Private Sub コマンド26_Click() Me!消費税 = Me!合計金額 * 0.05 Me!税込合計金額 = Me!合計金額 + Me!消費税 End Sub Private Sub コマンド29_Click() Me!消費税 = "税込価格" Me!税込合計金額 = Me!合計金額 End Sub フォームではうまく表示されるのですが、レポートになると、「#Name?」と表示されてしまいます。 レポートでは消費税のテキストボックス=Forms!F請求書!消費税 税込合計金額のテキストボックス=Forms!F請求書!税込合計金額 と入力してあります。 フォームを開くと消費税と税込合計金額のテキストボックスには常に何も表示されてなくて、外税・内税のボタンを押さないと金額が表示されないのでそのせいでしょうか? また、このやり方ですと、どちらかのボタンを押すたびに全部のレコードが内税のみ、外税のみになってしまい、請求書発行後に金額が変わってしまいます。 請求書番号ごとに内税・外税の金額を残したいのですが、そんなことは可能でしょうか? 独学で本を見ながら作っております。 VBAとかほんとによくわからないので初学者でも簡単にできる方法がありましたらぜひお願いします。

  • accessのこのオブジェクトに値を代入することはできません エラー

    accessでデータベース参照システムを作成しているのですが、このオブジェクトに値を代入することはできません というエラーがでています。 色々過去ログを調べたのですが、私の内容と該当しそうなのがみつかりませんでした。 TABLE_A 親番号 子番号 項目a... b.... 3 , 1 , xxxxxxxxxxx 3 , 2 , xxxxxxxxxxxx TABLE_AとリンクしているフォームXを開きます。 開いたあと、filterをかけています。(例 filter : 親番号 = 3) そのフォームには、コントロールソースがいくつもあります。 編集ロックを解除して、データベースの内容を上書きしています。 新規作成時には、子番号という、テーブルのキー情報にだけ値を入れて(既存のmax値+1)、その他の項目を全てnullにして、データの新規登録を可能にさせています。 (例 : 3, 3 , xxxxxxxxのデータが作成される) ここまでは動作しています。 やりたいことは、親番号4という、TABLE_Aにない情報で、上記で、同じくフォームxを開いたあと、新規登録を可能にしたいのですが、 子番号のコントロールボックス(テキストボックス)に、1という新規番号をいれようとしたら、エラーになります。 内容は、{このオブジェクトに値を代入することはできません}です。 この解決方法がなかなかみつかりません。 説明が難しいので伝わりにくいかもしれません。 なにかありましたら、説明させて頂きます。 フォームは、 DoCmd.OpenForm stDocName, , , stLink で開いています。

  • 切上と切捨てを切り替えて 値を出したいのですが

    消費税の計算で  フォームにチェックボックスを設置 チェックボックスにチェックが入っていると切上け計算し 値を出す チェックボックスにチェックが入っていないと 切捨て計算し 価を出したいのですが  If Forms!編集!切上処理 = True Then Me!消費税 = Int((Me!金額合計+ Me!諸経費 - 消費税対象外) * Me!適用消費税率 / 100) Else Me!消費税 = Int(((Me!H金額合計+ Me!諸経費 - 消費税対象外) * Me!適用消費税率 / 100) + 0.9) End If うまく動きません どなたか ご指南ください

  • Access2000でTextBox変数の代入

    Access2000でTextBox変数を作成し、条件に応じて フォーム上に配置した2つのテキストボックスをその変数に代入したいのですが、うまくいきません。 Public tBox as TextBox If i = 1 Then Set tBox = テキスト1 ElseIf i = 2 Then Set tBox = テキスト2 End if ※ テキスト1、テキスト2はフォーム上に配置した テキストボックスの名称 このコードを実行すると、テキスト1は テキスト1.Textと解釈され、Textプロパティに何も設定 されていない場合、tBoxにはNULLが代入されます。 Textプロパティの値ではなく、テキストボックスオブジェクトそのものを変数に代入するにはどうすればよいのでしょうか。 ご教授お願いします。 環境は OS:Windows2000 Professional   Access2000 です。

  • テキストボックスの値を変数に代入したい。

    テキストボックスの値を変数に代入したいのですが、どういうコードを書けばいいですか? 例えばTextBox1の値を変数xに代入したいのですが。

  • エクセルでの値の自動代入

    エクセルでワークシートのセルからでもユーザーフォームからでもいいのですが、違うワークシート上の表(列が項目、行が日付)の当日日付のセルにマクロで作ったボタンを押すと値が挿入されるような方法はありますか? アクセスで値の代入のようにできればいいのですが。 マクロでもVBAでもいいのですが、できる方法はあるでしょうか?

専門家に質問してみよう