Excel VBA質問箱 IV

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

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


9104 / 13644 ツリー ←次へ | 前へ→

【29163】シートに記録されているマクロをブックに記録されているマクロとするには? Orangbagsar 05/9/27(火) 0:10 質問[未読]
【29164】Re:シートに記録されているマクロをブック... ichinose 05/9/27(火) 7:44 発言[未読]
【29326】シートに記録されているマクロをブックに記... Orangbagsar 05/10/1(土) 0:22 お礼[未読]

【29163】シートに記録されているマクロをブックに...
質問  Orangbagsar  - 05/9/27(火) 0:10 -

引用なし
パスワード
   シート1の2行目から11行目までのD列にチェックボックスを1〜10を配置し、各行のABC列にはテキストが入力されています。各チェックボックスをTrueにすると、その行のA〜C列の文字が赤字・取り消し線で表現されるよう、マクロが設定されています。このマクロはシート1のマクロとして記録されています。
シート1での作業が完了したら、シート1をコピーしてシート2とし、シート2に対して作業を行います。以降、シート3、4と作業を繰り返します。この時、シート1に記録されているマクロはシート2にもコピーされますが、シートが増えるに従って、ファイルがものすごく重たくなってしまいます。
マクロをブックに記録すればこの問題は解決すると推測していますが、シート1の作業が完了し、シート2が作成された後は、チェックボックスに設定されているマクロはシート1には働かないようにする必要があります。以降、シートが増えるに従って、マクロは直近の(ACTIVEな)シートのみに作用し、古いシートには作用しないようにするにはどのようにしたらよろしいでしょうか。

因みに、シートに記録されているチェックボックスのマクロは以下のとおりです。
(チェックボックス1の例。チェックボックス2以降は行が一つずつ繰り下がる)

Private Sub CheckBox1_Click()
  If CheckBox1 = True Then
    Range("A2:C2").Select
      With Selection.Font
        .FontStyle = "標準"
        .Size = 12
        .Strikethrough = True
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 3
      End With
  Else
    Range("A2:C2").Select
      With Selection.Font
        .FontStyle = "標準"
        .Size = 12
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 1
      End With
  End If
End Sub

解決方法をご教示いただけると幸甚です。

【29164】Re:シートに記録されているマクロをブッ...
発言  ichinose  - 05/9/27(火) 7:44 -

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

安全性に欠けてしまいます。
こういうことを行うのに「コントロールツールボックス」のコントロールは
あまり向いていないのかもしれません。

よって、「フォーム」のコントロールの使用ということになるのでしょうが・・・。

冒頭の「コントロールが付いたシートのコピーそのものが問題」
だとすれば、どちらにしても別の話になってしまいますから、
まず、これの検討を行って下さい。

結果、フォームのコントロールを使用するならば、
方法はありそうですよ!!

【29326】シートに記録されているマクロをブックに...
お礼  Orangbagsar  - 05/10/1(土) 0:22 -

引用なし
パスワード
   ▼ichinose さん:
この数日間なぜかインターネットに接続できずレスが遅くなり失礼しました。
早速のアドバイスありがとうございます。「コントロールが付いたシートのコピーそのものが問題」ということには全く考えも至っておりませんでした。
この週末に検討・解決策Tryをしてみます。
>▼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
>
>安全性に欠けてしまいます。
>こういうことを行うのに「コントロールツールボックス」のコントロールは
>あまり向いていないのかもしれません。
>
>よって、「フォーム」のコントロールの使用ということになるのでしょうが・・・。
>
>冒頭の「コントロールが付いたシートのコピーそのものが問題」
>だとすれば、どちらにしても別の話になってしまいますから、
>まず、これの検討を行って下さい。
>
>結果、フォームのコントロールを使用するならば、
>方法はありそうですよ!!

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