2017-01-24 17 views
2

ループを使用してVBAコードの最後の部分を短くしようとしています。ループを使用してExcel VBAを使用してWordに画像を挿入する

私が持っている現在のコードは次のようになります。

Sub InsertPics() 

Dim WordApp as Object 
Dim WordDoc as Object 

Set WordApp = CreateObject("Word.Application") 
Set WordDoc = WordApp.Documents.Open("Testing.docx" 

WordApp.Visible = True 

Dim path() as Variant 
Dim i as Long 
Dim Pic as Variant 

path = Application.Transpose(Sheets("Selection").Range("N10:N24").Value) 
For i = LBound(ppath) To UBound(ppath) 
    path(i) = Sheets("Output").Range("Directory").Value & "\" & path(i) & ".jpg" 
Next i 

Set Pic1 = WordDoc.InlineShapes.AddPicture(path(1), False, True).ConvertToShape 
Set Pic2 = WordDoc.InlineShapes.AddPicture(path(2), False, True).ConvertToShape 
Set Pic3 = WordDoc.InlineShapes.AddPicture(path(3), False, True).ConvertToShape 

End Sub 

Set Pic()部分はかなりしばらくの間ので、私は短いコードで同じサブを行う方法を探していますのために行きます。この部分をループする方法はありますか?

注:WordDocは、特定のワードドキュメントを指します。path()は、すでに定義したディレクトリアドレスのリストです。

答えて

1

あなたも写真をリストに入れてください。 R3uKのcollection提案を参照してください。

しかし、あなたがあなたの写真の参照を保持する必要がない場合、あなたはそれがさらに簡単にすることができます。

For i = 1 To 3 
    WordDoc.InlineShapes.AddPicture(path(i), False, True).ConvertToShape 
Next 
+0

をChomel、あなたのコードを試しましたが、型の不一致エラーがありました。 地元のウィンドウを見て、Picの値が空であることを示しています。最初に私がそれを使用しているときにピクチャを挿入するのはどうですか? 私は現在、ディレクトリ値が保存されたバリアントとして定義されたpath()しか持っていません。 乾杯。 – volvader

+0

'Pic()'は 'path()'と同じように定義する必要があります。 –

+0

こんにちはJ.Chomel。私はポストを編集してより明確にするための完全なコードを表示しました。私は実際に 'Application.Transpose'を使って最初にpath()を定義しました - 別のstackoverflowユーザの助けを借りて。 Pic()を定義するためにどのようなコードを使用できるか知っていますか? – volvader

1

あなたは配列またはコレクション使用することができますおかげでJ

Sub test_volvader() 
    Dim i As Integer 
    Dim myCol As Collection 
    Set myCol = New Collection 

    For i = 1 To 3 
     myCol.Add WordDoc.InlineShapes.AddPicture(Path(1), False, True).ConvertToShape, i 
    Next i 

    For i = 1 To myCol.Count 
     YourOperationOnAPicture myCol.Item(i) 
    Next i 
End Sub 
関連する問題