エクセルからADODBで自作関数を含んだクエリを呼び出すとエラーになる

このQ&Aのポイント
  • MS-ACESS2000を使用している際に、エクセルからADODBを使って自作関数を含んだクエリを呼び出そうとするとエラーが発生します。
  • 実行時エラー '-2147217900(8004e14)' が表示され、式に未定義関数'koteityo'があることが示されます。
  • このエラーは、エクセル上で自作関数を正常に動作させることができないため発生しています。解決方法を教えてください。
回答を見る
  • ベストアンサー

自作関数を含んだクエリをエクセルからADODBで呼び出すとエラーになる

MS-ACESS2000を使用しています。 自作関数を含んだアクセスのクエリをエクセルから、ADODBを使って呼び出そうと すると・・・ ===================================== 実行時エラー:'-2147217900(8004e14)' 式に未定義関数'koteityo'があります ===================================== というエラーが発生します。 自作関数名:koteityo モジュール名:Mdl です。 自作関数を含んだアクセスのクエリは、アクセス上ではちゃんと動いています。エクセルに呼び出そうとすると、上記のエラーが出てしまいます。 是非とも、教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

以下のリンク先にピッタリの記事があります。 http://www.accessclub.jp/bbs6/0020/das6169.html では。

nokodanna
質問者

お礼

piroin654さん 回答、ありがとうございます! 仕事でつまづいていた件でした。 土日中は、休みのため試してみることができませんが、拝見したところ ”ピッタリ” のようです。 週明けに試してみます。 取り急ぎ、御礼まで!!

nokodanna
質問者

補足

piroin654さん ご回答ありがとうございます。 ご紹介いただいた、 http://www.accessclub.jp/bbs6/0020/das6169.html​ のページですが、すみません・・・ >1. Accessファイルの標準モジュールに、自作関数付き選択クエリを実行してレコードセットを返す関数を追加 が、ちょっと分からなかったです。(アクセスVBAが初心者なもので・・・) 「レコードセットを返す関数」って、具体的にどのようなものなのか、教えていただければ幸いです。

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

失礼しました。訂正です。 テーブル名tblTableがSQL文の中ではtblTになっていました。どちらかに統一してください。 strSQL = "SELECT tblT.ID, tblT.氏名, tblT.年齢 FROM tblT WHERE (((cmdType([年齢]))=True));"

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

pirorin654です。 Accessに計算をさせてその結果をExcelに取り込むようにExcelに関数を作るほうがはるかに 簡単だと思われます。二度手間になる気がします。例をあげてみます。 例えば、AccessのテーブルをtblTableとします。ID、氏名、年齢の各フィールドがあり、 年齢の抽出条件に自作関数cmdTypeを使用したとき、エクセルの標準モジュールに以下の 関数を貼り付けてイミディエイトウィンドウでcmdGetDataを実行してみてください。 DAOで書いているのでエクセルにDAOのチェックをしてください。 tblTableのデータは適当に。 Sub cmdGetData() Const DB_PATH = "C:\WINDOWS\sample1.mdb" 'ファイルのパス Dim accApp As Access.Application Dim rs As DAO.Recordset Dim strSQL As String strSQL = "SELECT tblT.ID, tblT.氏名, tblT.年齢 FROM tblT WHERE (((cmdType([年齢]))=True));" Set accApp = GetObject(DB_PATH) Set rs = accApp.CurrentDb.OpenRecordset(strSQL) Do Until rs.EOF Debug.Print rs!ID, rs!氏名, rs!年齢 rs.MoveNext Loop rs.Close Set rs = Nothing End Sub tblTableがあるAccess側の標準モジュールに Function cmdType(x As Integer) As Boolean If x > 20 Then '年齢が20以上 cmdType = True Else cmdType = False End If End Function 以下を貼り付けてください。

nokodanna
質問者

お礼

piroin654さん ありがとうございました。 おっしゃるとおり、 Excelに関数を作るほうがはるかに簡単ですね。 設計し直します! 解決できそうです。

関連するQ&A

  • アクセスでReplace関数を使用しているクエリがエクセルに読み込めない

    ヴァージョンは2003です。 アクセスのクエリをエクセルへ落としたいので エクセル→データ→外部データの取り込み→新しいデータベースクエリでアクセスのファイルを選択し、 読み込みたいクエリを選択して「>」を押すと 『式に未定義関数 'Replace' があります。 』 と言うメッセージがでてしまい回避できません。 たしかにそのクエリではReplace関数を使用しています。 しかしアクセスでは問題なく表示できます。 アクセスに戻り、指定のクエリからReplace関数をなくせば エクセルに読み込むことができます。 以上 回避方法をご存知の方、 ヒントだけでもいいのでご教授よろしくお願い致します。

  • Access関数を、どのクエリーで使用しているか調べる方法

    Accessのモジュールで定義した関数を、どこで使用しているか調べたいのですが、 クエリが多いので1つずつ探していくとかなり時間がかかり、また、見落としも心配です。 他の関数内から呼ばれているものは、検索で調べられるのですが、 クエリで使用されているものは検索できませんでした。 何か良い方法はないものでしょうか? よろしくお願い致します。

  • エクセルVBAでアクセスの更新クエリを実行

    エクセルVBAでアクセスの更新クエリを実行する方法はありますか? アクセスもエクセルも常に起動している状態です。 エクセルからアクセスの更新クエリを実行するコードを教えてください。 アクセスで実行するとしたら Sub test1() DoCmd.OpenQuery "更新クエリ" End Sub というコードになります。 できれば、ADODBを使ったやり方がいいのですが、 エクセルからアクセスのプロシージャーのtest1を呼ぶしかないのでしょうか?

  • ACCESS モジュールで自作した関数が、未定義関数・・・?

    モジュールで自作した関数を使用する際、普段は問題なく使用できるのですが、何かの拍子に「未定義関数です」という内容のエラーが発生します。 こうなると、この関数は使えなくなります。 この関数のコードを変更しなくても、このエラーは発生します。 ACCESSそのものを再起動すると問題なく使用できます。 なぜこのようなことがおきるのでしょうか? 解決方法はありますか? よろしくおねがいします。

  • Access2000での未定義関数replaceのエラー表示

    Access2000での未定義関数replaceのエラー表示 Access 2000を使用しています。 昨日まで順調に作業していましたが、本日クエリを実行したところ、「式に未定義関数replaceがあります」とエラー表示され、先に進めなくなってしまいました。 なぜ急にこのエラーメッセージが出たのか不思議です。 なにか対処方法があったら、教えていただければ幸です。

  • アクセス 複数クエリ⇒エクセルの各シートに

    MS Access と MS Excelとの連携テクニックについて、 教えてください。 アクセスで、クエリA・クエリB があるとすると、 マクロ・VBAを使用して、 これらを、エクセルファイル(ファイル名は任意)の 各シートとして、Sheet1,Sheet2としてエクスポートしたいのですが、 可能でしょうか?

  • ACCESS 関数

    フォームのテキストボックス「text2」のコントロールソースに =roundup([text1]/1.05,0) と書いて実行したら「#NAME?」エラーになりました。試しにクエリに field2:roundup([field1]/1.05,0) と書いて実行したら、実行時に「式に未定義関数'roundup'が」あります」とエラーになりました。 ヘルプを見ると「この関数からエラー値 #NAME? が返された場合、msowcf.dll をセットアップしなければならないことがあります。」と書かれています。 検索したら、このファイルは「C:\Program Files\Microsoft Office\Office」内にありました。 モジュールの参照設定で上記ファイルを登録したところ「Microsoft Web Components Function Library」にチェックが付きました。 改めてフォームとクエリを実行しましたが結果は同じでした。 どうすればROUNDUP関数を使えるようになるでしょうか。 ACCESS2000です。よろしくお願いします。

  • エクセルからアクセスの全てのクエリ名を取得すること

    エクセルからアクセスの全てのクエリ名を取得することはできますか? アクセスからなら http://www.accessclub.jp/vbakaisetu/58.html これでできたのですが、 エクセルからアクセスの全てのクエリ名をシートに書き出したいのですが どうすればいいでしょうか? エクセルからアクセスのクエリ名を取得するプロシージャーを実行して 変数に格納し、エクセルに戻すしかないのでしょうか?

  • 未定義関数(前にあったような質問)

    おはようございます。是非皆様のお知恵をお借りしたく質問いたします。 ExcelとAccessとのデータ連携についてですが、Excelでメニューバーの ”データ(D)-外部データの取込(D)-新しいクエリーの作成(N)”を選択し "データソースの選択 MS ACCESS97 Database*"を選択 EXCELシートにデータをおとしたいAccessのファイルを指定してその中の 例えばクエリー5のデータを指定したときに式に未定義関数’Round’が あります。と表示されデータをExcelにおとせなくなります。 ヘルプボタンを押すと"ドライバのエラーです。詳細については、使用しているドライバのマニュアルを参照してください。"とのコメントです。 データ連携できる解決方法を教えて下さいお願い致します。 使用ソフト:Access97,Excel97 ※Access97でRound関数がないためモジュールでFunctionでRoundを作成し ました。

  • Accessのクエリで、CStr関数を使った項目のグループ化と抽出のエラー

    アクセスで「TEST1」という名のクエリでCStr関数を使って数値を文字型にしている「項目1」という名のフィールドがあります。(他にもフィールドはあります) 別のクエリ(「TEST2」)で、「TEST1」クエリを使って、「項目1」フィールドをグループ化し、さらに抽出条件に『 "1" 』と入れて実行したところ、 『集計関数の一部として指定された式 '[TEST1].項目1="1"' を含んでいないクエリを実行しようとしました。』 とメッセージが出て実行できませんでした。 ◎ 数値を文字型にしたものをグループ化しさらに抽出条件で絞り込みたいのですが、どうしたらいいのでしょうか? 「TEST1」クエリをテーブルにしないで実行したいのですが。。。 わかる方がいらっしゃったら、教えてください。よろしくお願いします。