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