プロが教える店舗&オフィスのセキュリティ対策術

おせわになります。
既存のフォームにあるボタンをモジュールからクリック(起動)することは可能でしょうか。
全てをモジュールに書き換えるのは面倒ので、既存のVBAを利用したいと考えています

A 回答 (4件)

アプリケーションが明記されていないので、Accessと判断して書き込みします。



フォーム上のコマンドボタンに関連付けされているイベントプロシージャはクラスモジュールにあります。
標準モジュール内のプロシージャからクラスモジュール内のイベントプロシージャを呼び出して実行することは出来ません。

(蛇足)
共通で使用したい処理は通常、標準モジュール内に記述しておきます。コマンドボタンをクリックしたらそのイベントプロシージャから共通のプロシージャを呼び出して実行するように工夫します。

開発の開始時に、この辺りを考慮してからはじめると楽ですし分かりやすくもなります。
    • good
    • 0
この回答へのお礼

回答ありがとうございました
アプリはアクセスです申し訳ございません

やっぱりそうですか・・・
実は、他人の作ったファイルでして、レポートを36000枚印刷しないといけないのですが、
3つのフォームの値を参照している関係上、既存のフォームに付けられたボタンをクリックしないと印刷できません。手作業だと36000×4クリックです。
がんばって、標準モジュールで作り直します。

お礼日時:2005/06/03 17:31

miwaharuさんへ



> フォーム内のVBAということで、Me!などが多用されており、標準モジュールに簡単に転記できない状況なのです。

MeプロパティをCodeContextObjectプロパティにまとめて置換してしまえばよいように思うのですが・・・


Wendy02さんへ

> それは、クラスモジュールではなくて、クラスのことではないでしょうか?

Access2000以降はクラスモジュールは誤りで、フォームモジュールが正しい表現です。お詫びと訂正をいたします。Access97以前はクラスモジュールと呼んでいたような記憶があります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
・・・やっぱりそれしかないのですね。

お礼日時:2005/06/05 10:34

私の方には反応がなかったのですが、私の文章は分かりにくいのでしょうか?



実際には以下のようなことは、お勧めしないのですが、印刷で、3600 * 4というのは、その前にプリンタ・バッファの問題で、Windowsそのものがハングの危機にさらされることになるので、そこにWait なり、OnTime メソッドを置くなりしなければいけません。

Sub InsteadButton()
Dim i As long
For i = 1 To 3600
 Application.Run Sheet1.Shapes("Button 1").OnAction
Next i
End Sub

内容的には、質問外になるかもしれませんが、

>標準モジュール内のプロシージャからクラスモジュール内のイベントプロシージャを呼び出して実行することは出来ません。

それは、クラスモジュールではなくて、クラスのことではないでしょうか?

以下は、フォームのコマンドボタンではなく、コントロールツール側のコマンドボタンですが、クラスモジュールで作ったイベントのインスタンスを、標準モジュールからコマンドボタンに貼り付けるサンプルです。

元のご質問のクリックイベントを繰り返すこと自体は、その中に入れるわけですから、標準モジュールに、ループを作って、元のコードを貼り付けするか、Call で呼び出したほうが懸命だとは思いますが。

'<標準モジュール>
Public myClass As Class1
Sub test()
  Set myClass = New Class1
  Set myClass.NewBtn = Sheet1.CommandButton1
End Sub
   
'<Classモジュール>
Private WithEvents myNewBtn As CommandButton
Public Property Set NewBtn(ByVal myBtn As CommandButton)
 Set myNewBtn = myBtn
End Property

Private Sub myNewBtn_Click()
  MsgBox "ボタンが押されました!"
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます
今、拝見しました。お礼が送れて申し訳ございません
ところで、EXCELの場合の回答をいただいたわけですが、ACCESSでも利用可ということでしょうか?
じつは、フォーム内のVBAばかり利用していて、標準モジュールから、フォーム内のVBAを利用する方法をよく知りません。

ご指摘のとおり、標準モジュールに書き直すことが最善なのはわかるのですが、他人の作った代物であり、フォーム内のVBAということで、Me!などが多用されており、標準モジュールに簡単に転記できない状況なのです。

お礼日時:2005/06/04 00:06

こんにちは。


>既存のフォームにあるボタンをモジュールからクリック(起動)することは可能でしょうか。

私はExcelの中でということで解釈して、ワークシート上にあるフォームに登録してあるマクロをモジュールから動かすことだとすれば、

Sub InsteadButton()
 Application.Run Sheet1.Shapes("Button 1").OnAction
End Sub

ユーザーフォームなどの場合は、

Call プロシージャ名

ということになるかと思います。

また、既存のボタンを利用するのでしたら、一旦、クラスモジュールから、インスタンスを作って、そしてボタンに取り付けてやればよいと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A