• ベストアンサー

VBAのアドインについて

現在、エクセル2000を使用しています。  セルの”*”という文字をダブルクリックすると、ユーザーフォームが開き、テキストボックス内に文字を入力したらOK(コマンドボタン)を押すとセルにその文字が入ります。  コマンドボタンを実行すると、Call ○○○で標準モジュールのマクロを呼び出すようになっています。  このCallが10行くらい組んであり、それぞれの標準モジュールを呼び出しているのですが、ファイルが重たくなってしまいました。  この標準モジュールをアドイン化して使用できるのでしょうか?

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

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.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 とすればよい。

yasu7r
質問者

お礼

ありがとうございます!! うまくできました。何度も回答していただきありがとうございました。

その他の回答 (3)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

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)
回答No.2

アドイン化といっても、特に特別な処理はいらないはずです。 使いたいモジュールやフォームを定義したエクセルファイルを保存するとき形式を.xlaにするだけのはずです。 ここにも書いてありました↓ http://www.atmarkit.co.jp/fwin2k/win2ktips/471funcadin/funcadin.html

yasu7r
質問者

補足

回答ありがとうございます。 上記の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)
回答No.1

アドイン化しても、重さ(ファイルサイズ?)はさして変わらないと思います。最も使う時だけアドイン有効にして、セーブする前に無効にすれば 小さくなるでしょうが

yasu7r
質問者

補足

回答ありがとうございます。 もちろんそうするつもりでアドイン化をしたいと思っています。 あと、ユーザーフォームもアドイン化して使えるのでしょうか?