【Access】式に未定義関数 ‘xxx’ があります。[原因,対処方法]

スポンサーリンク
アイキャッチ 猫Access
スポンサーリンク

今回は、Accessのクエリ等を実行した際に、
式に未定義関数 ‘xxx’ があります。」とエラーメッセージが出て処理できない場合があります。
このエラーには原因が複数パターン想定されるため、それぞれの対処方法を紹介します。

エラーメッセージ
スポンサーリンク

エラー原因

原因は複数パターンありますが、ざっくり言うと
システムがモジュール内に関数内で使用していないのに使っていると判断しているためです。

以下の通り、うっかりミスからややこしいものもあるため
対処するには一つ一つ順に見ていきましょう。
(上から順に可能性の高いパターンです)

  1. 関数を定義していない、又は誤った関数名を使用している場合
  2. 関数名とモジュール名が同じ場合
  3. ライブラリが参照不可になっている場合
  4. 関数の宣言でPrivateを使っている場合
  5. 関数名に2バイト文字が使用されている場合
  6. モジュールが破損している場合
スポンサーリンク

対処方法

以下の正常な状態を一部変更し、エラーパターンを作成していきます。

クエリでの関数呼び出し:「挨拶: CallHello()」

モジュール名:「こんにちは」
関数名:「CallHello()」

Function CallHello() As String

CallHello = "Hello World"

End Function

関数を定義していない、又は誤った関数名を使用している場合

勘違いで呼び出す関数を定義していない、又は誤った関数名を使用している場合、
呼び出すことができずエラーになります。

例えば、
Function CallHello() As String と宣言しているのに、
CallHallo()で呼び出している場合等

調べるには、一度クエリから呼び出している関数名で、Visual Basic画面にて
プロジェクト内のコード内を検索(ショートカットキー:「Ctrl+F」)してみましょう。
もしなければ、誤っていますのでクエリを変更してください。

検索文字列が見つかりません

関数名とモジュール名が同じ場合

関数名とモジュール名が同じ場合、システム上名称が被ってしまいエラーとなります。

例えば、
Function CallHello() As String と宣言しており、
モジュール名もCallHelloになっている場合等

この場合、関数名又はモジュール名を変更してください。

ライブラリが参照不可になっている場合

ライブラリが参照不可になっており、
ライブラリ内の関数を使用していた場合、エラーとなります。
パソコンの交換やOS・Officeのバージョンアップでエラーが上がるようになった場合は、
このケースの可能性があります。

参照不可

この場合、Visual Basic画面にてツールタブから参照設定を開き、参照不可がある場合は、
参照をあらためて追加するか、関数を自前で作成する等やり方を変える必要があります。

関数の宣言でPrivateを使っている場合

関数の宣言でPrivateを使っている場合、
モジュール内からしか呼び出すことができないため、エラーとなります。

Privateはアクセス修飾子と呼ばれ、他にPublic等があります。
以下の通りアクセス修飾子によって参照できる範囲(スコープ)が限られており、
・Private Function:モジュール内のみ参照可
・Public Function:モジュール外から参照可
・Function:暗黙的にPublicとなるため、モジュール外から参照可
となります。

なので、例えば、
Private FunctionCallHello() As String と宣言している場合は、
FunctionCallHello() As String 又は
Public Function CallHello() As String
に変更する必要があります。

関数名に2バイト文字が使用されている場合

関数名に日本語等の2バイト文字が使用されている場合、
VBA上はコンパイルできても対応してはいないので、クエリから呼び出すとエラーとなります。

なので、例えば、
Function 挨拶する() As String と宣言している場合は、
Function CallHello() As String
に変更する必要があります。
(クエリからの呼び出し側も同様に、CallHello()へ変更)

モジュールが破損している場合

モジュールが破損している場合、呼び出せずエラーとなります。

この場合は、新しくモジュールを作成し、ソースコードをコピーして作り直す必要があります。

本ブログで一押しのオンラインスクールのご紹介♪




本ブログで一押しのオンラインスクール「Udemy」
筆者も利用しているスクールで、日頃の隙間時間に好きな講座が学べるので大活躍です♪

ジャンルが豊富で学びたい講座がきっとみつかる

AI・データサイエンスなど最先端のIT技術からプレゼンなどビジネススキルに関する講座まで15.5万以上(※海外講座含む)あるため、自分が学びたい講座をみつけることができます

お手頃な価格帯

1講座あたり数千~数万円程度で実践的なスキルアップが可能です。
講座は一度購入すれば視聴期限なく受講でき、30日返金保証もついているので安心して始めることができます。

学びやすい多彩な機能

0.5~2倍の変速機能で自分のペースで受講が可能、専用アプリを使えばスマホからオフライン環境でも視聴が可能です!
また、講師に直接掲示板から質問ができるので疑問を解決し自学自習をサポートしてくれます。

購入前に視聴できますので、是非興味のある方は↓をクリックしてみてください。




AccessOfficeVBAプログラミング
スポンサーリンク
nyanblog
タイトルとURLをコピーしました