ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 10649|回复: 5

[求助] 请问下用workbooks.open打开有问题的EXCEL打不开,怎样可以强制打开?手动打开可以...

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-6-30 10:13 | 显示全部楼层 |阅读模式
因为用VBA遍历文件,复制内容存放到数据库中,但发现这个文件需要修复的问题无法用代码强制打开,请问有什么参数设置后可以用workbooks.open打开或者用别的方式得到文件里的内容吗?文件格式是xls格式的。因为从网上下载下来的,可能有些文件有问题。

VBA打开提示错误
QQ截图20160630100423.png
手动打开提示要修复,点击是还是可以打开的。
QQ截图20160630100138.png QQ截图20160630100129.png



15517121.rar

13.87 KB, 下载次数: 16

这个是用workbooks.open打不开的文件

TA的精华主题

TA的得分主题

发表于 2016-6-30 10:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
下面代码,可以检测打开时是否报错,如果报错,尝试用数据恢复状态打开,楼主可以试一下。

  1. On Error Resume Next

  2. Set Wb = Workbooks.Open(MyPath & MyName, UpdateLinks:=0, corruptload:=xlNormalLoad)

  3. If Err <> 0 Then

  4. Err.Clear

  5. Set Wb = Workbooks.Open(MyPath & MyName, UpdateLinks:=0, corruptload:=xlExtractData)

  6. End If

  7. On Error GoTo 0
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-30 10:48 | 显示全部楼层
QQ截图20160630103912.png 看workbooks.open的文档,发现了一个参数可选corruptload,这个加上了就可以打开了,不过这里的第1个和第3个不知道有什么区别的呢?
顺便再问下,输入这些:Filename:=,corruptload:=有没有快捷的方法?输入这些没有关键词提示,还挺麻烦容易出错,是不是只要出现一次引用某个参数的方式用例如 corruptload:=这样引用,其它参数也一定要写上前面的引用名称,不能省略的?

Application.DisplayAlerts = False
Set wkb = Workbooks.Open(Filename:="d:\15517121.xls", corruptload:=xlRepairFile)
Application.DisplayAlerts = True

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-30 10:49 | 显示全部楼层
zmnyu 发表于 2016-6-30 10:39
下面代码,可以检测打开时是否报错,如果报错,尝试用数据恢复状态打开,楼主可以试一下。

刚刚我也捉摸了一下,发现有这个参数,感谢

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-1-22 07:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
minren118 发表于 2016-6-30 10:48
看workbooks.open的文档,发现了一个参数可选corruptload,这个加上了就可以打开了,不过这里的第1个和第3 ...

我的经验是要么全省略,要么全写上。省略方式可以边按逗号边看黑体的引用名称位置,来判断当前输入的是哪个参数。我也没找到快捷输入这些引用名称的方法。

TA的精华主题

TA的得分主题

发表于 2019-6-25 22:42 | 显示全部楼层
zmnyu 发表于 2016-6-30 10:39
下面代码,可以检测打开时是否报错,如果报错,尝试用数据恢复状态打开,楼主可以试一下。

你好,看到你这个帖子,非常有帮助,但现在有一个问题:

我有一个共享的工作薄,分为29个工作表,每个工作表给单独一个人操作,然后通过另一个带有VBA的工作表调用这个共享的工作薄,读入数据。但有时会出错,提示被锁定,或者提示发现部分内容有问题。。。,这样VBA就会停止工作。

使用你这个代码可以实现出错的情况下强制打开并修复,但如何才能自动另存再覆盖那个共享的工作表?我测试了你上面的代码,只能打开,然后手动另存覆盖,用saveas可以覆盖原文件,但不能打开(我需要电脑自动处理这些,不能让人再去干预)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-26 16:06 , Processed in 0.046653 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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