Page 239 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼シートコピーの後にイベントマクロを消したい kawata 02/10/21(月) 12:47 ┗Re:シートコピーの後にイベントマクロを消したい ichinose 02/10/21(月) 13:59 ┣Re:シートコピーの後にイベントマクロを消... てと 02/10/21(月) 15:38 ┃ ┣Re:シートコピーの後にイベントマクロを消... kawata 02/10/21(月) 16:04 ┃ ┗Re:シートコピーの後にイベントマクロを消... ichinose 02/10/21(月) 18:46 ┃ ┗Re:シートコピーの後にイベントマクロを消... てと 02/10/21(月) 19:17 ┃ ┗Re:シートコピーの後にイベントマクロを消... ichinose 02/10/21(月) 20:54 ┃ ┗Re:シートコピーの後にイベントマクロを消... てと 02/10/22(火) 12:03 ┗Re:シートコピーの後にイベントマクロを消したい kawata 02/10/21(月) 15:53 ─────────────────────────────────────── ■題名 : シートコピーの後にイベントマクロを消したい ■名前 : kawata ■日付 : 02/10/21(月) 12:47 -------------------------------------------------------------------------
kawataです、よろしくお願いします。 (Windows2000/Excel2000) Sub s_copy() Application.ScreenUpdating = False Sheets("main").Copy new_book = ActiveWorkbook.Name With Workbooks(new_book) .Sheets("main").Name = "掲載用" With .Sheets("掲載用") For Each zu In .Shapes zu.Delete Next e_row = .Range("a65536").End(xlUp).Row .Rows((e_row + 1) & ":65536").Delete Shift:=xlUp End With End With ThisWorkbook.Activate Sheets("main").Select Range("a1").Select MsgBox ("シートが別ブックで作成されています。" & vbCr & vbCr & "「名前を付けて保存(A)」 を実行して下さい。") End Sub というようなコードを書いたのですが、このコピーしたシートに イベントマクロを書いています。 このマクロを消してしまいたいのですが・・・・・。 自動記録であれこれやってみましたが、わかりませんでした。 よろしくお願い致します。 |
▼kawata さん: こんにちは。 >kawataです、よろしくお願いします。 >(Windows2000/Excel2000) > >Sub s_copy() > Application.ScreenUpdating = False > Sheets("main").Copy > new_book = ActiveWorkbook.Name > With Workbooks(new_book) > .Sheets("main").Name = "掲載用" > With .Sheets("掲載用") > For Each zu In .Shapes > zu.Delete > Next > e_row = .Range("a65536").End(xlUp).Row > .Rows((e_row + 1) & ":65536").Delete Shift:=xlUp > End With > End With > ThisWorkbook.Activate > Sheets("main").Select > Range("a1").Select > MsgBox ("シートが別ブックで作成されています。" & vbCr & vbCr & "「名前を付けて保存(A)」 を実行して下さい。") >End Sub > >というようなコードを書いたのですが、このコピーしたシートに >イベントマクロを書いています。 >このマクロを消してしまいたいのですが・・・・・。 >自動記録であれこれやってみましたが、わかりませんでした。 >よろしくお願い致します。 私が思いつく方法は、二つなんですが、 ひとつは、今、記述してあるイベントコードをクラスモジュールに移してしまう方法。 こうすると、シートモジュールに元々コードが入っていないのでコードを削除する必要がないですよね。 もうひとつは、Vbprojectを使用する方法です。取りあえずこちらだけですが、 コード削除の部分だけ抜粋しました。 '============================================================== Sub s_copy() Dim new_book As Workbook Dim vbc As Object Application.ScreenUpdating = False Sheets("main").Copy Set new_book = ActiveWorkbook For Each vbc In new_book.VBProject.VBComponents If vbc.Type = 100 And vbc.properties("name") = "main" Then With vbc.CodeModule .DeleteLines 1, .CountOfLines End With End If Next Application.ScreenUpdating = True End Sub |
横から失礼いたします。 私もKawataさんと同じようにWorkSheetのコードを 消したいと思っていました。 タイミング良くichinoseさんの回答を見つけたので 早速試してみましたが、以下のエラーが発生してしまいました。 実行時エラー "1004" プログラミングによるVisual Basic プロジェクトへのアクセスは信頼性に欠けます 環境はWindowsXP/OfficeXP です。 どのようにしたら実行して良い環境に出来るでしょうか。 |
てと さん、はじめまして Sub s_copy() Dim new_book As Workbook Dim vbc As Object, zu As Object Application.ScreenUpdating = False Sheets("main").Copy Set new_book = ActiveWorkbook For Each vbc In new_book.VBProject.VBComponents If vbc.Type = 100 And vbc.properties("name") = "main" Then With vbc.CodeModule .DeleteLines 1, .CountOfLines End With End If Next With new_book.Sheets("main") For Each zu In .Shapes zu.Delete Next .Name = "掲載用" End With Set new_book = Nothing Application.ScreenUpdating = true End Sub まる写しだから、私の貧相なコードを掲載する必要はないのですが(^^;、 こちら、Win2000/Excel2000では、ばっちり動いております。 なぜでしょうね?、同じように今後のために、興味があります。 よろしくお願いします。 |
▼てと さん: こんばんは。 >横から失礼いたします。 > >私もKawataさんと同じようにWorkSheetのコードを >消したいと思っていました。 >タイミング良くichinoseさんの回答を見つけたので >早速試してみましたが、以下のエラーが発生してしまいました。 > >実行時エラー "1004" >プログラミングによるVisual Basic プロジェクトへのアクセスは信頼性に欠けます > >環境はWindowsXP/OfficeXP です。 >どのようにしたら実行して良い環境に出来るでしょうか。 私もExcel2000で再度試しましたが、OKでした。 XPは、インストールしてないです、まだ。よって、はっきりしたことはわかりませんが、気になるのは「よろずやさん」の[#490]のお言葉です。 試しにですが、 「参照設定」で、「Microsoft Visual Basic For Applications Extensibility xx」をチェックして以下のコード実行してみて下さい。これで駄目なら、私には、わかりかねます。 '================================================== Sub s_copy() Dim new_book As Workbook Dim vbc As VBComponent Application.ScreenUpdating = False Sheets("main").Copy Set new_book = ActiveWorkbook For Each vbc In new_book.VBProject.VBComponents If vbc.Type = 100 And vbc.properties("name") = "main" Then With vbc.CodeModule .DeleteLines 1, .CountOfLines End With End If Next Application.ScreenUpdating = True End Sub |
早速のレスありがとうございます。 しかし For Each vbc In new_book.VBProject.VBComponents の所で同じエラーが発生してしまいました。 よろずやさんのお言葉どおり、プログラムを書き換える などと云うことはしてはいけない行為なんでしょうね。 「見えないプログラム」にして配布する手法の方が 安全ということでしょうか。 ありがとうございました。 |
▼てと さん: こんばんは。 >For Each vbc In new_book.VBProject.VBComponents >の所で同じエラーが発生してしまいました。 > >よろずやさんのお言葉どおり、プログラムを書き換える >などと云うことはしてはいけない行為なんでしょうね。 >「見えないプログラム」にして配布する手法の方が >安全ということでしょうか。 >ありがとうございました。 繰り返しになりますが、XPをインストールしていないので、詳しいオペレーティングはわかりませんが、この辺が参考になるかも・・・。どっかにチェックが必要らしいです。 Office XP に関する注意事項 Office XP アプリケーションには、プログラムによる VBA オブジェクト モデルへのアクセスを可能にするセキュリティ オプションがあります。この設定がオフ (デフォルト) の場合、コードの実行時にエラー メッセージが表示されます。 この設定およびエラーの修正方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。 関連サイト: http://support.microsoft.com/default.aspx?scid=kb;ja;JP303871#3 http://support.microsoft.com/default.aspx?scid=kb;en-us;Q282830 ↑英語です。 |
ご指導いただいた技術情報(英語の方)RESOLUTIONのところですね。 久しぶりに英語に接しました。 日本語で簡潔に書くと以下の手順になります。 OFFICEアプリケーションのメニューから 1.「ツール」−「マクロ」−「セキュリティ」でセキュリティ・ダイアログボックスを表示する。 2.「信頼のおける発行元」タブの中の、「Visual Basic プロジェクト へのアクセスを信頼する」をチェックします。 これでOKでした。 ichinoseさん、どうもありがとうございました。 これからもいろいろ教えていただけたら幸いです。 kawataさん、横から割り込んでしまいましたが、勉強になりました。 ありがとうございました。 |
kawataです、よろしくお願いします。 ichinose さん、ありがとうございました。 バッチリです、あつかましくもコードそのまま使わせていただきました。 大体、解析しようにも意味がわからない(^^;。 Shapesを削除する前に組み込んで、その後でShapesを削除すように しました。 また、For EACH 〜 の使い方、オブジェクトの使い方も参考にさせて いただきました、スッキリ感がまるで違うような・・・・。 得るもの多くて、感謝です。 ありがとうございました、また、よろしくお願いいたします。 |