2017-01-16 7 views
0

私のExcelファイルにファイルを追加したいのですが、このマクロはmultiselectがfalseの場合に機能しますが、multiselect = trueで試してみると、エラーメッセージが表示されます。Excelファイルにドキュメントを追加する方法

添付ファイルがfalseの場合はexitを終了します。エラーメッセージはタイプ の不一致でした。何が選択されている場合はtrueに設定複数選択して

Sub insertObject() 

Dim attachment As Variant 

'open more files, but not from specific folder  
attachment = Application.GetOpenFilename(FileFilter:="All Files (*.*), *.*",  MultiSelect:=True) 

'if attachment is missing then end macro 
If attachment = False Then Exit Sub 

'my try with OLEobjects 
ActiveSheet.OLEObjects.Add(Filename:=attachment, Link:=False, DisplayAsIcon:=True, IconFileName:="C:\WINDOWS\system32\packager.dll", IconIndex:=1, IconLabel:=attachment).Select 

End Sub 
+0

アタッチメントはおそらく文字列であり、ブール値と比較しています。 attachment = ""の場合に試してください – dgorti

答えて

2

GetOpenFileName関数は、配列を返します。何も選択されていなければFalseを返します。問題は、あなたが何かを選択した場合、 "attachment = false"は、そのような配列との比較を行うことができないため、エラーを引き起こします。それは何を選択した場合、常に配列になりますし、何もなかった場合ではありませんのでそれは怠け者のようなものだが、これは常に複数選択ダイアログになるだろうされている場合、あなただけの

If IsArray(attachment) = False Then Exit Sub 

を行うことができます。それは、配列を返すため

また、あなたはすべてのファイルを追加するには

For i = LBound(attachment) To UBound(attachment) 
    ActiveSheet.OLEObjects.Add Filename:=attachment(i), Link:=False, DisplayAsIcon:=True, IconFileName:="C:\WINDOWS\system32\packager.dll", IconIndex:=1, IconLabel:=attachment(i) 
Next 

のようなものを持っている必要があります。添付ファイル配列のすべての値は完全なファイルパスなので、おそらくIconLabelフィールドのファイル名を解析する必要があります。また、OLEObject.Addメソッドの "top"フィールドまたは "left"フィールドの値を増分するように設定してください。

+0

ありがとうございました。値を増やすことについての良い点。私は、ファイルの重複を避けるために解決しなければならないことも同様に考えていました。 – Martin

関連する問題