1-1遍历Workbooks集合方法
通过遍历当前应用程序所有已打开的工作簿文件(Workbooks集合),判断指定名称的工作簿是否打开,如下面的代码所示。
#001 Sub WorkbookIsOpen_1()
#002 Dim Wb As Workbook
#003 Dim myWb As String
#004 myWb = "Excel Home.xls"
#005 For Each Wb In Workbooks
#006 If Wb.Name = myWb Then
#007 MsgBox "工作簿" & myWb & "已经被打开!"
#008 Exit Sub
#009 End If
#010 Next
#011 MsgBox "工作簿" & myWb & "没有被打开!"
#012 End Sub
代码解析:
WorkbookIsOpen_1过程通过遍历当前应用程序中所有已打开的工作簿文件(Workbooks集合),判断“Excel Home”工作簿是否打开。
第5行代码使用For...Each...Next语句来遍历Workbook对象集合中的所有元素。
第6行到第8行代码如果Workbook对象集合包含“Excel Home.xls”工作簿名称,说明文件已打开,使用Exit Sub语句结束代码的运行。
第11行代码如果运行到此行代码说明“Excel Home.xls”工作簿没有被打开。
1-2错误处理方法
使用错误处理程序判断指定名称的工作簿是否打开,如下面的代码所示。
#001 Sub WorkbookIsOpen_2()
#002 Dim Wb As Workbook
#003 Dim myWb As String
#004 myWb = "Excel Home.xls"
#005 Err.Clear
#006 On Error GoTo line
#007 Set Wb = Application.Workbooks(myWb)
#008 MsgBox "工作簿" & myWb & "已经被打开!"
#009 Set Wb = Nothing
#010 Exit Sub
#011 line:
#012 MsgBox "工作簿" & myWb & "没有被打开!"
#013 Set Wb = Nothing
#014 End Sub
代码解析:
WorkbookIsOpen_2过程使用错误处理程序判断“Excel Home”工作簿是否打开。
第5行代码使用Clear方法清除Err对象的所有属性设置。
第6行代启动错误处理程序,如果第7行代码发生错误则执行line行后面的代码。
第7行代码使用Set语句将Workbook对象引用赋给变量Wb,如果 “Excel Home.xls”工作簿没有被打开将发生下标越界错误,此时执行第12、13行代码,否则执行第8、9行代码。