0

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

如果附件 = false 则退出子。错误消息是类型不匹配。

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
4

1 回答 1

2

如果选择了任何内容,则将多选设置为 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 方法中为“top”或“left”字段设置一些递增值,因为否则它们只会堆叠在彼此之上。

于 2017-01-16T23:27:43.097 回答