2016-08-18 3 views
1

VBAを使用してWord文書を解析してその内容を配列に入れる方法を見つけようとしています。この例では、Word文書に2つの会社があり(コードの下に表示されています)、フィールドを配列に配置したいと考えています。スタックオーバーフロー上に切り取って貼り付けVBA Excel - Word文書の区切りと解析セクションをExcelにデータを入力するために

Public Sub ParseCompanies() 

Dim Company_Array(1 To 2) As String 'stores individual company fields 
Dim Companies_Array() 'array for all companies 

Dim oWord As Object, oDoc As Object 
Set oWord = CreateObject("Word.Application") 

Set oDoc = oWord.Documents.Open("C:/Temp/test.docx", Visible:=True) 

Dim singleLine 
Dim lineText As String 

'need to rewrite this section 
For Each singleLine In oDoc.Paragraphs 

    lineText = singleLine.Range.Text 
    Debug.Print lineText  

Next singleLine 


End Sub 

Wordファイルの内容:


会社:アラジンカーペット

製品:魔法の絨毯


会社:エアリアル貝

製品:貝


現在のスクリプトの実行方法は

enter image description here

VBAデバッガ出力に下記見ることができますが、これを行うための効率的な方法はありますか?個々の企業を解析するために、word文書内のラインまたはセクションスプリッターを区切る方法?

答えて

2

ソリューション:

:出力は、データをコピー-I記載されているとしてではなく、私は別の結果 - を得る
場合、これは、動作するはずない場合は、単に要素を調整するには、アレイ内に保存されていますそれはFOU後、スクリーンショットに応じて2行になるだろうされているので、変更/提案
For each
Public Sub ParseCompanies() 

Dim Products_Array() As String 'stores individual company fields 
Dim Companies_Array() As String 'array for all companies 
Dim CounterElements As Long: CounterElements = 1 
Dim CounterParagraphs As Long 

Dim oWord As Object, oDoc As Object 
Set oWord = CreateObject("Word.Application") 
On Error GoTo Err01ParseCompanies 
Set oDoc = oWord.Documents.Open("C:\Users\lz630z\Desktop\Company.docx", visible:=True) 

Dim singleLine 
Dim lineText As String 

'need to rewrite this section 
For CounterParagraphs = 1 To oDoc.Paragraphs.Count 
    If InStr(oDoc.Paragraphs(CounterParagraphs).Range.Text, "Company") Then ReDim Preserve Companies_Array(CounterElements): Companies_Array(CounterElements) = oDoc.Paragraphs(CounterParagraphs + 2) 
    If InStr(oDoc.Paragraphs(CounterParagraphs).Range.Text, "Product") Then ReDim Preserve Products_Array(CounterElements): Products_Array(CounterElements) = oDoc.Paragraphs(CounterParagraphs + 2): CounterElements = CounterElements + 1 

Next CounterParagraphs 

If 1 = 2 Then ' 99. If error 
Err01ParseCompanies: 
MsgBox "Word Error", vbCritical 
End If '99. If error 
Set oDoc = Nothing 
Set oWord = Nothing 
End Sub 

概要は、ここでは動作しません。最初の結果では、このシナリオですべてのものを制御し、それに応じて配列の要素を保存することをお勧めします。For/Toアプローチを変更しました。 あなたが1つを指しているときはいつでも、そのサイズのためにもう1つがそれに応じてあります。
IG:Companies_Arrayは、(1)アラディンカーペットとProducts_Array(1)になります魔法の絨毯になります

0

Word文書の項目が真に段落が区切られている場合は、それを通して、あなたのアレイと、ループを埋めるためにSplitメソッドを使用することができますデータを操作する。たとえば、これは単にアレイを満たし、イミディエイトウィンドウに要素を出力します。

Public Sub ParseCompanies() 
    Dim wordList() As String 
    Dim i As Long 
    Dim oWord As Word.Application 
    Dim oDoc As Word.Document 

    Set oWord = CreateObject("Word.Application") 
    Set oDoc = oWord.Documents.Open("C:\Users\test\Desktop\Company.docx", Visible:=False) 

    wordList = Split(oDoc.Content.Text, vbCr) 'split using carriage return (paragraphs) 

    For i = 0 To UBound(wordList, 1) 
     Debug.Print wordList(i) 
    Next i 

    oWord.Quit 
End Sub 

私は大きなファイルに対してこのメ​​ソッドのパフォーマンスに話すことができないので、これを考慮することができる前に、それはテストが必要な場合があります実行可能なオプション。

関連する問題