工作中常会需要在多个工作簿中进行数据读写,这样在VBA代码中就会涉及几个工作簿之间的切换,将工作簿切换到激活状态,代码的编写也简洁,明了些。(当然你的代码也可每次都写明操作的哪个工作簿与工作表)
工作簿有与工作表类似的激活语句:Workbooks(工作簿名称).Activate,工作簿名称要含工作簿文件的后缀名的。Workbooks(工作簿索引号).Activate,工作簿索引号是指工作簿打开的顺序,Excel根据工作簿打开的顺序以1开始进行编号。Workbooks(工作簿索引号) 这个用法实用性低,工作表的索引顺序一眼可以看出来,工作簿索引易受手动打开的EXCEL文件影响。
实用性用法:Set WB = Workbooks.Open(文件全名),Open 里必须是全路径+文件名。对每一个工作簿打开时,赋值于一个变量,需要用此工作簿时,WB.Activate;wb1.Activate这样代码更清晰。附:有些Excel文件带有“引用链接”,打开后会弹出是否要更新的提示(如下图),影响代码的运行。用 DisplayAlerts = False 是不能屏蔽这种更新提示的,必须是Workbooks.Open(文件全名,UpdateLinks:=0),UpdateLinks参数 0,为不更新;1 更新外部引用,不更新远程引用 ;2 更新远程引用,不更新外部引用; 3 更新外部引用,更新远程引用
对于在不同SUB过程间要用到的工作簿,可以申明为模块级变量,可以在同模块的不同SUB中直接使用。如图:
对于不同模块的Sub过程调用工作簿,这种用法就只能传参。
Workbooks(工作簿名称).Activate 的用法是可以跨SUB子过程的。
Application.Goto 也有同样激活工作簿的功能,并且不会将指定的工作簿显示到打开文件的最前面来。具体用法:Application.Goto Workbooks(工作簿名称).Sheets(1).[A1] ,必须指定到具体单元格。
在打开的工作簿中找到含某关键字的工作簿代码
Dim wb As Workbook,s As String
For Each wb In Workbooks 'Workbooks 已打开的工作簿的集合
s = wb.Name
If s Like "关键字*" Then
Workbooks(s).Activate
Exit For
End If
Next wb