• 締切済み

WithEventsについて

サンプルプログラムを参考にしてプロジェクトにくっついているクラスモジュールをすべてパスをくっつけました。が、そのクラスモジュールの変数を宣言しようとするとできないです。正確にはコントロールスペースでツールチップみたい一覧が表示されるところに取得してきたクラスモジュールが存在しなく、ベタで書いてエラーにはならないのですが、イベントが1つもないということでした。 Dim WithEvents sample as clsCti なお、サンプルプログラムではイベントを参照できます。プロジェクトのパスにつなげるだけじゃ見れないのでしょうか? 非常にわかりにくい説明になってしまいましたm(_ _)mが、 どなたかアドバイスお願いします。

みんなの回答

回答No.1

クラスモジュールの「clsCti」を開いて見て下さい。 「Event」で始まる行はありますか? これが無いクラスは「WithEvents」で宣言しようとするとおっしゃる状態になりますね。 イベントが無いのです。 でもサンプルプログラムではイベントを参照できるってことはその線は無いのかなぁ・・。

toshi_200578
質問者

補足

「Public Event Established() 」などがずらずらと書いてあります。 書いてるEventを使用しているformなどがない場合は参照できないのでしょうか?

関連するQ&A

  • VB2005でのWithEventsについて

    お世話になります、当方現在データベースアプリをVB2005proで作成しているのですが、VB6→VB2005への更新です。 VB6の時は複数プログラムで作成したため、あえて、アップグレードウィザードを使用せずに作成しております(デザインも変更したい為) それで、今回質問させて頂きたいのは、複数のフォームに貼り付けたボタンイベントを同じ処理で分岐できないかどうか教えて頂きたいのです。 具体的にはフォームにボタンを5個ほど用意して。フォームのクリックイベントでF1キーが押されたらButton1_Clickイベント、F2キーが押されたらButton2_Clickイベント などのショートカット機能を実装したいのです。 VB6の場合は共有クラスにWithEventsでForm型を宣言して、Load時にロード元のフォームをWithEventsのフォーム型にセットすればイベントを認識してくれたと思うのですが。同じことを.NETで行っても、イベントをハンドルしてくれませんでした。 .NETでは各フォームイベント毎に記述するしかないのでしょうか? 初心者の質問で申し訳ありませんが、何卒よろしくお願いいたします。

  • 標準モジュールについてなのですが

    すみません。教えてください(/_;)VB6にて理解できないことがあります。いくつものパスを標準モジュールに記述できると知り、早速見やすいプログラムにしようと思い、標準モジュールを追加しました。サンプルなどを調べ、Function Apath() as stringを理解しました。フォームの方にはpath = Apathって書いておけばいいと書かれていたのでその通りにしました。しかし、見に行ってはくれません(>_<)で、いろいろやってみてあることに気づきました。変数を宣言してたら、ダメでしてなかったらちゃんと見に行ってくれます。 Dim path as string,Dim Apath as string.Apathを消すと働いてくれます。宣言が間違っているのでしょうか?標準モジュールをこのような感じで利用するには何か重大なルールがあるのでしょうか?すいません、初心者すぎる質問で<(_ _)>しかし、聞かぬは一生の恥と思い質問しました(>_<)よろしくお願いいたします<(_ _)>

  • WithEventsの処理について

    複数あるテキストボックス(text1、text2…)にキーボードから入力したらメッセージを出すという独自のイベント処理を 共通の関数を使用しようとした時に以下の処理が挙げられるですがこの処理について <クラスモジュール(MsgEvent)> Public WithEvents MsgTextBox As TextBox   Private Sub MsgTextBox_KeyPress(KeyAscii As Integer) MsgBox MsgTextBox.name ……(1) End Sub <フォームモジュール> Dim Hairetu(1) As New MsgEvent Private Sub Form_Load() Set Hairetu(0).MsgTextBox = Text1 ……(2) Set Hairetu(1).MsgTextBox = Text2 End Sub 上記の(1)についてnameプロパティの意味がわかりません。 調べたら値の取得とあるのですがその値とは(2)で言えば「=text1」にあたるということですか? それと(2)のSetを定義しないといけない理由がよくわからないのでお教えください。 よろしくお願いします。

  • WordでVBAの変数について

    ThisDocumentにて宣言した変数内の数値をModule1の処理内で使用したいのですが ThisDocumentにてPublicで宣言した変数に数値を入れてModule1にてMsgboxを使用して確認した所参照できていませんでした Module1にてPublicで宣言した変数内の数値をModule2で参照することはできましたがThisDocumentだとうまくいきません Publicで宣言すれば別モジュールから参照できると認識しているのですが間違いでしょうか? プログラム等やったことがないので根本的な勘違いをしているかもしれませんがどなたかご教授ください。

  • VB.Netの大域変数

    VB6ではイベント制御のため、共通モジュールに大域変数を Public gFlag As Integer のように記述していました。 最近になってVB.Netをはじめましたが、この大域変数がうまく動いてくれません。 とりあえずVB6の共通モジュールはクラスを追加して行うとあり、 クラスを追加して、そこで上記のようにPublicで宣言しました。 ところがFormのコードで使うと宣言されていませんと出ます。 そこで色々と調べてPublicは外部に公開されるメンバ??らしい ということは分かったのですが、クラス自体さっぱりです。 とりあえずクラスのお勉強は後回しにするとして、 大域変数はどのようにすれば使えるようになるのか教えて下さい。

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

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

  • VBの宣言について

    ACCESS VBAをはじめて使っています。FORMのコードを読んでいるのですが、宣言されていない変数を見つけました。それでプロジェクト内で宣言されているかどうか探したら、標準モジュールの中で宣言されていました。VBは同一プロジェクトの中でpublicで宣言していればimportとかincludeとか何か取り込む宣言をしなくても自動で変数を認識してくれるのでしょうか?

  • VBIDEで未使用の変数の抽出

    VBIDEでプログラム(VBA)をどんどん書き込んで行き、ある程度の大きさになったので、モジュールを分けたり、ブック(エクセルの場合)した場合にDIMで宣言した変数で、ゴミが生じてしまいました。 無計画に、進めてしまった結果であることは重々承知していますが、どなたか、宣言のみして未使用となっている変数、定数を抽出するユーティリティーをご存じなかたいらっしゃいませんか? 宜しくお願いいたします。

  • vbscriptの変数宣言

    教えてください。 プログラム初心者です。 vbscriptで変数をDimで宣言しているものと。Dim無しの変数宣言していないく、 いきなり代入して使っているものもあります。宣言して使うものと使わないものの違いは何でしょうか? よろしくお願いします。

  • VBAのクラスのインスタンス化のタイミングについて

    こんにちはvbaのクラスのインスタンス化について質問があります。 私は普段使えないイベントを使用するときにクラスモジュールに WithEventsを使ってイベントを作成し それをプロシージャからインスタンス化して 作成したイベントを有効にするという手法をよく使います。 Excelのように最初からワークブックにイベントがある場合は、 ワークブックを開いたと同時にWorkbook_Openプロシージャから クラスをインスタンス化して作成したイベントを有効にするということが可能なのですが、 CATIAやInventorなど、一部のアプリケーションでは、 最初から使えるイベントが見つからず、 Subプロシージャでインスタンス化する方法しかみつかりません。 しかし、Subプロシージャを実行させるためには、 ボタンなどユーザー側に何らかのアクションとってもらうしかなく、 自動化するために作成したイベントなのに、そのイベントを有効にするために ユーザーにボタンを押してもらうという矛盾した構成になってしまいます。 クラスをインスタンス化する方法はSubプロシージャに記述するしかないのでしょうか? 自分がよく使っているコードを下に記述します。 下の例は、Excelで新しくブックを開いたときにメッセージを出すプログラムです。 アプリケーションレベルのイベントをクラスモジュールで作成しています。 これを有効にするためには標準モジュール内の Event_ONプロシージャを実行しなければなりません。 モジュールを実行する前まではいくら新しいブックを開いてもメッセージは出ません これをどのうようにしたらいいかご教授ください。 Excelの例 Classモジュール「Class1」に記述 -------------------------------------------------------------------- Private WithEvents APP As Application Private Sub APP_NewWorkbook(ByVal Wb As Workbook) MsgBox "新しいブックが開かれました" End Sub Private Sub Class_Initialize() Set APP = Application End Sub -------------------------------------------------------------------- 標準モジュール「Module1」に記述 -------------------------------------------------------------------- Dim CLS As class1 Public Sub Event_ON() Set CLS = New class1 End Sub --------------------------------------------------------------------