excel的VBA里面的WorkBooks.Open的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了excel的VBA里面的WorkBooks.Open的问题相关的知识,希望对你有一定的参考价值。

现在我有一些列的xls文件,要依次用WorkBooks.Open打开读取一些数据,但是使用这个方法的时候,其中一部分文件会报错“方法Open作用于对象Workbooks时失败”或者 “检测到此文件存在一个问题.要帮助保护你的计算机”
现在我想要如果出现这种情况就跳过这个文件不打开,如何可以在WorkBooks.Open这个方法前判断一个文件是否可以正常打开?

通常情况下,我们应该避开重复打开文件,如果你略懂VBA,请使用下面代码测试:
将你的WOrkBooks.Open("D:\xx.xls")
改成如下:

Dim Wb as WorkBook '定义一个wb工作簿变量
On Error Resume Next '容错
Set wb = WOrkbooks("xx.xls")
'先引用xx.xls工作簿,如果该工作簿没有打开,那么将发生错误9;如果已经打开,将跳过下面这句打开工作簿的代码!
If Err.Number = 9 Then Set wb = WorkBooks.Open("D:\xx.xls") '捕获错误9,打开相关工作簿追问

那如果是“检测到此文件存在一个问题.要帮助保护你的计算机”
这个问题呢?

参考技术A Sub a()
Dim mypath As String
Dim myfile As String
mypath = "d:\123\"
myfile = "a.xls"
Workbooks.Open mypath & myfile, , True
End Sub

在OPEN中的第三个参数。=TRUE表示,为只读方式打开。

测试OK!追问

这个方法试过不行。。。

参考技术B 首先取得这个excel的名称
然后做个判断,获取的新工作簿,是不是当前激活的工作簿,如果不是,则执行打开。
代码如下:
Sub MultiModi()
Dim wb As Workbook
Dim fn, fp, sh
Dim m As Integer, l As Integer
m = 0
l = 1
fp = ThisWorkbook.Path & "\" '获取当前工作簿所在路径
fn = Dir(fp & "*.xls") '取得第一个工作簿的文件名(如果是2007版,则后缀名请改为 *.xlsx)
'先将带宏的表修改
Do While fn <> ""
If fn = ActiveWorkbook.Name Then
MsgBox "问题在这里"
Else
Set wb = Workbooks.Open(fp & fn) '打开工作簿
需要操作的代买放这里
loop
end sub

每日Excel分享(VBA)| 正则表达式在Excel VBA中的应用

感谢每一个朋友的关注与支持,感谢所有的不离不弃,一路同行!

每日Excel分享(VBA)| 正则表达式在Excel VBA中的应用

导读

前两天分享了一篇关于VBA与正则表达式的文章,里面写了如何利用VBA与正则表达式去除字符串中除中文之外的其他字符,只保留中文。

这两天有朋友问我如果要只保留数字或只保留字母该怎么办?所以今天村长再来补充一下其他正则表达式在VBA中的应用。

每日Excel分享(VBA)| 正则表达式在Excel VBA中的应用

按ALT+F11弹出VBE窗口,然后新建模块,如下图:

每日Excel分享(VBA)| 正则表达式在Excel VBA中的应用

只保留中文的代码如下:

Function ZW(i As String) As String

  Dim a As Object

  Set a = CreateObject("VBSCRIPT.REGEXP")

  a.Pattern = "[^\u4e00-\u9fa5]"

  a.IgnoreCase = True

  a.Global = True

  ZW = a.Replace(i, "")

  Set a = Nothing

End Function


只保留数字的代码如下:

Function SZ(i As String) As String

  Dim a As Object

  Set a = CreateObject("VBSCRIPT.REGEXP")

  a.Pattern = "[^0-9]"

  a.IgnoreCase = True

  a.Global = True

  SZ = a.Replace(i, "")

  Set a = Nothing

End Function


只保留字母的代码如下:

Function ZM(i As String) As String

  Dim a As Object

  Set a = CreateObject("VBSCRIPT.REGEXP")

  a.Pattern = "[^A-Z^a-z]"

  a.IgnoreCase = True

  a.Global = True

  ZM = a.Replace(i, "")

  Set a = Nothing

End Function


只保留数字和字母的代码如下:

Function SZZM(i As String) As String

  Dim a As Object

  Set a = CreateObject("VBSCRIPT.REGEXP")

  a.Pattern = "[^A-Z^a-z^0-9]"

  a.IgnoreCase = True

  a.Global = True

  SZZM = a.Replace(i, "")

  Set a = Nothing

End Function


保存完代码之后我们回到表格里面,在单元格输入我们刚才写的自定义函数,如下图:

每日Excel分享(VBA)| 正则表达式在Excel VBA中的应用
每日Excel分享(VBA)| 正则表达式在Excel VBA中的应用

坚持!坚持!再坚持!

致各位亲

每日Excel分享(VBA)| 正则表达式在Excel VBA中的应用

每日一歌


羽泉《冷酷到底》

当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放 每日Excel分享(VBA)| 正则表达式在Excel VBA中的应用

点击下方“阅读原文”查看更多
↓↓↓

以上是关于excel的VBA里面的WorkBooks.Open的问题的主要内容,如果未能解决你的问题,请参考以下文章

请问Excel 里面的 VBA 具体能做啥?都有哪些实际的用途?

excel的VBA里面的WorkBooks.Open的问题

excel vba自动图片导入

excel里面我想 用VBA实现调用另一个工作簿中的数据怎么解决

Excel VBA里面怎样把数字转换成字符串

想在excel里用VBA,点击按钮复制一行数据到另外一行,可是不知道该怎么写