2010年のMicrosoft ExcelでVBAを使用してWordからコントロールエクセル
Word文書からExcelファイルにデータをコピーしなければならない場合があります。これは、すべてのバージョンのOfficeのマクロを使用して非常に簡単に実行できます。マクロは、既存/新しいExcelファイルを開き、内容をコピーしてから、ファイルを保存して閉じます。これがどのように行われるかを見てみましょう。
Option Explicit __ Sub OpenAndReadWordDoc()
Dim tString As String Dim p As Long、r As Long Dim wrdApp As Object、wrdDoc As Object Dim wb As Workbook Dim trange As Variant _Set wb = Workbooks.Add With wb.Worksheets(1).Range( “A1″)
wrdApp.Visible = True Set wrdDoc = wrdApp.Documents.Open(“ B:\ Test \ MyNewWordDoc.docx”)_ With wrdDoc For p = 1 to .Paragraphs.Count Set trange = .Range(Start:=。Paragraphs(p ).Range.Start、 End:=。Paragraphs(p).Range.End)
tString = trange.Text tString = Left(tString、Len(tString)-1)_ If Instr(1、tString、” 1”)> 0 Then wb.Worksheets(1).Range(“ A”&r).Value = tString r = r + 1 End If Next p .Close End With wrdApp.Quit Set wrdDoc = Nothing Set wrdApp = Nothing wb.Saved = True _End Sub_上記のコードをファイルにコピーするには、キーボードのAlt + F11を押します。左側に、Microsoft Excelオブジェクトが表示されます。右クリックして[挿入]を選択し、[モジュール]をクリックします。*コードを右側のコードウィンドウにコピーします。次に、このコードがどのように機能するかを確認します。まず、必要な変数を宣言します。テキストを保持する文字列(後でどのテキストを確認します)。カウンターとしての2つの変数「p」と「r」。これらは「長い」タイプです。次に、2つのオブジェクト変数wrdAppとwrdDocがあります。 wrdAppはWordアプリケーションオブジェクトであり、wrdDocはWordドキュメントオブジェクトです。 Wbは、コードで作成された新しいブックのワークブック変数です。既存のブックを開いている場合は、代わりにこの変数をそれに割り当てることができます。最後の変数は、単語docからExcelファイルに転送する必要のある内容を持つ変数のtrangeバリアントタイプです。
_Set wb = Workbooks.Add_これにより、新しいワークブックがwb変数に割り当てられます。新しいブックを追加せずに既存のブックを開く場合は、次のようにこの行を変更できます– * Set wb – Workbooks.Open(“ B:\ Test \ File1.xlsx”) _With wb.Worksheets( 1).Range(“ A1”)
これらのコード行は、新しいワークブックの1 ^ st ^ワークシートのセルA1に、太字のフォントとフォントサイズ14で「WordDocumentContents:」というテキストに配置されています。次に、.Offset(1,0).Selectは次の行を選択します。
_r = 3_変数「r」には値3が割り当てられます。これは、Word文書からコピーされるデータのExcelファイルの開始行であるためです。
Set wrdApp = CreateObject(“ Word.Application”) Wordがシステムですでに実行されている場合、CreateObject *はWordの新しいインスタンスを作成します。したがって、この行は、オブジェクト変数wrdAppをWordアプリケーションに割り当てます。これは、コードの後半で使用できます。
_wrdApp.Visible = True_新しく作成されたWordのインスタンスは、作成時に表示されません。表示するには、wrdApp.Visible = Trueを設定して表示する必要があります。
Set wrdDoc = wrdApp.Documents.Open( “B:\ Test \ MyNewWordDoc.docx”) Wordアプリケーションの新しいインスタンスを作成しましたが、ソースWordドキュメントをまだ開いていません。したがって、このコマンドはWord文書を開きます。オブジェクトwrdDocがこのドキュメントに割り当てられているため、コードの後半で使用できます。
_WithwrdDoc….EndWith_これは、wrdDocオブジェクトで完全に機能する「With」ループです。このループを開くと、このループで「wrdDoc」というテキストを再度繰り返す必要はありません。ドット(「。」)から直接始めることができます
wrdDocに関連するオブジェクトの前。このループは_EndWith_ステートメントで終了します。 End Withステートメントを入力すると、wrdDocの後のオブジェクトを「。」だけで参照することはできません。
_For p = 1 to .Paragraphs.Count_これは、Word文書の最初の段落から最後の段落までループする「For」ループです。データを含むワードファイルには100行の情報があり、それぞれが個別の段落として保存されています。ループは1から100にインクリメントし、段落をコピーします。特定の条件が設定されている場合、コピー貼り付けはそれらの条件に基づいて行われます。
_Set trange = .Range(Start:=。Paragraphs(p).Range.Start、End:=。Paragraphs(p).Range.End)_これにより、ループの増分に応じて、各段落の開始と終了が範囲に割り当てられます。
_tString = trange.text tString = Left(tString、len(tString)-1)_最初に、trangeからのテキストがTStringに渡されます。次に、各段落の文末に段落文字があります。これは、Left関数を使用して削除されます。左側から、最後の文字を除くすべての文字がtString変数に格納されます。
_If Instr(1、tString、“ 1”)> 0 Then wb.Worksheets(1).Range(“ A”&r).Value = tString r = r + 1 End If_このIF関数は、tStringのテキストに次のものが含まれているかどうかをチェックします。数値1。trueの場合、tStringの内容をワークブックの次の使用可能な行にコピーします。 「r」の最初の値は3でした。r= r + 1を使用して1ずつインクリメントし、次のエントリを前のエントリの下に配置できるようにします。
_Next p.Close_コードの_Nextp_行は、次の段落にインクリメントされます。
_.Close_は、すべての段落が処理されたら、ドキュメントを閉じます。これは、Excelファイルで取得する出力です–
番号のどこかに番号1が含まれている段落のみが出力に含まれていることがわかります。
wrdApp.Quit Set wrdDoc = Nothing Set wrdApp = Nothing wb.Saved = True wrdApp.Quitは、アプリケーションという単語を閉じます。 Set wrdDoc = NothingおよびSetwrdApp = Nothingは、これら2つのオブジェクト変数が使用していたメモリを解放し、それらをNothingに設定します。 wb.Saved = Trueはブックを保存します。
上記のコードを使用して、WordファイルからExcelファイルにコピーするデータを制御できます。