2017-05-10 7 views
0

を削除するとき、私はいくつかの同僚とワークシートを共有しています。このスプレッドシートは最終的には外部に送信されるため、VBEモジュールをプログラム的にマクロの一部として削除しています。これは、一部のユーザーのために動作しますが、私は実行時エラーを取得実行時エラー「9」モジュールエクセルVBA

Dim vbCom As Object 

    Set vbCom = Application.VBE.ActiveVBProject.VBComponents 

    vbCom.Remove VBComponent:= vbCom.Item("sample_module") 

「9」他の人と:私は、Microsoftのドキュメントから撮影されたこのコードを使用していました。残りのスクリプトは最終的に実行されますが、モジュールは削除されません。

+0

RTE 9「は、この項目は存在しない」という意味 - 'VBComponents'コレクションにsample_module''という名前のモジュールがありません場合は、その後、削除するものはありません。スクリプトの残りの部分が実行された場合 –

+0

はまた、あなたがどこかNext'を再開エラーで '持って、それはおそらく悪い考えです。 –

+0

しかし、sample_moduleがあります。一部のユーザーがエラーを表示し、一部のユーザーはエラーを表示します。エラーが発生しないユーザーの場合、モジュールは削除されます。スクリプトにOn Error Resume Nextもありません。モジュールを正しく参照していないような気がしますが、どのように対処するかはわかりません。 –

答えて

1

は、あなたが得るものを見る、下記For Each vbCom In .VBComponentsループでコードを実行するようにしてください:

Option Explicit 

Sub CheckVBProjComp() 

Dim vbCom As Object 
Dim flag As Boolean 
Dim VbComName As String 

VbComName = "sample_module" 

With ThisWorkbook.VBProject 
    For Each vbCom In .VBComponents 
     If vbCom.Name Like VbComName Then 
      .VBComponents.Remove .VBComponents(vbCom.Name) 
      flag = True 
      Exit For 
     End If 
    Next vbCom 
End With 

If flag Then 
    MsgBox "VB Component " & Chr(34) & VbComName & Chr(34) & " successfully removed", vbOKOnly 
Else 
    MsgBox "Unable to find VB Component " & Chr(34) & VbComName & Chr(34), vbInformation 
End If 

End Sub 
+1

賞賛。 –

+0

ありがとうございました。これはかなりうまくいく。エラーはもう表示されません。 –

+0

@WalterWhalen大歓迎ですが、私の回答 –

0

あなたは、VBA拡張ライブラリへの参照を追加し、それらのコマンドを実行している各クライアントの「Visual Basicのプロジェクトへのアクセスを信頼する」を有効にする必要があります。あなたは偉大な内訳でチップから、このページを見ることができます:http://www.cpearson.com/excel/vbe.aspx

+0

私はvbComを設定していたときだと思った。私は既にユーザーに信頼アクセスを可能にしてもらった。何とか私のvbComのリファレンスを変更する必要がありますか? –

+0

@WalterWhalen番号。あなたのコードは 'vbCom As Object'を宣言しているので、VBIDE APIへのレイトバインド呼び出しを行います。 'ActiveVBProject'曖昧さを取り除くため –

0

目標は、内のすべてのモジュールを削除するだけである場合Excelワークブック与えられ、その後、WorkbookVBProjectは、VBE.ActiveVBProjectはあなたがターゲットとしているワークブックの背後にあるプロジェクトになるだろうと想定していないことをオフに動作します。

この手順ストリップ指定targetからすべての非文書モジュール:

Public Sub RemoveAllMacros(ByVal target As Workbook) 

    'if the target is ThisWorkbook, we're removing the very macro we're running! 
    If target Is ThisWorkbook Then Exit Sub 

    Dim components As VBComponents 
    Set components = target.VBProject.VBComponents 

    Dim component As VBComponent 
    For Each component In components 
     If component.Type <> vbext_ct_Document Then components.Remove component 
    Next 

End Sub 
関連する問題