如何将更多文档添加到Excel文件中

时间:2017-01-16 22:02:23

标签: excel excel-vba getopenfilename vba

我想在excel文件中添加更多文件。如果multiselect为false,则此宏有效,但是如果我尝试使用multiselect = true,则会在行中收到错误消息:

  

如果attachment = false则退出sub。错误消息是类型   不匹配。

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

1 个答案:

答案 0 :(得分:2)

将multiselect设置为true的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方法中的“顶部”或“左侧”字段设置了一些递增值,因为它们只会叠加在另一个上面。否则就会叠加。