• 締切済み

VBAで宣言セクションにクラスの宣言をしたい

Excel VBAについての質問です。 ClassDataBaseというクラスモジュールを作成し、それをSheet1やThisWorkbookの宣言セクションで Public DB As New ClassDataBase というように宣言しようとしました。 ですが、これだと ---------------------------------------------------------- コンパイルエラー プライベートオブジェクトモジュールを、パブリックオブジェクトモジュール内で、パブリックプロシージャの引数または戻り値、パブリックデータメンバ、またはパブリックのユーザー定義型フィールドとして、使用することはできません。 ---------------------------------------------------------- というエラーが出てしまいます。 実は以前に質問し、教えていただいた際には標準モジュールで宣言するようにとのことだったのですが、他ではできないのかな?と思い、試したところこのような結果になってしまいました。 エラーの意味がわかればよかったのですが、ヘルプもなく、意味もわかりませんでした・・・。 どなたか、ご教授いただければ幸いです。 よろしくお願いいたします。

noname#224929
noname#224929

みんなの回答

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.1

Public DB As New ClassDataBase は、ユーザー定義型ですね。 標準モジュールで宣言するようにとのことだったのですが・・・ は、正しいです。 Public DB As New OLEObjectが、正しいのでは、

noname#224929
質問者

お礼

ご回答ありがとうございました。 大変遅くなりまして、本当に申し訳ございません。 これを機会にOLEObjectなどを勉強してみます。 今後ともよろしくお願いいたします。

関連するQ&A

  • パブリック変数を宣言する時に・・・

    エクセルVBAの質問です。 モジュールAとBがあるとしまして、 Aの中にあるプロシージャからBの中のプロシージャを呼び出す場合、 変数を引き渡したいとしたらパブリック変数を使いますよね? この場合宣言は、 Aの宣言セクションでするのか、 Bの宣言セクションでするのか、 あるいは両方で同じ変数を宣言するのか、 どれなんでしょ?

  • Excel VBAでグローバルな変数はどこで宣言すべきか?

    Excel VBAについての質問です(もしかするとExcelに限った話ではないかもしれません)。 宣言セクションで変数の宣言を行うとき、Publicステートメントをつけた場合の適用範囲(グローバルな範囲)がわかりません。 これは、Sheet、ThisWorkbook、標準モジュールなど、それぞれの宣言セクションの場合で違うのでしょうか? また、宣言が有効になるタイミングも違うのでしょうか? ネットで調べたり、本で調べたのですが、私の理解が不足しているのか、矛盾して書かれているように思います。 一方では全てでグローバルにあるように書かれているように思え、一方ではグローバルになる範囲が違うとかかれているように思うのです。 試してみてもいいのですが、確証がもてないままこれから使い続けるのは気持ち悪いので・・・。 ご回答いただけると幸いです。よろしくお願いします。

  • Excel:ThisWorkbookオブジェクト内にプロシージャを追加し、それを標準モジュールから呼び出すことは可能?

    (おかしなことを言っているかもしれませんし、 VBAについて正しく理解できていないのかもしれません) ThisWorkbookオブジェクト内にプロシージャ(Public)を追加して、 それを標準モジュールから呼び出すことが出来るのでしょうか? 質問内容のことを行いたいのです。 しかし、それ以前にThisWorkbookオブジェクト内にプロシージャを追加して、 それをThisWorkbookオブジェクト内から呼び出すことも今現在出来ていないません。 (ThisWorkbookオブジェクトにプロシージャの追加、またそれの呼び出しが可能か不可能かも分かっていません)

  • VBAでのグローバル宣言について

    (たとえばですが) 標準モジュールに『DataBase』を作成し、 Public TEST(10) as string TEST(0) = "hogehoge" と宣言し、 『Module1』にて Range("A1").Value = TEST(0) と記載して実行しようとすると 『コンパイルエラー:プロシージャの外では無効です。』 と表示されます。 ⇒解決方法はありますでしょうか。 【やりたいこと】 モジュールAにデータベース(String配列)を作成し、それをほかのモジュールから参照したいです。 データベース(String配列)は参照するのみで書き換えはしません。

  • VBAでの戻り値と引数について

    最近VBAでプログラムを勉強しています。 引数と戻り値について教えてください。 定義としては、 引数:プロシージャに渡される定数、変数、および式。 戻り値:呼び出し元に処理の結果を戻す値。 となっているのですがいまいちピンときません。 SubプロシージャとFunctionプロシージャでその違いがあると思うのですが、具体的にどれが引数でどれが戻り値なのかわかりません。 他のプログラミングも全く経験がない初心者で初歩的な質問ですみませんがご教授お願いします。

  • クラスの関数へユーザー定義型の引数を渡す(VB6.0)

    お世話になります。 クラスモジュール内へ宣言した関数へユーザー定義型(標準モジュール内でPublicで宣言)の引数を渡すとコンパイルエラーとなってしまいます。 ユーザー定義型を宣言した以外の標準モジュールでは同じ関数は動きますが、Formモジュールでは動きません。 標準モジュールにしかユーザー定義型の引数を渡すことは出来ないのでしょうか??

  • VBA subで戻り値指定するか宣言セクションか

    サブプロシージャから別のプロシージャを呼び出し戻り値を取得する場合、以下2方法があると思います。どちらがいいと思いますか? 方法1 宣言セクションで共通変数として宣言します。 Option explicit Dim x As Long ---------------------- sub A() call B end sub --------------------- sub B() x=~ end sub 方法2 戻り値xを指定します。 sub A() Dim x As Long call B(x) end sub ------------------------------- sub B(Byref x As Long) end sub 当初は方法1を使ってました。方法2を知らなかったからです。 次に方法2によりByrefの方法で戻り値指定が出来ると知り、使い始めました。 ところが、subの数が増えて来ると「あれ?この変数はByref?, Byval?どっちだっけ?」と分かり難く感じるようになりました。その点、方法1は一番上を見れば明らかです。しかしsub同士の独立が無いというか、別モジュールでソースコードを書く時に単純な切り貼りが出来ず、配慮が必要となります。 まとめると 方法1 利点:共通変数は一番上を見ればわかる 欠点:sub同士で独立でない。再利用時に配慮が必要 方法2 利点:sub同士で独立。再利用時の切り貼りが容易。 欠点:subの数が増えると変数の管理が必要 普通はどちらを使うものですか?

  • VBとVBAのコードの違い プロシージャー呼び出し方法

    何度かお世話になっておりおります 毎回アドバイスありがとうございます 早速なのですがまた躓いてしまいアドバイスお願いします。 ~質問内容~ 標準モジュールからフォームのプロシージャーを呼び出す エラー内容 オブジェクトが必要である       オブジェクト修飾が必要など 出てきました オブジェクト修飾 というのが もう理解出来ず 本当にスタートの時点ではありますが アドバイスお願いします VBのコード 標準モジュール Sub Main() MainForm.Initialize End Sub フォームのコード Public Sub initialize()  ”コード内容”  End Sub ↑上記で記入しました フォームで宣言されているInitialize を呼び出したいのですが VBでは このままで出来るはずなのですが VBAでは オブジェクト修飾が必要です CALL をつけても エラーのままでした 少し質問がわかりにくくなってしまいましたが 標準モジュールから フォームのプロシージャーを呼び出すには なんと入れれば宜しいでしょうか? アドバイスお願いします

  • VBA モジュールで共通に使う変数の宣言方法

    VBAにてプログラミングを覚えている者です。 現在、いくつかのモジュールがあり、それぞれDimにて宣言している共通の変数があります。 いくつものプロシージャに毎回宣言せず、どこかでひとまとめにしたいと思い、色々と調べています。 例えば、 Dim pic1 As Picture Dim cell1 As String Dim pass1 As String Dim pic2 As Picture などです。 Dimのほかに、Publicの宣言などがありますが、いま一つ使い方がピンときません。 共通宣言する変数をひとつのモジュールとして登録し、活用できると、いざ変更となったときに その内容だけ置き換えればいいと思うのですが、みなさんはどのように宣言をしていますか? (例えば、Stringなどは各モジュールで変更するのが大変だと思うのですが・・・) ヒントを教えていただければと思います。よろしくお願いします。

  • [VBA] 型宣言の順番について

    こちらの識者の方々にはいつもお世話になっています。 VBAの質問です。 環境は下記になります。 OS=windows7 pro 64bit Office=Excel2010(14.0.7128.5000) 私はVBAのレベルとしては初級で、具体的には配列内で処理をしたり、連想配列のコードが書けるぐらいで、クラスモジュールはわかりません、ぐらいの感じです。(分かりづらくてすみません) 私はいつも宣言の文を書くときに、プロシージャの一番上に全て書き、順番もだいたい大きい(と感じる)型のものから書いています。 例: Sub test()  Dim FSO As Object  Dim oDic As Object  Dim wbSour As Workbook, wbDest As Workbook  Dim wsSour As Worksheet, wsDest As Worksheet  Dim r as Range  Dim tmp As Variant  Dim destDir As String  Dim i As Long, j As Long, k As Long  ~  ~  ~  ~  ~  ~ End Sub みたいな感じです。 いつもこれでいいのかなぁ?と思いながら宣言文を書いてるんですが、ネットに転がっている他のソースコードを見ると、変数を使う直前で都度宣言しているものもあったりするので、正しい(とされている)宣言のしかたってあるのでしょうか? そんなの人と場合によるって感じだと思うのですが、こういう理由で自分はこう宣言している、とか、これからのことを考えるとこうしたほうがいい、みたいなのがあれば教えてください。 質問に不備不足等ございましたらご指摘ください。 ご面倒お掛けしますがよろしくお願いします。