我有一个excel表,其中保存了多个word文档,我想以编程方式将它们从excel嵌入式文档保存到驱动器中。我使用了一些我在这里找到的代码并试图为它添加一个循环来遍历每个文档并保存,但是在循环完成之前它会出错。这是代码:
Sub aaSaveEmbedded1()
Application.ScreenUpdating = False
i = 1
Do Until i = 10
Dim num As String
num = Cells(i + 9, 4).Value
Dim nam As String
nam = Cells(i + 9, 8).Value & ".doc"
Dim sh1 As Shape
Dim objWord As Object ''Word.Document
Dim objOLE As OLEObject
''The shape holding the object from 'Create from file'
Set sh1 = ActiveSheet.Shapes(i)
''Activate the contents of the object
sh1.OLEFormat.Activate
''The OLE Object contained
Set objOLE = sh1.OLEFormat.Object
''This is the bit that took time
Set objWord = objOLE.Object
''Save it
objWord.SaveAs2 Filename:="C:\Users\rchandler\Desktop\condor project\Procedures\1_Drilling Procedures\" & num & nam, _
FileFormat:= _
wdFormatTemplate ''1=wdFormatTemplate
objWord.Application.Quit
Set objWord = Nothing
Set sh1 = Nothing
Set objOLE = Nothing
num = Empty
nam = Empty
i = i + 1
Loop
Application.ScreenUpdating = True
End Sub
当我运行代码时,第一次迭代工作并保存第一个文档。之后,我收到一条错误,指出“无法启动此对象的源应用程序”:
sh1.OLEFormat.Activate
我本周刚刚开始使用VBA,而且我没有很多编程经验,所以任何帮助都将不胜感激。我需要很长时间才能解决问题。提前谢谢。
答案 0 :(得分:0)
我创建了一个Excel 2010文档,插入了两个Word类型的对象,键入' Test 1'进入第一个容器和'测试2'进入第二个并运行你的代码 - 它立即引发了一个错误,因为你正在激活OLE对象,而SaveAs2方法无法保存正在编辑的东西。但是,当我注释掉激活时,它工作得很好,
我不得不改变SaveAs以使用i&我代替了num&文件名中的num(因为我没有在您正在读取的单元格中填充值并分配给变量num)。您的文件名是否可能基于num& num在第二轮中不是唯一的?如果是这种情况,它肯定会导致SaveAs2方法调用炸弹(如果该文件已经存在)。