Microsoft Access ClubAccessフォーラムの過去ログIndexページAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

No6169.EXCEL─ADO→ユーザ関数入りAccessクエリを実行すると未定義エラー

タイトルEXCEL─ADO→ユーザ関数入りAccessクエリを実行すると未定義エラー
記事No: 6169
投稿日: 2007/05/27(Sun) 20:10
投稿者: secky!
OS:WindowsXP Home Edition
Access Version:2000

EXCEL(Ver.2002)からADO(Ver2.8)経由で同じPC上にあるACCESS(Ver.2000)のファイルに接続し、
CommandオブジェクトでACCESSファイル内のストアドクエリを実行して、レコードセットを獲得したいと思います。
そこで、ACCESSファイルを新規で立ち上げ、ストアドクエリを作成しました。また、この選択クエリではユーザ関数を使用しています。
ACCESS上でこのクエリを実行すると何のエラーもなくレコードセットが得られますが、Commandオブジェクトからこのクエリを実行すると、

式に未定義関数 '<ユーザ関数名>' があります。

というエラーが発生して結果を得ることができません。
この現象に関しての解決法をご存知の方、ぜひともご教授お願いします。

タイトルRe: EXCEL─ADO→ユーザ関数入りAccessクエリを実行すると未定義エラー
記事No: 6170
投稿日: 2007/05/28(Mon) 01:08
投稿者: secky!
お世話になります。
投稿しておいて申し訳ありませんが、別のキーワードでサイト内を検索したところ、
ほぼ同様の質問を見つけまして、解決策も分かりました。

No1313. ACCESSユーザー定義関数をEXCEL DAOからSQL上で利用する方法
http://www.accessclub.jp/bbs6/0006/das1313.html

実際にはDAOではなくADOなんですが、

>Access アプリケーション経由でのみ可能です。
>
>Const DB_PATH = "C:\TEST.mdb"
>Dim accApp As Access.Application
>Dim rs As DAO.Recordset
>Dim sSQL As String
>
>sSQL = "SELECT A,B,C FROM D WHERE ORI_FUNC(A)=1;"
>Set accApp = GetObject(DB_PATH)
>Set rs = accApp.CurrentDb.OpenRecordset(sSQL)

を参考にさせていただき、

1. Accessファイルの標準モジュールに、自作関数付き選択クエリを実行してレコードセットを返す関数を追加
2. ExcelシートのVBAに以下のようなコードを作成して実行
  Private Sub getAccData()
    Dim accApp As Object
    Dim rs As Object

    Set accApp = GetObject(<Accessファイルへのフルパス>)
    Set rs = accApp.Run(<1.で作成した関数名>)

    Me.Range("A1").CopyFromRecordset rs

    Set rs = Nothing
    Set accApp = Nothing
  End Sub

といった流れで、自作関数付きストアドクエリを実行させることができました。
GetObjectという便利な関数の存在も初めて知ることが出来ました。

大変お騒がせしました。またどうぞよろしくお願いします。


このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています

アメリカ合衆国の大手データセンターのアダルト対応可能なリーズナブル価格設定の専用・共有レンタルサーバーをご提供しています。
アメリカ合衆国の大手データセンターにサーバー機器を設置。
アダルト対応可能な専用・共有レンタルサーバーを提供。

 

ページの先頭へ 前ページへ戻る