Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


75246 / 76732 ←次へ | 前へ→

【5928】Re:訂正
回答  ichinose  - 03/6/9(月) 22:50 -

引用なし
パスワード
   ▼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

そうだとしたら、↑を参考に設定して下さい。

1 hits

【5899】アドインに登録したコードでWORKSHEET_Change イベントを作成したい。 B-BOSS 03/6/7(土) 10:07 質問
【5902】Re:アドインに登録したコードでWORKSHEET_C... ichinose 03/6/7(土) 11:59 回答
【5903】訂正 ichinose 03/6/7(土) 12:07 回答
【5908】Re:訂正 B-BOSS 03/6/7(土) 15:06 質問
【5909】Re:訂正 ichinose 03/6/7(土) 17:52 回答
【5917】Re:訂正 B-BOSS 03/6/9(月) 14:26 お礼
【5922】Re:訂正 B-BOSS 03/6/9(月) 17:26 質問
【5928】Re:訂正 ichinose 03/6/9(月) 22:50 回答
【6310】Re:訂正 B-BOSS 03/6/23(月) 16:47 お礼

75246 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free