Access VBAコンパイルエラー:プロジェクトではなく、ユーザ定義関数を指定してください。

このQ&Aのポイント
  • Access VBAで「この名前は既にあるモジュール、プロジェクト、オブジェクトライブラリで使われています」というエラーメッセージが表示される場合、モジュールやプロジェクトではなく、ユーザ定義関数を指定している可能性があります。
  • 具体的には、Dim文でオブジェクト変数を宣言している部分に原因があることが多いです。この場合、変数名が既に使われているか、オブジェクトライブラリとして使われている名前と重複している可能性があります。
  • 解決方法としては、変数名を変更するか、他のオブジェクトライブラリとの名前の衝突を避けるために変更する必要があります。また、オブジェクトブラウザーを使用して変数名を検索し、衝突の原因を特定することもできます。
回答を見る
  • ベストアンサー

この名前は既にあるモジュール、プロジェクト、オブジ

Sub test() Dim db As Database と宣言しているコードがあるのですが、 いきなり使えなくなりました。 コンパイルエラー プロジェクトではなく、ユーザ定義関数を指定してください。 というエラーになります。 http://okwave.jp/qa/q465366.html を参考に 「Microsoft DAO X.X Object Library」(X.Xはバージョン) にチェックを入れようとすると 「この名前は既にあるモジュール、プロジェクト、オブジェクトライブラリで使われています」 になります。 オブジェクトブラウザーで「db」を検索すると Excel.WorksheetFunction のメンバー にdbというメソッドがありました。 Dim db As Database のdbという名前が原因かなと思い、dbを違う名前に変えてみても同じです。 win8、アクセス2010です。 原因わかる方ご回答よろしくお願いします。

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

  • ベストアンサー
noname#212058
noname#212058
回答No.1

Database という名前のプロジェクトがないか確認して ください。もしある場合は、プロジェクトの名前を別の ものにしましょう。 ※プロジェクト名の確認方法  1)VBAエディタを開く  2)左側にある「プロジェクト」の一番上がプロジェクト名です 「プロジェクト」が表示されていない時は、「表示」→ 「プロジェクトエクスプローラ」をクリック なお、質問者さんが調べたページは「ユーザ定義型が定義 されていません」というエラーに対する対処方法ですので、 今回のエラーとは内容が全く違います。

hkudmlxd
質問者

お礼

ご回答ありがとうございました。

関連するQ&A

  • 名前'dbOpenDynaset'は宣言されていません というエラーがでてしまいます。

    VB初心者です。データベース接続を一度も成功したことがありません。 そのため「参照の追加」でMicrosoft DAO 3.6Object Libraryを設定することも わかりませんでした。 利用しているソフトはVB2008 Express Editionを利用しています。 以下のソースコードで名前'dbOpenDynaset'は宣言されていません というエラーがでてしまいます Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'DAOのオブジェクト変数を宣言する() Dim ws As DAO.Workspace Dim db As DAO.Database Dim rs As DAO.Recordset ' デフォルトのワークスペースを定義する Dim obj As DBEngine = New DBEngine() ws = obj.Workspaces(0) ' データベースを開く db = ws.OpenDatabase("C:\Users\PCUser\Desktop\database\Database1.accdb") ' テーブル名を指定してレコードセットを作成する rs = db.OpenRecordset("adress", dbOpenDynaset) MsgBox("DB接続") End Sub End Class

  • Access VBAよりExcelのシート名を取得

    お世話になります。 Access2010 Windows7 Pro 以下のページを参考にしましたが、「実行時エラー3170 インストール可能なISAMドライバーが見つかりませんでした。」と表示されてしまいます。 http://www.accessclub.jp/bbs5/0005/vba1231.html Dim Db As DAO.Database Dim Tbl As DAO.TableDef Dim xlsFile As String xlsFile = "ファイルパス" Set Db = OpenDatabase(xlsFile, True, True, "Excel 14.0;") ←ここで止まる For Each Tbl In Db.TableDefs If Right$(Tbl.Name, 1) = "$" Or _ Right$(Tbl.Name, 2) = "$'" Then 'シート名の最後は必ず$が付きます Debug.Print Tbl.Name End If Next Tbl Db.Close Set Db = Nothing なお、参照設定にて「Microsoft DAO 3.6 Object Library」にチェックが入っていないことが原因かと思い、チェックを入れようとしましたが「この名前は既にあるモジュール、プロジェクト、オブジェクトライブラリで使われています。」というメッセージが表示され、チェックを入れることができません。 勉強不足で大変恐縮ですが、これらのメッセージからどういうことが分かりますでしょうか。 ご教授の程、宜しくお願い致します。

  • AccessVBAのCurrentDbメソッドでエラーになります

    Windows2000、Access2000を使っています。 オンラインヘルプを参考に作った下記のプログラムを走らせると、Set db = CurrentDbのところで「実行時エラー13:型が一致しません」のエラーになります。どうしてでしょう。 Sub b() Dim db As DAO.Database Dim tdf As DAO.TableDef Dim fld As DAO.Field Set db = CurrentDb Set tdf = db.TableDefs("テーブル1") For Each fld In tdf.Fields Debug.Print fld.Name Next fld End Sub 参照設定を見ると、Microsoft dao 3.0 Object LibraryにチェックがついていますのでDAOは使えるはずなんですが・・・。

  • Excel VBA DAO バージョン 一覧

    いつもお世話になっております。 現在Excel2007でマクロを組みました。 下記ソースのような形で、マクロを実行するブック内にあるシートから、データを取得するのですが・・・・ ~ソース例~ dim dbEngine as object Dim db as object Dim rs as object Dim sql as object '■SQL格納 sql = sql & "Select 社員名 " sql = sql & " ,Sum(月収) as 年収 " sql = sql & " From 月収一覧 " sql = sql & "Group By 社員名,月収; " '■DBを開く Set dbEngine = CreateObject("DAO.DBEngine36") Set db = dbEngine.OpenDatabase("C:\社員月収.xls", False, False, "Excel8.0;") '■SQL実行後レコードセットへ格納 Set rs = db.Openrecordset(sql) としていますが「■DBを開く」の部分でCreateObject内で宣言している”DAO.DBEngine36”の部分がありますが、バージョンによって表記が違うかと思います。そこで、バージョンによる表記のしかたの一覧がほしいのです・・・・ <例> Microsoft DAO 2.5/3.0 Compatibility Microsoft DAO 3.0 Object Library Microsoft DAO 3.5 Object Library Microsoft DAO 3.6 Object Library → "DBEngine36" 以上です><よろしくお願いいたします!!

  • 早速やってみましたが、エラーが出てきてできません。

    早速やってみましたが、エラーが出てきてできません。  「ユーザー定義型が定義されていません。」と Dim DB As Database ここでとまってしまいます。 Help見たのですが、「オブジェクト ライブラリまたはタイプ ライブラリで定義する」とありました。 設定してみようとしたのですが、どれが必要なのかさっぱりわかりません。

  • 既存のAccessのテーブルに空の領域を作成する

    既存のAccess2000のテーブルに空の領域を作成する プログラムを作っているのですが(下記参照)、 「データベースの形式 <ファイル名> を認識できません。(Error 3343)」の エラーが出ます。 【状況説明】 ・パスの内容、パス名、DB名はあっています。 ・編集前のDB前に戻して(テーブル内に空白データが無い状態)、  再実行してもダメでした。 ・参照設定「DAO 3.51 Object Libraly」はチェックしています。  「DAO 3.6 Object Libraly」にチェックすると、  「この名前は既にあるモジュール、プロジェクト、オブジェクト  ライブラリで使われています。」のメッセージが出て、チェック出来ません。 解決方法がありましたら、記入をお願い致します。 【作成プログラム】 'DB関連設定  Dim DBName As String(iniファイルから取得したDB名)  Dim SQL As String (SQL文領域)  Dim DB名  As DAO.Database 'データベース接続 Set DB = OpenDatabase(iniファイルから取得したパス & "\" &               DBName) '領域作成 Do While 数値 > 0 SQL名 = "" SQL名 = SQL名 & "INSERT INTO テーブル (A, B, C) " SQL名 = SQL名 & "VALUES ("", "", ""); " db.Execute (SQL) 数値 = 数値 - 1 Loop db.Close

  • エラー3011

    パス名もきちんと設定し、データもあっているのですが オブジェクトが存在しないか、名前、パス名が違うと エラーがでてしまいます。どこが違うのでしょうか? Dim db As String Dim db_Mdb As DAO.Database Dim rd_Mdb As DAO.Recordset Dim stSQL As String db = "C:\XXX\VB\kanri.mdb"   'パス名は、アドレスをコピー貼り付けしたので間違いないと思います) ”省略(データベースに接続)” stSQL = "select * from name where bango=0001;" Set rd_Mdb = db_Mdb.OpenRecordset(stSQL, dbOpenTable) お願いしますm(__)m

  • アクセスVBAです

    Sub test() Dim DB As Database Dim T As TableDef Dim myTable As String myTable = "Table1" Set DB = OpenDatabase(CurrentProject.FullName) For Each T In DB.TableDefs If T.Name = myTable Then DoCmd.DeleteObject acTable, myTable Exit For End If Next DB.Close Set DB = Nothing End Sub これを実行しようとすると Dim DB As Database の部分で コンパイルエラー プロジェクトではなく、ユーザ定義型を指定してください。 と言うエラーになります。 Dim DB As Objectにすればエラーにならずに進みますが 何が原因なのでしょうか?

  • エクセルでDAO 参照設定は?

    エクセルでDAOを使う場合、 参照設定はどれにチェックを付ければいいのでしょうか? Dim db As DAO.database の宣言部分でエラーになってしまいます。

  • Access97でのエラー

    フォームを開くときに次のVBAを実行します。 Private Sub Form_Open(Cancel As Integer) Dim db As DAO.DATABASE Dim rs As DAO.Recordset Set db = CurrentDb ところが、Set db = CurrentDb の行で次のエラーが出ます。 実行時エラー '429' ActiveXコンポーネントはオブジェクトを作成できません。 ちなみに、これを作成したのは他のパソコンで、そのパソコンでは問題なく実行します。 Windows2000のパソコンにコピーして実行しようとするとダメです。 どなたかおわかりの方、いらっしゃいましたら、教えていただけないでしょうか?

専門家に質問してみよう