[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/01/27(Fri) 13:00
投稿者名:kishitatsu
URL :
タイトル:
VBよりExcelマクロの削除は可能でしょうか?
お世話になります。

社内ホームページへExcelで作成した資料を格納する前にマクロを削除してから
upしてます。
これとは別にセーブ用にマクロ入りのままでも保存してます。

これをVB6.0を利用してExcelマクロを削除することは可能でしょうか?

ご教授お願い致します。

投稿時間:2006/01/27(Fri) 13:39
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: VBよりExcelマクロの削除は可能でしょうか?
> これをVB6.0を利用してExcelマクロを削除することは可能でしょうか?
可能です。 下記に掲載されています。

415ブックに含まれているマクロをすべて削除する
hhttp://www.cbook24.com/bm_detail.asp?sku=99925364

又、下記でVBからExcelのマクロを作成する方法を解説されているので
そのコードを応用して作成するのではなく、.Remove してやれば削除できるかと
思います。
hhttp://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?mode=allread&no=3815

ちょっと試して見ました。ご使用される場合は十分テスト願います。
Excel ファイルの読み込みは別途、マクロの削除部分のコードのみ
Excel の起動・終了は別途追加して下さい。
'-----------------------------------------------------------------
Dim i As Long
With xlBook.VBProject
    For i = .VBComponents.Count To 1 Step -1
        If .VBComponents(i).Type = vbext_ct_StdModule Then
            '標準モジュール以外はマクロの警告が表示されないので
            'UserForm 及び クラスモジュール はそのままで
            'If .VBComponents(i).Type <= 3 Then  'なら上記も削除
            .VBComponents.Remove .VBComponents(i)
        ElseIf .VBComponents(i).Type = vbext_ct_Document Then
            .VBComponents(i).CodeModule.DeleteLines 1, _
                    .VBComponents(i).CodeModule.CountOfLines
        End If
    Next i
End With
'------------------------------------------------------------------------

投稿時間:2006/01/27(Fri) 15:36
投稿者名:Blue
Eメール:
URL :
タイトル:
Re: VBよりExcelマクロの削除は可能でしょうか?
別に削除しなくても、提出用にシートを別ブックにコピーすればいいような気もしますが。

投稿時間:2006/01/27(Fri) 16:21
投稿者名:YK
Eメール:
URL :
タイトル:
Re: VBよりExcelマクロの削除は可能でしょうか?
こんにちは。

> これをVB6.0を利用してExcelマクロを削除することは可能でしょうか?
こんな風でどうでしょう。

wkbはワークブックのインスタンス

dim obj as object
dim sht as worksheet

With wkb.VBProject
'    If .Protection Then GoTo クローズ処理
    ' モジュールの削除
    For Each obj In .VBComponents
        If obj.Type < 4 Then
'                Debug.Print obj.Name
            .VBComponents.Remove obj
        End If
    Next
    ' シートモジュールの中身削除
    For Each Sht In wkb.Worksheets
        With .VBComponents.Item(Sht.Name).CodeModule
            .DeleteLines 1, .CountOfLines
        End With
    Next
End With

投稿時間:2006/01/27(Fri) 18:01
投稿者名:kishitatsu
URL :
タイトル:
ご回答ありがとうございます
花ちゃん さん、YKさん、さっそくのご回答、ありがとうございます。

マクロは標準モジュールだけでなく、フォームもあります。
説明不足でした、すみません。

ご提示頂いた、サンプルコードにてフォームも削除可能でしょうか?

また、使用している環境にVB6.0開発環境がないため(RUNTIMEのみ入れてます)
別環境にて作成し、テストしますので、不明点ありました場合は
よろしくお願い致します。

投稿時間:2006/01/27(Fri) 18:14
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: ご回答ありがとうございます
> ご提示頂いた、サンプルコードにてフォームも削除可能でしょうか?

試してから質問するようにして下さい。(そうすれば、聞かなくても解ります。)

# YK さんのサンプルを使用された方がいいでしょう。

投稿時間:2006/01/29(Sun) 14:29
投稿者名:kishitatsu
URL :
タイトル:
Re^2: ご回答ありがとうございます
> > ご提示頂いた、サンプルコードにてフォームも削除可能でしょうか?
>
> 試してから質問するようにして下さい。(そうすれば、聞かなくても解ります。)

そのように致します。申し訳ございません。

>
> # YK さんのサンプルを使用された方がいいでしょう。

了解しました。

ありがとうございます。

投稿時間:2006/01/28(Sat) 07:41
投稿者名:YK
Eメール:
URL :
タイトル:
Re: ご回答ありがとうございます
こんにちは。

> ご提示頂いた、サンプルコードにてフォームも削除可能でしょうか?

エクセルのヘルプを見てソースを解読してみてください。
そうすれば、理解が出来ると思います。
サンプルを作るにもそのようにしているのですから。
それと花ちゃんさんが仰っているように実行するのが早いですね。

投稿時間:2006/01/30(Mon) 15:50
投稿者名:kishitatsu
URL :
タイトル:
まずはExcelマクロにて削除できました
> こんにちは。
>  
> > ご提示頂いた、サンプルコードにてフォームも削除可能でしょうか?
>
> エクセルのヘルプを見てソースを解読してみてください。
> そうすれば、理解が出来ると思います。
> サンプルを作るにもそのようにしているのですから。
> それと花ちゃんさんが仰っているように実行するのが早いですね。

以下のExcelマクロにて削除できました。
手段はVB6,Excelマクロ、何れでもよかったものですから
これで解決とさせて頂きます。

みなさんいろいろとご教授、ありがとうございました。


Sub test()
'*************
'* マクロ削除
'*************
'* 2006.01.29 テストok

Dim x As Integer
Dim I As Integer

   Workbooks.Open "C:\A.xls"
   x = ActiveWorkbook.VBProject.VBComponents.Count
   For I = x To 1 Step -1
      If ActiveWorkbook.VBProject.VBComponents(I).Type < 4 Then
         ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents(I)
      End If
   Next I
   MsgBox "マクロを削除しました。"
   ActiveWorkbook.Save                                      '自身を上書き
   ActiveWorkbook.SaveAs "d:\temp\" & ActiveWorkbook.Name   'コピー
    
End Sub