none
Windows 10 バージョン 2004 (20H1) / 20H2 上で 半角カナのフォームを含んだ Access ファイルでエラーが発生する RRS feed

  • 全般的な情報交換

  • 2020/10/28 OS 観点での回避方法 (3-3) を追加しました。

    2021/06/03 OS 21H1 も本現象の発生対象バージョンであることを追加しました。

    こんにちは、Office サポート チームの佐村です。

    今回の記事では、Windows 10 バージョン 2004 上で半角カナ + カナに濁音 / 半濁音を含んでいる Access ファイルを開くとエラーが発生する状況について説明します。

    (Access のバージョンに依存性はなく Windows 10 バージョン 2004 / 20H2 /21H1 上での Access アプリケーションで発生します。)

     

    1. 現象

    Windows 10 バージョン 2004 上で Access ファイルを開いた時、VBA を実行しようとしたとき、VBA プロジェクトを開こうとしたとき等に以下のようなエラーが発生する可能性があります。

     

    ・フォーム名 ‘半角カナを含んだフォーム名’ が正しくないか、存在しないフォームを参照しています。

    ・データベースに含まれている VBA プロジェクトを読み取れないため、データベースを開くことができません。

     

    「データベースに含まれている VBA プロジェクトを~」のエラーダイアログで「OK」ボタンをクリックするとファイルに保存されている VBA プロジェクトが全て削除され、Access ファイルは操作の都度保存されるため VBA プロジェクトが削除された状態でファイルが自動保存されてしまい、コードが消失して復元ができなくなる可能性があります。

    また、フォームとの不整合状態が保持されることで以前の OS 上の Access で該当のファイルを開いても VBA が正しく参照できないといった問題が発生します。

    この動作が生じる条件は以下になります。
     

    問題発生条件

    Windows 10 OS バージョン 2004 または 20H2 / 21H1 である。

    Access ファイル内のフォーム名に半角カタカナを利用して濁音、半濁音のいずれかが含まれている。

     

    この条件を満たす場合、フォームに紐づく VBA プロジェクトが存在している場合や、半角カナのサブフォームを指定する際に全角で指定していると上記であげたエラーが発生します。

      

    2. 原因の説明

    Access アプリケーションでは、フォーム名に関して OS で用意している機能を利用し、半角と全角とを区別せずに比較しています。

    そのため、以前の OS では “ガ” と “ガ” のような全角 / 半角は同じ文字列として判定されていましたが、Windows 10 バージョン 2004 / 20H2 /21H1 では OS の自然言語処理を担う NLS (National Language Support) バージョンが更新 (6.3) され異なる文字列として判定されてしまいます。

    これによって内部管理上同じとみなされることが期待されるフォームが異なるものとして認識されるためにエラーが発生します。

     

     

    3. 対応方法

    本問題について確認し、修正方法を検討いたしましたが、更新プログラム等で現在のバージョンに対する更新は仕様上出来ないことを確認いたしました。

    自然言語処理を担う NLS の定義に基づいて発生している問題となりますが、NLS の性質上、既存のモジュールと修正されたモジュールがネットワークシステム上で混在すると解決の難しい不整合が生じる可能性があり、そのような状況を避けるため一度リリースされたバージョンの内容を修正することができません。

    このため、問題があった場合には新しいバージョンの NLS を開発して新しい OS とともにリリースする必要があります。

    つまり、既にリリース済のバージョン 2004 および 20H2 / 21H1 において既存のバージョンのまま問題を回避することは機能仕様上出来ず、2021年後半以降の Windows 10 OS にて本問題を修正したバージョンがリリースされます。

    これらのことから、バージョン 2004 および 20H2 /21H1 においては、利用者様にて問題が発生しないように対応をしていただく必要があります。

    3-1. Access アプリケーション観点 - Access EXE (MSACCESS.EXE) について、"Windows 8" の互換設定を行う

    エクスプローラーで MSACCESS.EXE までを展開し、MSACCESS.EXE のプロパティから互換モードで動作するように変更します。

    OfficeNN バージョン番号

    Office16 : Microsoft 365 Apps (Office 365 ProPlus) / Office 2019 / Office 2016

    Office15 : Office 2013

    Office14 : Office 2010

    -ご参考

    タイトル : クイック実行形式 (C2R) Windows インストーラー形式 (MSI) を見分ける方法

    URL : https://social.msdn.microsoft.com/Forums/ja-JP/57e5d81e-ef69-4c1f-9ef0-932d03d0e7ce/1246312452124831246323455348922441824335-c2r-12392-windows

     

    <設定変更方法 (C2R Office の場合)>

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

    ・エクスプローラー上から、MSACCESS.EXE を右クリックし、「プロパティ」を選択します。

    MSACCESS.EXE のプロパティ画面で「互換性」タブを選択します。

    ・「互換モードでこのプログラムを実行する」のチェックを ON にしてターゲットとして Windows 8 が選択されていることを確認します。

    ・「OK」ボタンをクリックします。

    ※元の設定に戻す場合は「互換モードでこのプログラムを実行する」のチェックを OFF にします

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

     

    <設定変更方法 (MSI Office の場合)>

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

    ・エクスプローラー上から、MSACCESS.EXE を右クリックし、「互換性のトラブルシューティング」を選択します。

    ・「推奨設定を使用する」を選択する。

    Windows 互換モード : Windows 8 となっていることを確認し「プログラムのテスト」ボタンをクリックします。

    Access アプリケーションが起動したら×ボタンで閉じて「次へ」ボタンをクリックします。

    ・「はい、このプログラムのこの設定を保存します」を選択します。

    ・「閉じる」ボタンでトラブルシューティングツールを閉じます。

    ※元の設定に戻す場合は以下のレジストリ配下の MSACCESS への設定を削除します。

    HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompactFlags\Layers

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

    なお、Access をはじめ Office  アプリケーションは互換性を変更した検証は実施しておらず、

    互換性を変更して動作させた場合に、予期しない動作が発生することがございます。

      

     

    3-2. Access ファイル観点 - Access のフォームで半角カタカナを全角カタカナに変更する

    Windows 10 OS 1909 等、以前の問題が発生しない OS バージョンでフォーム等の半角カタカナを全角カタカナに統一します。

    VBA コードに半角カナでフォームを指定している場合等、半角カタカナのフォームを参照している処理は全角カナに修正する必要があります。

     

     3-3. OS 観点 – Windows OS NLS バージョンを 6.3 から 6.2 に変更する

    問題の発生しない NLS バージョン 6.2 (以前の OS で利用されていたバージョン) を利用することで本問題は発生しません。レジストリを変更して対処する必要があります。

    <レジストリ NLS\Version の値の変更手順>

    - 以前の NLS バージョンに戻す場合 (Access のエラーを回避する)

    キー : [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Sorting\Versions]

    名前 : 既定

    : 0006020F

    コマンド) REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Nls\Sorting\Versions /ve /d 0006020F /f

    ※管理者として起動したコマンドプロンプトで実行ください。

    - バージョン 2004 / 20H2 の既定値 (Access のエラーが発生) に戻す場合

    コマンド) REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Nls\Sorting\Versions /ve /d 00060305 /f

    注意点

    本レジストリの変更で NLS バージョンを 6.2 に変更した OS についても弊社にてサポートいたします。

    しかしながら、アプリケーションの実装やビジネスロジックによっては、ソートの整合が崩れたり、データが不正となる可能性がありますので、何か問題が発生してお問い合わせいただく場合には、NLS バージョンを 6.2 に変更して運用していることを随時担当エンジニアにお知らせくださいますようお願いいたします。

    また、NLS バージョン 6.3 では合字データ (㋿ や ㍻) のソート順を変更していますので、合字を利用する場合にこのソート順が

    変わります (Windows 10 バージョン 1909 と同じになる) ことも合わせてご了承ください。

    バージョン 6.2 昇順 : ㋿ ㍻ ㍾ ㍼

    バージョン 6.3 昇順 : ㍾ ㍼ ㍻ ㋿

    ユーザーや管理者による対処不要で、更新プログラム適用等で対処ができず申し訳ありませんが、

    問題によって NLS バージョンの値を変更するか、MSACCESS.EXE の互換モードを下げるという

    対処が必要となりますことご了承くださいますようお願いいたします。

    補足

    一度エラーが発生した Access ファイルは不整合の内容を保持しているため、上記対応方法を実施後もエラーが発生する可能性がございます。その場合、バックアップファイルから戻すといった修正が必要になります。

    今後の方針や追加の回避方法等が分かり次第本資料を更新します。

     

    本情報の内容 (添付文書、リンク先などを含むは、作成日時点でのものであり、予告なく変更される場合があります。




    2020年8月24日 15:29
    所有者