- ベストアンサー
VBAのアドインについて
現在、エクセル2000を使用しています。 セルの”*”という文字をダブルクリックすると、ユーザーフォームが開き、テキストボックス内に文字を入力したらOK(コマンドボタン)を押すとセルにその文字が入ります。 コマンドボタンを実行すると、Call ○○○で標準モジュールのマクロを呼び出すようになっています。 このCallが10行くらい組んであり、それぞれの標準モジュールを呼び出しているのですが、ファイルが重たくなってしまいました。 この標準モジュールをアドイン化して使用できるのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.3訂正です。 アドインのxlaの標準モジュールには public sub hoge(ByRef target as range) If Intersect(target, Range("A4:A5000")).Value = "*" Then _ UserForm1.Show end if end sub として、 アドインを組み込むXLSのシートのSheet Objectsの中に Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) dim return as Boolean return = Application.Run ("hoge",Target) End Sub とすればよい。
その他の回答 (3)
- yyr446
- ベストアンサー率65% (870/1330)
VBのコードが、標準モジュールの方ではなく、Sheet Objectsの中に あったのですね。 アドインのxlaの標準モジュールには public sub hoge(ByRef target as range) If Intersect(Target, Range("A4:A5000")).Value = "*" Then _ UserForm1.Show end if end sub として、 アドインを組み込むXLSのシートのSheet Objectsの中に Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) dim return as Boolean Application.Run ("hoge",Target) End Sub とすればよい。
- yyr446
- ベストアンサー率65% (870/1330)
アドイン化といっても、特に特別な処理はいらないはずです。 使いたいモジュールやフォームを定義したエクセルファイルを保存するとき形式を.xlaにするだけのはずです。 ここにも書いてありました↓ http://www.atmarkit.co.jp/fwin2k/win2ktips/471funcadin/funcadin.html
補足
回答ありがとうございます。 上記のURL大変参考になりました。 しかし、元のエクセルファイルのユーザーフォームを削除し、アドイン化した方のユーザーフォームを使いたいのですが、例えば元のエクセルファイルで Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("A4:A5000")).Value = "*" Then UserForm1.Show End Sub というマクロで*をダブルクリックするとUserForm1.Showの所でエラーメッセージでオブジェクトが必要です。というエラーが発生するのですが、どうしたら良いでしょうか。
- yyr446
- ベストアンサー率65% (870/1330)
アドイン化しても、重さ(ファイルサイズ?)はさして変わらないと思います。最も使う時だけアドイン有効にして、セーブする前に無効にすれば 小さくなるでしょうが
補足
回答ありがとうございます。 もちろんそうするつもりでアドイン化をしたいと思っています。 あと、ユーザーフォームもアドイン化して使えるのでしょうか?
お礼
ありがとうございます!! うまくできました。何度も回答していただきありがとうございました。