2014-01-23 99 views
2

我有在Excel电子表格1和4之间安装OLEObjects(zip文件)。复制一个OLEOBJECT,并将其粘贴到一个文件夹(或到桌面)

我可以手动点击右键>复制的对象之一,然后去到桌面或资源管理器窗口,并用鼠标右键点击>粘贴它来创建该文件夹中的zip文件。

至于我可以做出来,我就无法自动与VBA这个过程的粘贴台。

而且,我不能同时做多个对象本手册的过程,所以我最初的解决方法,希望(将它们拷贝所有到剪贴板,然后打开资源管理器窗口)将无法正常工作。

我最好的解决方法是依次复制每个对象,ShellAndWait浏览器窗口,并指示用户粘贴文件,然后在完成时关闭窗口,然后移动到下一个对象。

Sub blunt_extract() 

If MsgBox("All attachments will be downloaded to your Documents folder", vbOKCancel Or vbInformation, "") = vbCancel Then Exit Sub 
Dim o As OLEObject, ws As Worksheet, rM As Range, ATT As String 

On Error Resume Next 
MkDir modSpecialFolders.SpecFolder(modSpecialFolders.CSIDL_PERSONAL) & "\CIRF\" 
MsgBox "For each attachment, Explorer will launch in the CIRF folder. Right-click > Paste the zip file, then close the Explorer window to continue", , "Save Attachment" 
Set ws = ThisWorkbook.Sheets(wsA) 
For Each o In ws.OLEObjects 
    If Left(o.Name, 11) = "Attachment " Then 
     o.Copy 
     ShellAndWait "explorer " & modSpecialFolders.SpecFolder(modSpecialFolders.CSIDL_PERSONAL) & "\CIRF\", 0, vbNormalFocus, PromptUser 
     MsgBox "Done pasting? Click OK to continue", , "Save Attachment" 
    End If 
Next o 
On Error GoTo 0 

End Sub 

任何关于进一步阅读或甚至解决方案的建议?

回答

1

由于(不幸)的Windows资源管理器是不是自动的,我们需要通过模拟键盘按键间接指挥它。

我提出这(测试)解决方案,在工作表中移动嵌入OLE对象到指定文件夹

Sub SaveOleObjectsTofolder(ws As Worksheet, folder As String) 
    Shell "explorer " & folder, vbMaximizedFocus 
    Dim o As OLEObject 
    For Each o In ws.OLEObjects 
     Application.Wait Now + TimeValue("00:00:01") ' necessary, give it a moment 
     o.copy 
     SendKeys "^v" ' paste in explorer 
    Next 
    SendKeys "%fc" ' close the explorer 
End Sub 
+0

的OP近两年前发布此,他最近一次在四月看到在计算器上。我怀疑你的问题会得到答案。这可能有助于尽可能地推广你的答案让谁放在赏金的用户可以使最简单的使用它,以及未来的学生。 –

+1

@JDB_Dragon哦..我没注意到。感谢信号。基本上我的答案解决了将嵌入式OLE对象移动到给定文件夹的问题。我会尝试修改它来解决这个一般问题,而不太关注OP的代码。再次感谢 :) –

相关问题