| 
    
     |  | 皆さん、こんばんは。 >異なるモジュールから共通に利用したいので、
 >標準モジュールにPublic プロシージャを
 >書きました。
 >しかし、そうすると、Excelの[ツール]−[マクロ]
 >メニューからマクロのリストに現れてしまい、
 >実行できてしましまいます。
 >それらの、プロシージャはフォームからしか使用でき
 >ないようにしたいため、Excel上からはマクロとして
 >見えないか実行できないようにしたいのですが、
 >そのような方法はありますでしょうか。
 私は、↑の目的でそうしているのではありませんが、
 汎用的なプロシジャーをクラスモジュールに作成しています。
 例えば、クラスモジュール(クラス名は、BookIO)に以下のコードを入れたとします。
 '================================================
 Function bk_open(flname As String, bk As Workbook) As Long
 On Error Resume Next
 Set bk = Workbooks.Open(flname)
 bk_open = Err.Number
 On Error GoTo 0
 End Function
 '=========================================================
 Sub bk_close(bk As Workbook)
 On Error Resume Next
 bk.Close
 On Error GoTo 0
 End Sub
 
 インスタンスを作成する場所は、マクロの内容によって異なると思いますが、
 標準モジュールに
 
 Public bkio As New BookIO
 
 としておいて、
 
 フォームモジュールでは(コマンドボタンのクリックイベントでの例で)、
 '===============================================
 Private Sub CommandButton1_Click()
 Dim ブック名 As String
 Dim 開いたブック As Workbook
 ブック名 = "d:\ワークシート.xls"
 If bkio.bk_open(ブック名, 開いたブック) = 0 Then
 MsgBox "ok"
 bkio.bk_close 開いたブック
 Else
 MsgBox "nogood"
 End If
 End Sub
 等としてはどうでしょうか?
 マクロの実行メニューからも見えません。
 オブジェクト名の記述分だけ面倒ですが、うまく利用すれば
 わかりやすいコード記述にもなると思いますが・・・。
 
 
 |  |