2016-12-03 19 views
0

以下のコードを使用して、あるブックから別のブックにvbaモジュールをコピーしようとしています。これは私にエラーユーザー定義型次の行に定義されていない与え何らかの理由VBA 1つのブックから別のブックにモジュールをコピーしますか?

Dim comp As VBComponent 
Set comp = ThisWorkbook.VBProject.VBComponents("File") 
Workbooks("book2.xlsm").VBProject.VBComponents.Add comp 

Dim comp As VBComponent 

を誰かが私が間違っているつもりですどこ私を見ることができますしてください?あなたは、VBAエディタでツール/リファレンス経由Microsoft Visual Basic for Applications Extensibility 5.3への参照を追加する必要があり

おかげ

+0

まず、モジュールを_programmatically_コピーする必要があるのはなぜですか?次に、デバッガを使用して、エラーが発生している行を見つけます。 – FDavidov

+0

@FDavidov更新された質問をご覧ください。 –

答えて

1

また、レイトバインディングを使用することもできます。予想通り

Dim comp As Object 

そして

Set comp = ThisWorkbook.VBProject.VBComponents("File") 

によって

Dim comp As VBComponent 

を交換しては動作します。これはワークブックオブジェクトの標準プロパティであるため、.VBProjectを呼び出す参照を含める必要はありません。あなたが期待するよう

残念ながら、

Workbooks("book2.xlsm").VBProject.VBComponents.Add comp 

は動作しません。 .Addは空白のコンポーネントを作成します。引数は、作成するコンポーネントのタイプを記述する定数でなければなりません。標準コードモジュールの場合は、1にする必要があります。 (1の代わりに使用できる名前の定数がありますが、これらの定数は参照なしでは動作しないと思われます)。

あなたも参照することなく、ラインことを確認することができます

Set target = Workbooks("book2.xlsm").VBProject.VBComponents.Add(1) 

は(targetObjectまたはVariantとして宣言されている)BOOK2に新しいモジュールを作成し、それへの参照を確立するの両方で成功します。この参照はコードを転送するために使用できますが、(AFAIK)すべてを一度に転送することはできません。そのためには、Chip Pearsonのarticle on scripting the VBEで説明されているように、プログラムでエクスポート/インポートする必要があります。必要に応じてレイトバインディングを使用して、その記事を処理することができます。

+0

私は参照へのアクセスをロックするワークコンピュータを使用しているので、私はこれを行うことはできません。別の方法がありますか? –

+0

@ Bing.Wong編集が役立つかどうかを確認してください。少なくとも、あなたを地面から離れさせるべきです。 –

+0

提案をいただきありがとうございます。しかし、vbaプロジェクトへのプログラムによるアクセスは信頼できないというエラーが表示されます。 –

関連する問題