2016-05-17 19 views
-1

これで詳細を説明します。VB.Netを使用してWord文書にマクロコードを追加する

と仮定「Word.doc」と呼ばれるワードファイルがあり

私は基本的には次のもののためにやってVB.NETを使用されてやりたい:

オープンワード文書

追加します例えば

のために、マクロコード

Word文書

に次のマクロコードを追加します。
Sub AutoOpen() 
    Msgbox 
End Sub 

この文書を保存してください。

ちょうど私が文書ここ

+0

検索すると例があります。しかし、Officeアプリケーションの既定のインストール構成では許可されません。セキュリティ上のリスクです。ユーザーはUIの設定を変更する必要があります。それは本当に堅牢なアプローチではありません。 –

+0

私はこのことを達成する必要がありますか?設定を変更することは問題ではありません – Lucifer

答えて

0

から既に存在しているマクロコードを盗んないワード文書にマクロコードを挿入したいを追加する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のオプションの信頼センターで有効にする必要があります)。

0

オブジェクトモデルを使用して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 
+0

私はちょうど2つのことを理解できません。FrirstはGetWordProcess()で、2番目は 'WordApp'です。あなたはそれを手伝ってくれますか?開かれた単語なしでマクロを追加することも可能ですか?単語のインスタンスを意味するときは、単語のプログラム的なインスタンスを意味するのか、実際のWordを開くのですか?私を抱きしめて私を助けてください.netでマクロと単語を使うことについては考えていません。ありがとうございます – Lucifer

+0

これは別の質問ですが、Word文書にマクロを追加する方法を尋ねる前に、どのようにすればよいか知っておく必要があります。 VB.NETからWordアプリケーションを自動化する方法については、数多くのサンプルとドキュメントがあります。基本的な研究をすることをお勧めします。 [ヘルプ]のスタックオーバーフローのガイドラインを読んでください。これは無料のコード作成やチュートリアルサービスではありません! –

+0

すみません...私はいくつかの研究を行い、それを仲間と考えました。非常に仲間ありがとうございます。しかし、Microsoft WordオブジェクトのThisDocumentにマクロを追加しようとすると、不明なエラーが発生しました。私が使用したコードは 'Dim vbModule As VBE.VBComponent = doc.VBProject.VBComponents.Add(VBE.vbext_ComponentType.vbext_ct_Document) vbModule.Name =" ThisDocument "' – Lucifer

関連する問題