質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

4回答

11707閲覧

VBAを使って自身のブックのモジュールを他のブックにコピーする

cd987456

総合スコア33

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/03/31 06:52

VBAを使って自身のブックのモジュールを他のブックにコピーしようと思います。

コピーは下記コードで上手くできるのですが、
自身のブック・・Returnbook
他のブック・・Targetbook

Dim VBP, Code As String With Returnbook.VBProject.VBComponents("Module1").CodeModule Code = .Lines(1, .CountOfLines) End With With Targetbook.VBProject.VBComponents.Add(1) .CodeModule.AddFromString Code End With

教えてほしいことは、自身のブックのモジュールに記載した宣言セクション
Option Explicit
他のブックに2回に記載されてしまいます。
Option Explicit
Option Explicit

他に宣言セクションがなければ、下記コードでよいのですが、
必要な文まで消えてしまいます。

Dim VBP, Code As String With Returnbook.VBProject.VBComponents("Module1").CodeModule Code = .Lines(.CountOfDeclarationLines + 1, _ .CountOfLines - .CountOfDeclarationLines + 1) End With With Targetbook.VBProject.VBComponents.Add(1) .CodeModule.AddFromString Code End With

宣言セクションを残した状態で
Option Explicit が2回記載されることを防げないでしょうか?
教えて下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

1

案1

[VBIDE.CodeModule].DeleteLinesメソッドを使って
コピー先のモジュールから先に宣言セクションを削除し、その後AddFromString で追記する。

案2

[VBIDE.VBComponent].Exportで外部ファイルに書き出し、
[VBIDE.VBComponents].Importで読み込む。

投稿2018/03/31 08:40

imihito

総合スコア2166

ExcelVBAer👍を押しています

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

別解として、エクスポートして、そのファイルをインポートする方法もあるかと。

ただし、ファイルの作成・削除、既存モジュールの削除等は気をつける必要があります。

投稿2018/04/01 01:39

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

他のブックにコードをコピーする前に
"Option Explicit"が記載されていれば、""に置換しました。
すると上手くいきました。

With Returnbook.VBProject.VBComponents("Module1").CodeModule Code = .Lines(1, .CountOfLines) End With With Targetbook.VBProject.VBComponents.Add(1).CodeModule For i = 1 To .CountOfLines If .Lines(i, 1) = "Option Explicit" Then .ReplaceLine i, "" End If Next i .AddFromString Code End With

投稿2018/03/31 10:59

cd987456

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

設定で、変数の宣言を強制するのチェックを外してから実行してみてはどうでしょう。

投稿2018/03/31 08:08

sazi

総合スコア25430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cd987456

2018/03/31 10:56

回答ありがとうございます。 参考にします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問