2017-01-16 2 views
0

엑셀 파일에 파일을 추가하고 싶습니다. 이 매크로는 multiselect가 false 인 경우 작동하지만 multiselect = true로 시도하면 행에 오류 메시지가 표시됩니다.엑셀 파일에 문서를 추가하는 방법

첨부 = false 인 경우 하위를 종료하십시오. 오류 메시지 유형이 입니다. 아무것도 선택되고있는 경우는 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

첨부 파일이 아마도 문자열이며 부울 값과 비교 중입니다. 첨부 파일 = ""시도하십시오 – 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 메서드의 "위쪽"또는 "왼쪽"필드에 대해 몇 가지 증분 값을 설정합니다. 그 이유는 그렇지 않으면 서로 위에 쌓을 것이기 때문입니다.

+0

도움 주셔서 감사합니다. 가치를 높이는 좋은 점. 나는 파일 스택을 피하기 위해 해결되어야한다고 생각하고있었습니다. – Martin