|
皆さん、こんばんは。
>異なるモジュールから共通に利用したいので、
>標準モジュールに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
等としてはどうでしょうか?
マクロの実行メニューからも見えません。
オブジェクト名の記述分だけ面倒ですが、うまく利用すれば
わかりやすいコード記述にもなると思いますが・・・。
|
|