過去ログ

                                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

というようなコードを書いたのですが、このコピーしたシートに
イベントマクロを書いています。
このマクロを消してしまいたいのですが・・・・・。
自動記録であれこれやってみましたが、わかりませんでした。
よろしくお願い致します。
 ───────────────────────────────────────  ■題名 : Re:シートコピーの後にイベントマクロを消したい  ■名前 : ichinose  ■日付 : 02/10/21(月) 13:59  -------------------------------------------------------------------------
   ▼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
 ───────────────────────────────────────  ■題名 : Re:シートコピーの後にイベントマクロを消...  ■名前 : てと <teto_p@h9.dion.ne.jp>  ■日付 : 02/10/21(月) 15:38  -------------------------------------------------------------------------
   横から失礼いたします。

私もKawataさんと同じようにWorkSheetのコードを
消したいと思っていました。
タイミング良くichinoseさんの回答を見つけたので
早速試してみましたが、以下のエラーが発生してしまいました。

実行時エラー "1004"
プログラミングによるVisual Basic プロジェクトへのアクセスは信頼性に欠けます

環境はWindowsXP/OfficeXP です。
どのようにしたら実行して良い環境に出来るでしょうか。
 ───────────────────────────────────────  ■題名 : Re:シートコピーの後にイベントマクロを消...  ■名前 : kawata  ■日付 : 02/10/21(月) 16:04  -------------------------------------------------------------------------
   てと さん、はじめまして
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では、ばっちり動いております。
なぜでしょうね?、同じように今後のために、興味があります。
よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:シートコピーの後にイベントマクロを消...  ■名前 : ichinose  ■日付 : 02/10/21(月) 18:46  -------------------------------------------------------------------------
   ▼てと さん:
こんばんは。
>横から失礼いたします。
>
>私も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
 ───────────────────────────────────────  ■題名 : Re:シートコピーの後にイベントマクロを消...  ■名前 : てと <teto_p@h9.dion.ne.jp>  ■日付 : 02/10/21(月) 19:17  -------------------------------------------------------------------------
   早速のレスありがとうございます。

しかし
For Each vbc In new_book.VBProject.VBComponents
の所で同じエラーが発生してしまいました。

よろずやさんのお言葉どおり、プログラムを書き換える
などと云うことはしてはいけない行為なんでしょうね。
「見えないプログラム」にして配布する手法の方が
安全ということでしょうか。
ありがとうございました。
 ───────────────────────────────────────  ■題名 : Re:シートコピーの後にイベントマクロを消...  ■名前 : ichinose  ■日付 : 02/10/21(月) 20:54  -------------------------------------------------------------------------
   ▼てと さん:
こんばんは。
>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
↑英語です。
 ───────────────────────────────────────  ■題名 : Re:シートコピーの後にイベントマクロを消...  ■名前 : てと <teto_p@h9.dion.ne.jp>  ■日付 : 02/10/22(火) 12:03  -------------------------------------------------------------------------
   ご指導いただいた技術情報(英語の方)RESOLUTIONのところですね。
久しぶりに英語に接しました。
日本語で簡潔に書くと以下の手順になります。

OFFICEアプリケーションのメニューから
1.「ツール」−「マクロ」−「セキュリティ」でセキュリティ・ダイアログボックスを表示する。
2.「信頼のおける発行元」タブの中の、「Visual Basic プロジェクト へのアクセスを信頼する」をチェックします。

これでOKでした。

ichinoseさん、どうもありがとうございました。
これからもいろいろ教えていただけたら幸いです。

kawataさん、横から割り込んでしまいましたが、勉強になりました。
ありがとうございました。
 ───────────────────────────────────────  ■題名 : Re:シートコピーの後にイベントマクロを消したい  ■名前 : kawata  ■日付 : 02/10/21(月) 15:53  -------------------------------------------------------------------------
   kawataです、よろしくお願いします。

ichinose さん、ありがとうございました。
バッチリです、あつかましくもコードそのまま使わせていただきました。

大体、解析しようにも意味がわからない(^^;。
Shapesを削除する前に組み込んで、その後でShapesを削除すように
しました。

また、For EACH 〜 の使い方、オブジェクトの使い方も参考にさせて
いただきました、スッキリ感がまるで違うような・・・・。
得るもの多くて、感謝です。

ありがとうございました、また、よろしくお願いいたします。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 239