これで詳細を説明します。VB.Netを使用してWord文書にマクロコードを追加する
と仮定「Word.doc」と呼ばれるワードファイルがあり
私は基本的には次のもののためにやってVB.NETを使用されてやりたい:
オープンワード文書
追加します例えば
のために、マクロコード
Word文書
に次のマクロコードを追加します。Sub AutoOpen()
Msgbox
End Sub
この文書を保存してください。
ちょうど私が文書ここ
これで詳細を説明します。VB.Netを使用してWord文書にマクロコードを追加する
と仮定「Word.doc」と呼ばれるワードファイルがあり
私は基本的には次のもののためにやってVB.NETを使用されてやりたい:
オープンワード文書
追加します例えば
のために、マクロコード
Word文書
に次のマクロコードを追加します。Sub AutoOpen()
Msgbox
End Sub
この文書を保存してください。
ちょうど私が文書ここ
から既に存在しているマクロコードを盗んないワード文書にマクロコードを挿入したいを追加するWordオブジェクトモデルを使用する方法を示し、簡単なVBAマクロであることを覚えておいてくださいドキュメントへのマクロ(VB.NETコードはほぼ同じです)。このコードを実行すると、VBAプロジェクトオブジェクトモデルへのアクセスが信頼されている必要が
Sub NewDocWithCode()
Dim doc As Document
Set doc = Application.Documents.Add
doc.VBProject.VBComponents("ThisDocument").CodeModule.AddFromString _
"Sub AutoOpen()" & vbLf & _
" MsgBox ""It works""" & vbLf & _
"End Sub"
End Sub
注(これは、Wordのオプションの信頼センターで有効にする必要があります)。
オブジェクトモデルを使用してVBAエディタでオブジェクトを操作するには、Visual Studioの[プロジェクト/参照の追加]の[COM]タブにあるMicrosoft Office VBA拡張性5.3オブジェクトモデルへの参照が必要です。
私は、私は常にフル名前空間の資格を記述する必要はありませんようにコードの先頭にImportsステートメントを追加したい:
Imports VBE = Microsoft.Vbe.Interop
アンAutoOpenマクロマクロニーズを「公開」しますSub
通常のコードモジュールです。ドキュメントに新しいコードモジュールを追加する場合は、VBComponents.Add
メソッドを使用し、列挙型vbext_ct_StdModule
を指定します。
デフォルトでは、VBEは新しいモジュール「Module#」の名前を増やします。このモジュールをプログラムで再度指定する必要がある場合(たとえば、存在するかどうかを確認するために)、モジュールに名前を割り当てる方がよいでしょう。
コードは文字列としてAddFromString
メソッドを使用して追加されます。
ドキュメントにコードを追加する場合、ドキュメントのタイプがdocxである可能性があります。つまり、マクロコードを含むことはできません。マクロコードを格納するには、文書に拡張子docmが必要です。したがって、ファイルの種類と名前を変更するには、文書のSaveAsメソッドを使用する必要があります。
Private Sub InsVbaCode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InsVbaCode.Click
'Helper method to get current Word instance or, if none, start one
GetWordProcess()
Dim doc As Word.Document = WordApp.ActiveDocument
Dim vbModule As VBE.VBComponent = doc.VBProject.VBComponents.Add(VBE.vbext_ComponentType.vbext_ct_StdModule)
vbModule.Name = "basAddedCode"
vbModule.CodeModule.AddFromString(_
"Sub AutoOpen()" & vbLf & _
" MsgBox ""Document "" & ActiveDocument.FullName & "" has been opened successfully!""" & vbLf & _
"End Sub")
'doc.Save() or doc.SaveAs to change file type and/or name
End Sub
私はちょうど2つのことを理解できません。FrirstはGetWordProcess()で、2番目は 'WordApp'です。あなたはそれを手伝ってくれますか?開かれた単語なしでマクロを追加することも可能ですか?単語のインスタンスを意味するときは、単語のプログラム的なインスタンスを意味するのか、実際のWordを開くのですか?私を抱きしめて私を助けてください.netでマクロと単語を使うことについては考えていません。ありがとうございます – Lucifer
これは別の質問ですが、Word文書にマクロを追加する方法を尋ねる前に、どのようにすればよいか知っておく必要があります。 VB.NETからWordアプリケーションを自動化する方法については、数多くのサンプルとドキュメントがあります。基本的な研究をすることをお勧めします。 [ヘルプ]のスタックオーバーフローのガイドラインを読んでください。これは無料のコード作成やチュートリアルサービスではありません! –
すみません...私はいくつかの研究を行い、それを仲間と考えました。非常に仲間ありがとうございます。しかし、Microsoft WordオブジェクトのThisDocumentにマクロを追加しようとすると、不明なエラーが発生しました。私が使用したコードは 'Dim vbModule As VBE.VBComponent = doc.VBProject.VBComponents.Add(VBE.vbext_ComponentType.vbext_ct_Document) vbModule.Name =" ThisDocument "' – Lucifer
検索すると例があります。しかし、Officeアプリケーションの既定のインストール構成では許可されません。セキュリティ上のリスクです。ユーザーはUIの設定を変更する必要があります。それは本当に堅牢なアプローチではありません。 –
私はこのことを達成する必要がありますか?設定を変更することは問題ではありません – Lucifer