|
▼Orangbagsar さん:
おはようございます。
>シート1の2行目から11行目までのD列にチェックボックスを1〜10を配置し、各行のABC列にはテキストが入力されています。各チェックボックスをTrueにすると、その行のA〜C列の文字が赤字・取り消し線で表現されるよう、マクロが設定されています。このマクロはシート1のマクロとして記録されています。
>シート1での作業が完了したら、シート1をコピーしてシート2とし、シート2に対して作業を行います。以降、シート3、4と作業を繰り返します。この時、シート1に記録されているマクロはシート2にもコピーされますが、シートが増えるに従って、ファイルがものすごく重たくなってしまいます。
>マクロをブックに記録すればこの問題は解決すると推測していますが、
そうでしょうか?
シートコピーによる各シートモジュールのコードの増加が
>重たくなってしまいます
ではなく、沢山のコントロールが付いたシートのコピーそのものが
問題だと思いますが・・・・。
時間が無いので私の方で検証は出来ませんが、この点も再考慮してみて下さい。
因みにコードに関しては、
Thisworkbookのモジュールに
'===========================================
Private WithEvents chkbx As MSForms.CheckBox
'=============================================
Private Sub chkbx_Click()
MsgBox "イベント発生" & chkbx.Value
End Sub
'==================================================================
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Set chkbx = Sh.OLEObjects("checkbox1").Object
' 各シートに貼り付けてあるチェックボックス
' 名前を指定しますが、ここではcheckbox1の例
End Sub
なんてすると出来そうですが、
小僧さんのリンクされた本家サイトの情報を考慮に入れると
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=28670;id=excel
安全性に欠けてしまいます。
こういうことを行うのに「コントロールツールボックス」のコントロールは
あまり向いていないのかもしれません。
よって、「フォーム」のコントロールの使用ということになるのでしょうが・・・。
冒頭の「コントロールが付いたシートのコピーそのものが問題」
だとすれば、どちらにしても別の話になってしまいますから、
まず、これの検討を行って下さい。
結果、フォームのコントロールを使用するならば、
方法はありそうですよ!!
|
|