选中多个工作表
-
工作表对象的选择
- worksheet.active 永远只有有1个激活的
- worksheet.select [replace] 参数 [replace] 参数,默认是true,改成false可以不替代选中
-
或者用集合的选择
- worksheets(array()).select
工作表对象的选择
Sub select_sheet()
Dim wb As Workbook
Dim sh As Worksheet
Set wb = Workbooks("cs2.xlsm") '如果不带后缀名会报错,下标越界。其实就是找不到表。
For Each sh In wb.Sheets '不是 in wb !
sh.Select False '如果不设置select的 repalce参数(默认true),那么每次选择都会替代之前的
Next sh
Debug.Print ("all sheets are selected")
End Sub
如果需要先打开工作簿,再选择多个工作表
- worksheet 归属于 worksheets 而不是workbook!
- For Each sh In wb.Sheets '不是 in wb !
- 下面是我画的,理解的VBA的从属关系。绿色是对的,橙色的是错的。
- 打开工作簿的语法
- 1 需要带文件后缀名。因为EXCEL文件本身就有好几种后缀名。同名文件+后缀名 才可以唯一确定文件。
- Set wb = Workbooks("cs111.xlsm")
- 如果不带后缀名会报错,下标越界。其实就是找不到表。
- 2 VBA里尽量用绝对路径
- vba 不会默认在当前文件夹找 文件/excel工作簿,而是去找VBA默认文件夹
- 所以,需要打开工作簿,需要带上绝对路径
- 如Workbooks.Open(path & "\" & "cs111.xlsm")
- 记得通过取path 把绝对路径拼出来就行
- 如果要打开和操作的文件在同一文件夹内,path = ThisWorkbook.path 否则就自己写绝对路径
- 3 语法
- Set wb = Workbooks.Open(path & "\" & "cs111.xlsm")
- 写法不能是 workbooks(path & "\" & "cs111.xlsm").open
- 4 直接直接打开其他工作簿
- Workbooks.Open(path & "\" & "cs111.xlsm")
- 或拆解为后面两句也行,先打开,再赋值
- 'Workbooks.Open (path & "\" & "cs111.xlsm")
- 'Set wb = Workbooks("cs111.xlsm")
Sub select_sheet()
Dim wb As Workbook
Dim sh As Worksheet
Rem Set wb = Workbooks("cs111.xlsm") '如果不带后缀名会报错,下标越界。其实就是找不到表。
Rem Set wb = Workbooks.Open("cs111.xlsm") 'vba 不会默认在当前文件夹找,而是去找VBA默认文件夹
path = ThisWorkbook.path 'VBA里尽量用绝对路径,记得通过取path 把绝对路径拼出来就行
Set wb = Workbooks.Open(path & "\" & "cs111.xlsm") '写法不能是 workbooks().open ?!
Rem 拆解为后面两句也行,先打开,再赋值
'Workbooks.Open (path & "\" & "cs111.xlsm")
'Set wb = Workbooks("cs111.xlsm")
For Each sh In wb.Sheets '不是 in wb !
sh.Select False '如果不设置select的 repalce参数(默认true),那么每次选择都会替代之前的
Next sh
Debug.Print ("all sheets are selected")
End Sub
工作表集合的选择
Sub t2()
Worksheets(Array("sheet3", "sheet2", "sum")).Select
Rem Worksheets("sheet3", "sheet2", "sum").Select '这样不行的
End Sub