

【解決しました】  
根本的な原因箇所は特定できていないものの、対処法はわかりました。その結果、目的とする検索ができるようになりました。

  * AccessのDBへのデータ取込時に異常が起こっていると仮定し、今回のフォームに必要なカラムをひとつずつ取り込み、検索ボタンが正常に動作するかチェックしました。
  * 本検索フォームに利用想定しているカラムのうち、正常に動作することが確認できた最小限のカラム構成で実施したところ、検索ができるようになりました。
  * どのカラムのデータが異常なのか、またどのカラムが関連すると異常が起こるか、などの原因は特定できていません

概略  
Microsoft365のAccessにて新規にデータベースを作成、テキストファイルから一テーブルのみ取込、データベースサイズは1.2GB(2GBの上限に収まっている)。その一テーブルに対してフォームを作成し、検索ボタンを設置し、フォームビューにて検索ボタンを押すと以下のエラーが出ます。  
（実際にはVBAを使って検索できるように作りこみましたが、エラーの原因分析のために検索ボタンのみつけて試しました）

改善策、もしくは、原因特定の手順、確認箇所などご指摘いただけると助かります。

状態  
端末  
Windows 11 ProのPCです。

表示されたエラー

> Microsoft Acessが OLE サーバーまたは ActiveX コントロールと通信しているときにエラーが発生しました。  
>  `*` マクロ名、ユーザー定義関数名、[イベントプロシージャ]以外の式が指定されています。  
>  `*` 関数、イベント、マクロ評価でエラーが発生しました。

テーブル外観  
文字化けしておらず、また、日本語のカラム名もAccessでは一般的ですし、一見すると、問題ないように見えます。  
[![画像の説明をここに入力](https://i.stack.imgur.com/8pTWF.png)](https://i.stack.imgur.com/8pTWF.png)

フォームのVBA  
上記の質問文にある、試しに検索ボタンだけで実施したケースのVBAの状態は、原因特定のため、検索ボタンだけをフォームに配置し、コードは以下のような状態になっています。

[code]

    Private Sub 検索_Click()
    End Sub
    
[/code]

対応しているフォーム  
[![画像の説明をここに入力](https://i.stack.imgur.com/Kwz8q.png)](https://i.stack.imgur.com/Kwz8q.png)

実施した対策  
見つけた解決策として以下のような情報があり、適用したのですが改善せず。

  1. フォームを作り直す（フォームを複製し、元のフォームを削除する）
  2. データベースの最適化をする
  3. 参照設定で不要分のチェックを外す  
参照設定は以下のとおり（チェックを外そうとするとアラートが出るものを残した状態）  
[![画像の説明をここに入力](https://i.stack.imgur.com/uE7Yd.png)](https://i.stack.imgur.com/uE7Yd.png)

なお、デフォルトの以下の状態でも同様の結果です。  
[![画像の説明をここに入力](https://i.stack.imgur.com/81pV8.png)](https://i.stack.imgur.com/81pV8.png)

原因特定のために実施したこと

環境依存の問題なのか、本データやテーブルに問題があるのか、特定するため以下実施しました。

１．データ取込等に問題があるかどうかの検証  
新規データベースを作成し、本件のデータをあらためてインポートし、フォーム作成、検索ボタンのみ設置、その状態で、イベントプロシージャ選択→VBAコードを呼び出し、フォームビューで実行したところ、本件のエラーが出ました

２．環境依存で何か起こっているかどうかの検証  
新規データベースを作成、フィールドはid,itemcode,itemname、及び、レコードは1,"00000001","しろ"といった簡単な値のレコードを３行くらいのデータを使ってテーブルを作り、それに対してフォームを作成、検索ボタンのみを設置しました。その状態で、イベントプロシージャ選択→VBAコードを呼び出し、最後に、フォームビューを実行したところ、本件のエラーは起こりませんでした。

３．データ及びフォームに何か問題があるかの検証  
エラーが出た同じデータベースにて、上記「２」で実施した手順のうち、テーブル作成からフォーム作成、検索ボタン設置、VBAコードを呼び出しまで同じ手順で行い、同フォームビューで実行したところ、本件のエラーは起こりませんでした

３の結果、同一のデータベース内、同一の参照設定でも成功する場合があるので、テーブルもしくはデータに何か問題があるように思えています。

参考１．  
一応、コードに対してブレイクポイントを追加し、ステップインを実行してみましたが、何も起こりませんでした  
[![画像の説明をここに入力](https://i.stack.imgur.com/XRLP8.jpg)](https://i.stack.imgur.com/XRLP8.jpg)

参考  
念のため、本来のVBAのコードを以下に掲載します

[code]

    Option Compare Database
    
    Private Sub 履歴検索_ボタン_Click()
    
    '変数等
    '伝票日付：日付検索FROM/日付検索TO
    '得意先コード: 得意先コード検索
    '得意先名: 得意先名検索
    '品目コード: 品目コード検索
    '品目名: 品目名検索
    
    '検索用変数の定義
    Dim filter_txt As String
    
    filter_txt = ""
    
    'FROM、TOの前後不備チェック
    If Me!売上日検索FROM <> "" And Me!売上日検索TO <> "" Then
    If Me!売上日検索FROM > Me!売上日検索TO Then
    MsgBox "期間指定が不適切です。再度入力してください。", vbCritical + vbOKOnly, "期間指定不備"
    Exit Sub
    End If
    End If
    
    '売上期間
    If Me!売上日検索FROM <> "" Then
    If Me!売上日検索TO <> "" Then
    filter_txt = "伝票日付 >= #" & Me!売上日検索FROM & "# and 伝票日付 <= #" & Me!売上日検索TO & "#"
    Else
    filter_txt = "伝票日付 >= #" & Me!売上日検索FROM & "#"
    End If
    ElseIf Me!売上日検索TO <> "" Then
    filter_txt = "伝票日付 <= #" & Me!売上日検索TO & "#"
    End If
    
    '得意先名
    If Me!得意先名検索 <> "" Then
    If filter_txt = "" Then
    filter_txt = "得意先名 like '*" & Me!得意先名検索 & "*'"
    Else
    filter_txt = filter_txt & " and 得意先名 like '*" & Me!得意先名検索 & "*'"
    End If
    End If
    
    '得意先コード
    If Me!得意先コード検索 <> "" Then
    If filter_txt = "" Then
    filter_txt = "得意先コード = '*" & Me!得意先コード検索 & "*'"
    Else
    filter_txt = filter_txt & " and 得意先コード = '*" & Me!得意先コード検索 & "*'"
    End If
    End If
    
    '品目名
    If Me!品目名検索 <> "" Then
    If filter_txt = "" Then
    filter_txt = "品目名 like '*" & Me!品目名検索 & "*'"
    Else
    filter_txt = filter_txt & " and 品目名 like '*" & Me!品目名検索 & "*'"
    End If
    End If
    
    '品目コード
    If Me!品目コード検索 <> "" Then
    If filter_txt = "" Then
    filter_txt = "品目コード = '*" & Me!品目コード検索 & "*'"
    Else
    filter_txt = filter_txt & " and 品目コード = '*" & Me!品目コード検索 & "*'"
    End If
    End If
    
    '削除
    'If Me!削除検索 = False Then
    ' If filter_txt = "" Then
    ' filter_txt = "削除 = false"
    ' Else
    ' filter_txt = filter_txt & " and 削除 = false"
    ' End If
    'End If
    
    If filter_txt = "" Then
    
    Me.FilterOn = False
    
    Else
    
    Debug.Print filter_txt
    Me.Filter = filter_txt
    Me.FilterOn = True
    Me.OrderBy = "伝票日付 DESC"
    Me.OrderByOn = True
    
    End If
    End Sub
    
[/code]


CC BY-SA 4.0
2023-09-26T13:04:12.830
96352
2023-10-05T03:02:37.723
2023-10-05T03:02:37.723
59916
59916
question
ms-access
"Microsoft Acess が OLE サーバーまたは ActiveX コントロールと通信しているときにエラーが発生しました" のエラー