次の方法で共有

Access 2016 ACCDE(実行可能ファイル)の動作がおかしい

Anonymous
2023-09-15T07:23:59+00:00

Access 2016 64bitでシステムを作成し、運用しています。

データベース:MySQL

クライアントPC(兼 プログラム開発マシン)

OS:Windows 10 Pro 64bit

Office:Professional Plus 2016 - ja-jp

(Accessのバージョン:2308 ビルド 16.0.16731.20182)

ACCDBにて作成したプログラムで、ACCDEを作成して

(手順:ファイル→名前を付けて保存→ACCDEの作成)

客先に納品しているのですが

2023/09/12にプログラムを変更してACCDEを作成したところ

変更した部分とは全く関係のない箇所で

エラーが発生するようになってしまい、困っています。

何故そう考えるに至ったかは

以下の【エラー内容】と【試した事】に 記載しますが

自分で調べた結論から述べますと

Office(Access含む)のアップデートで

何か問題が起こっているのではないかと考えています。

・私の他に同じような状況になっている人は居られないか?

・このような場合はどうやって対応すればよいか?

 (待つ対応をするべきなのか、

  積極的にエラー解除するべきなのか)

など、皆様のご意見を賜りたいと思います。

何卒宜しくお願い申し上げます。

----------------------------------

【エラー内容】

少し具体的に説明すると

メインフォームとサブフォームで構成されたデータの一覧画面があり

メインフォームでデータを絞込する操作をした結果が

サブフォームに表示されるように実装しています。

このサブフォームにテキストボックスがあり

コントロールソースに式を記述しているのですが

ACCDBでは正しいデータが表示されるにもかかわらず

ACCDEでは「#Func!」と表示されてしまいます。

また、サブフォームで1件のデータをカーソルで選択している状態で

メインフォームにある編集ボタンを押すと

ACCDBでは正しい詳細データが表示されるにもかかわらず

ACCDEでは「プロシージャの呼び出し、または引数が不正です」という

エラーになってしまいます。

【試した事】

解決するために

・再コンパイル後に、ACCDEを作成

・最適化後に、ACCDEを作成

・Office(Access含む)を修復後に、ACCDEを作成

しても上手くいかず

もしやと思い、前回2023/05/18に納品した時の

ACCDBを元にACCDEを作成したところ

同じエラーが発生する事を確認しました。

※同一のACCDBから 、2023/05/18の時点で作成したACCDEでは

 エラーが発生しない。

------------------------------- ---

Microsoft 365 と Office | アクセス | その他 | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2023-09-25T08:14:26+00:00

sk.exeさま、ご教示有難うございます。

コードの変更ではありませんが

その後、引き続き調査したところ

OSが同じ(Windows Updateも最新で同じ)、Officeが同じ(Accessのビルドも同じ)の

別のPCでACCDEを作成したところ

問題の現象が2つとも発生しない事が確認出来ました。

このため、私の使用しているPCで、Officeを修復ではなく

アンインストールして、再インストールしてACCDEを作成してみましたが

結果、問題の現象は解決しませんでした。

お騒がせして申し訳ありませんが、私の使用しているPCだけに何か問題があるようです。

原因は不明のままですが、報告させて頂きます。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

6 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2023-09-25T02:07:57+00:00

    Makapuさま、ご教示有難うございます。

    ※また、質問の仕方が複雑になりすぎたかな?と思い同じ趣旨の質問

     スレッド「Access 2016 同一のACCDBから作成したACCDEの動作が違う」をしてしまい

     申し訳ございませんでした。

    噛み砕いて、丁寧にご案内して頂きました

    ①→Option Compare Database の下のすべてのモジュールの先頭に Option Explicit があることを確認してから再コンパイル。

    ②→問題のあるフォームのコード モジュールから空の OnClose イベントプロシージャを削除する事で解決

    について

    ①は記述がそうなっていないモジュールが幾つかあったので修正

    (②は該当する記述がない)

    して試してみましたが、問題の現象は解決しませんでした。

    ・ちなみに別で自力で試してみていたコード変更として

     「#Func!」となってしまう式の中に

     InStr関数を使っていたので、これを一旦使わないようにするとエラーは解除出来たのですが

     本来やりたい事を実現するため、

     代わりにReplace関数を使うと再び「#Func!」となってしまいました。

     式の中で4回ネストすると現象がするのかな?という状況です。

    Chat GPT に質問してい頂いた回答も一読させて頂きました。

    ただ当初の質問の趣旨として、私としましては現行のプログラムで2年以上は問題なく運用出来ていたため

    ACCDBからACCDEを作成するための何かしらの要因が

    今年の5月から9月の間に変わってしまったのであれば、そこを対応したいと考えておりました。

    この要因がわからない以上、仰られるように

    今後もACCDEで納品するのであれば、エラー発生箇所についてひとつずつコードを変更して対応するしかないと思います。

    また今わかっているだけで2箇所のエラーというだけで、他にもACCDBからACCDEを作成する事によって

    過去には発生していなかったエラーが発生するかもしれない事を考えると

    今後はACCDBで納品する事を考えています。

    (これはこれで、ユーザーに意図しない操作をさせない対応を色々としないといけないので、大変なのですが…)

    いずれかの方法で対応しようと思います。ひとまず、有難うございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Makapu 92,110 評価のポイント ボランティア モデレーター
    2023-09-22T21:46:10+00:00

    ブリオさん、こんにちは。

    Office の更新プログラムには起因しなかったとの検証結果をありがとうございました。

    ACCDE で "Func!" エラーが表示される要因について、コードに何か問題がある場合が考えられます。

    ブリオさんのケースに該当するか分かりませんが、今一度フォームのソースコードを見直してから再コンパイルを行ってみるとどうでしょうか。

    以下は ACCDB では問題なく ACCDE でエラーになり改善したケースとなります。

    ( ※<Edge の拡張機能の翻訳>などをご利用下さい。)

    Solved - #Name? Error in accde file but not in accdb | Access World Forums (access-programmers.co.uk)

    →Option Compare Database の下のすべてのモジュールの先頭に Option Explicit があることを確認してから再コンパイル。

    vba - After making my .accdb an .accde, form events wont fire - Stack Overflow

    →問題のあるフォームのコード モジュールから空の OnClose イベントプロシージャを削除する事で解決

    ACCDEでは "#Func!" エラーが表示されるが ACCDBでは大丈夫なのはなぜか、Chat GPT に質問しました。

    以下 Chat GPT からの回答となります。


    Microsoft AccessのACCDBおよびACCDEは、Accessデータベースファイルを格納するための異なるファイル形式で、ユーザー定義関数および式に関する動作に違いがあります。

    ACCDB(Accessデータベース):

    ACCDBファイルは標準のAccessデータベースファイルです。テーブル、クエリ、フォーム、レポート、モジュールなど、さまざまなデータベースオブジェクトを含むことができます。

    ACCDBファイルでは、データベースオブジェクト(クエリやフォームなど)内でユーザー定義関数(UDF)を作成および使用できます。UDFにエラーがある場合、それは使用しようとしたときにエラーメッセージとして表示されます。

    ACCDE(Access実行可能データベース):

    ACCDEファイルは、Accessデータベースのコンパイルされたおよびロックダウンされたバージョンです。通常、Accessアプリケーションをエンドユーザーに配布する際に使用され、エンドユーザーがデータベースオブジェクトの設計を変更できないようにします。

    ACCDEファイルを作成すると、Accessはコード(UDFを含む)をエンドユーザーが編集できない形式にコンパイルします。このため、ACCDEファイルで"#Func!"を見ることがあります。

    ACCDEファイルで"#Func!"エラーが発生するのは、データベースオブジェクト(クエリやフォームなど)の中で使用されているUDFや式に問題がある場合です。ACCDEファイルは読み取り専用であり、エンドユーザーによる変更が許可されないため、Accessは詳細なエラーメッセージを提供せず、問題があることを示すために"#Func!"を表示します。

    したがって、ACCDBでは問題がなく、ACCDEで"#Func!"エラーが表示されるわけではありません。代わりに、Accessの各ファイル形式の振る舞いと目的に関するものです。ACCDBファイルではUDFを表示および変更でき、問題がある場合は詳細なエラーメッセージが表示されます。一方、ACCDEファイルではUDFがコンパイルおよびロックダウンされ、エラーはアプリケーションの整合性を保護するために"#Func!"として表示されます。

    ACCDEでの"#Func!"エラーを修正するには、通常、ACCDBソースファイルに戻り、問題を修正し、次にACCDEを再コンパイルする必要があります。


    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2023-09-19T06:40:20+00:00

    Makapuさま、ご教示有難うございます。

    丁寧にご案内して頂きました

    ・2023 年 5 月 9 日 バージョン 2304 (ビルド 16327.20248) =16.0.16327.20248

    にロールバックしてACCDEを作成したのですが、問題の現象は解決しませんでした。

    おそらく、以前はOfficeの更新を有効にしていたと思うのですが

    前回納品2023/05/18時点でのAccessのバージョンが正確には不明だったため

    約半年や、約1年ごとにリリース日を遡り

    ・2020 年 3 月 1 日 バージョン 2002 (ビルド 12527.20242)=16.0.12527.20242

    までロールバックしてACCDEを作成したのですが、問題の現象は解決しませんでした。

    新たに試してみてわかった事としては

    Office:Professional Plus 2010(Accessのバージョン:14.0.7268.5000)が

    インストールされている別のPCで

    前回2023/05/18に納品した時のACCDBを元にACCDEを作成したところ

    問題の現象は発生しませんでした。

    なのでエラーが発生する部分のプログラムに

    論理的なバグは無いのだと思っています。

    (そもそも、プログラム開発マシンでもACCDBならエラーは発生しないのですが…)

    またVBAの参照設定について

    ・作成したACCDEでエラーが発生しない別PC(Access 2010)

    ・作成したACCDEでエラーが発生するプログラム開発マシン(Access 2016)

    の2台で見比べましたが、Officeのバージョンの違いによる

    「*14.0」の部分が「*16.0」になっている差異を除けば、おかしい点はありませんでした。

    ※ここまでで明記出来ておりませんでしたが、2台のPCのOfficeは共に64ビットです。

    (ACCDEではVBAプログラムが見えないなどのAccessの仕様は除いて)

    ACCDBとACCDEで挙動に差異が出る原因として

    ・Office(Access含む)のアップデート

    の他に、何か考えられるものはあるでしょうか?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Makapu 92,110 評価のポイント ボランティア モデレーター
    2023-09-15T21:33:15+00:00

    こんにちは。

    更新プログラムの影響か確認する為、2023年5月頃の更新プログラムにロールバックするとどうでしょうか。

    ※ロールバック後は更新を無効にして下さい。

    ロールバックの方法は以下をご参照下さい。

    Office 365(2016)をロールバックする - Microsoft コミュニティ

    Office 2016 C2R および Office 2019 の更新履歴 - Office release notes | Microsoft Learn

    >Accessのバージョン:2308 ビルド 16.0.16731.20182

    という事から、2023 年 5 月 9 日 バージョン 2304 (ビルド 16327.20248) =16.0.16327.20248 にロールバックすると良いと思います。

    お試しになった結果の返信お待ちしております。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません