Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 16824|回复: 7

[已解决]运行时错误'-2147221080 (800401a8)'自动化(automation)错误 是怎么回事?

[复制链接]
发表于 2012-11-20 22:01 | 显示全部楼层 |阅读模式
Sub 创建新工作簿_测试1()
Dim循环1 As Integer
Dim W As Workbook
Set W = Workbooks.Add
      For 循环1  = 1 To 3

     W.SaveAs ThisWorkbook.Path & "\a" & 循环1 & ".xlsx"   问题1:循环'第1次可以,循环'第2次就提示:运行时错误'-2147221080 (800401a8)'自动化(automation)错误

    ActiveWorkbook.Close
    Next   
End Sub

问题2:上面一些代码是找的!有一些不明白,比如:Dim W As Workbook    ,而赋值语句:Set W = Workbooks.Add  意思是 W = 新建的工作簿,还是赋值给方法?

谢谢各位前辈赐教!!!!
最佳答案
2012-11-20 22:40
jinbo353535 发表于 2012-11-20 22:35
是,没错!是从头到尾运行一次了!那像这样错误要怎么解决呢?

使用 dir 来判断文件是否存在
s=ThisWorkbook.Path & "\a" & 循环1 & ".xlsx"
if len(dir( s))=0 the
W.SaveAs s
end if

如果文件存在则先删除文件,然后在另存

s=ThisWorkbook.Path & "\a" & 循环1 & ".xlsx"
if len(dir(s))>0 the kill s
w.saveas s
自动化运行错误.gif
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-11-20 22:24 | 显示全部楼层
你所说的循环第一次是指完整的运行了一次代码吧?

在第二次运行代码时,之所以会提示错误,是因为在另存时,指定路径中已经存在相同的文件名了

Dim W As Workbook  是指声明一个 工作薄类型的变量
Set W = Workbooks.Add  是指,这个 W 是新建的工作薄
在这里,新建工作薄的同时,对变量进赋值!




回复

使用道具 举报

 楼主| 发表于 2012-11-20 22:35 | 显示全部楼层
无聊的疯子 发表于 2012-11-20 22:24
你所说的循环第一次是指完整的运行了一次代码吧?

在第二次运行代码时,之所以会提示错误,是因为在另存 ...

是,没错!是从头到尾运行一次了!那像这样错误要怎么解决呢?
回复

使用道具 举报

发表于 2012-11-20 22:40 | 显示全部楼层    本楼为最佳答案   
jinbo353535 发表于 2012-11-20 22:35
是,没错!是从头到尾运行一次了!那像这样错误要怎么解决呢?

使用 dir 来判断文件是否存在
s=ThisWorkbook.Path & "\a" & 循环1 & ".xlsx"
if len(dir( s))=0 the
W.SaveAs s
end if

如果文件存在则先删除文件,然后在另存

s=ThisWorkbook.Path & "\a" & 循环1 & ".xlsx"
if len(dir(s))>0 the kill s
w.saveas s
回复

使用道具 举报

 楼主| 发表于 2012-11-20 22:45 | 显示全部楼层
无聊的疯子 发表于 2012-11-20 22:40
使用 dir 来判断文件是否存在
s=ThisWorkbook.Path & "\a" & 循环1 & ".xlsx"
if len(dir( s))=0 the

谢谢你!我之前是直接用路径&循环变量&“。xlsx” 这样循环没问题(整个我也声明为变量了)!那是用:ThisWorkbook.Path  这个比较好,还是路径呢?在速度上那个会快一点!  
回复

使用道具 举报

发表于 2012-11-20 23:05 | 显示全部楼层
jinbo353535 发表于 2012-11-20 22:45
谢谢你!我之前是直接用路径&循环变量&“。xlsx” 这样循环没问题(整个我也声明为变量了)!那是用:Thi ...

在处理的数据量不大的情况一,速度上没什么影响

使用变量的好处是
1,如果修改路径,只需要修改一处(这是针对当前问题而言)
2,整个代码看起来很简洁,不使用变量则会看起来很繁琐,给人感觉很累
回复

使用道具 举报

 楼主| 发表于 2012-11-20 23:26 | 显示全部楼层
本帖最后由 jinbo353535 于 2012-11-20 23:27 编辑
无聊的疯子 发表于 2012-11-20 23:05
在处理的数据量不大的情况一,速度上没什么影响

使用变量的好处是


谢谢你,抽时间来帮我解答疑惑!学习了,谢谢···
回复

使用道具 举报

 楼主| 发表于 2012-11-21 16:58 | 显示全部楼层
jinbo353535 发表于 2012-11-20 23:26
谢谢你,抽时间来帮我解答疑惑!学习了,谢谢···

你好,关于昨天那个自动化运行错误,我还是没弄明白!我另存的名字都是变量,应该不存在有相同名字的工作簿!我本来想,简单解决这个问题,就是直接把地址声明成变量,就不会了!可是,我今天同时另存3个名称不同的工作簿(比如:A1.xlsx、b1.xlsx、c1.xlsx),也是直接把地址声明成变量,又出现了!我又整不明白了!因为,我是刚刚学VBA,是不是另存的语法,我搞错了?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 05:07 , Processed in 1.273416 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表