|
▼B-BOSS さん:
こんばんは。
>実はうまくいって喜んでいたのですが、
>マクロを実行した後、そのワークブックを名前を付けて保存しました。
>その後、再度開いた所、WORKSHEET_Change イベントのイベントは
>実行されませんでした。
>WORKSHEET_Change イベントも一緒に保存はできるのでしょうか?
アドインのクラスモジュールを使用していますので、保存したブックにはコードは
書かれていません・・・。
コードを付けて保存したいと言うことなら、全く別のコードになってしまいます。
Vbprojectを操作しますが、私もあまり詳しくないし、プログラム編集用にしか使ってないのですが(この場合は、仕方ないのかなあ?)。
まず、クラスモジュールは要りません・・・、削除して下さい。
'=====================================================
Private Sub アドインプロシジャー()
dim in_code(1 to 5) as string
' 既に作成されているコード
' ・
' ・
' ・
in_code(1) = " dim bn as string"
in_code(2) = " dim shnm as string"
in_code(3) = " bn=target.parent.parent.name"
in_code(4) = " shnm=target.parent.name"
in_code(5) = " msgbox ""ブック: "" & bn & "" シート: "" & shnm & "" セル: "" & target.address"
'この配列にコードを入れます。例では、直接コード文字列を代入していますが、
'実際はテキストファイルから読み込むようにしたらどうでしょうか?
'コード訂正が楽なような気がしますが・・・。
Call Put_SheetChange_Event(ActiveWorkbook, in_code())
' ↑イベントを発生させたいブックを指定する
End Sub
'===================================================================
Sub Put_SheetChange_Event(Wbook As Workbook, Ev_Code() As String)
'機能 : 指定されたブックのThisworkbookモジュールに
' SheetChangeイベントコードを指定された配列の内容で作成する
'input : Wbook - コードを作成するブック
' Ev_Code() - 作成するVBAコード
Dim cmp As Object
Dim ar_stline As Long
Dim ar_cd_cnt As Long
Dim new_stline As Long
With Wbook.VBProject
For Each cmp In .vbcomponents
If cmp.Name = "ThisWorkbook" And cmp.Type = 100 Then
With cmp.codemodule
On Error Resume Next
ar_stline = .ProcStartLine("workbook_sheetchange", 0)
If Err.Number = 0 Then
ar_cd_cnt = .ProcCountLines("workbook_sheetchange", 0)
.DeleteLines ar_stline, ar_cd_cnt
End If
On Error GoTo 0
new_stline = .CountOfLines + 1
.InsertLines new_stline, "Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)"
new_stline = new_stline + 1
For idx = new_stline To new_stline + UBound(Ev_Code()) - LBound(Ev_Code())
.InsertLines idx, Ev_Code(idx - new_stline + LBound(Ev_Code()))
Next idx
.InsertLines idx, "End Sub"
End With
End If
Next
End With
End Sub
尚、Excel2002の場合、標準の設定では、エラーが出るそうです。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=1261;id=excel
そうだとしたら、↑を参考に設定して下さい。
|
|