1 select方法
1.1 Range.Select 方法 (选择对象。)
- 应用于Shape 和 ShapeRange对象的 Select方法。
- 选定指定的对象。
- 语法
- expression.Select(Replace),expression 必需。该表达式返回以上一个对象。
- 表达式 一个代表 Range 对象的变量。
- Replace Variant 类型,可选。在添加图形时,如果为 True,就替换选定内容;如果为 False,就将新图形添加至选定内容中。应用于“应用于”列表中所有其他对象的 Select方法。
- 返回值:Variant
- 说明:要选择单元格或单元格区域,请使用 Select 方法。要使单个单元格成为活动单元格,请使用 Activate 方法。
1 如何一次选中多个工作表
1.0 excel 手动操作,选中多个表
- 选择多个工作表: 按住 ctrl + 多个sheet
- 激活某个工作表:每次只能激活 activate 一个sheet 成为 activesheet,总是只有1个 activeworkbook 和activesheet
1.1 代码1:一次选中几个固定数量的工作表(没有隐藏的sheet不会报错)
- 用固定的数组大小才可以?并不是,只是这样,出错的可能性比较小
Sub test_select2()
Dim arr1()
ReDim arr1(1 To 3)
For i = 1 To 3
arr1(i) = Worksheets(i).Name
Next
Worksheets(arr1).Select
End Sub
1.2 代码2:选中的所有的工作表,如果其中有隐藏的sheet会容易出错
- 如果工作簿里存在 隐藏工作簿,没有取消隐藏,用这个代码就会报错:sheets的select方法无效
- 应该是隐藏的工作表 sheet 无法被选中导致
- 所以遇到这个问题先检查下:是否有某些 sheet 被隐藏,却在代码里要求被选中
Sub test_select2()
Dim arr1()
ReDim arr1(1 To Worksheets.Count)
For i = 1 To Worksheets.Count
arr1(i) = Worksheets(i).Name
Next
Worksheets(arr1).Select
End Sub
1.3 可以实现选中多个sheet的,多种方法
方法1
Sub test_select3()
Dim arr1()
ReDim arr1(1 To Worksheets.Count)
For i = 1 To Worksheets.Count
arr1(i) = Worksheets(i).Name
Next
Worksheets(arr1).Select
End Sub
方法2
Sub test_select4()
Worksheets.Select
End Sub
方法3
- 如果不用 select false 那么最后只会选中一个 worksheet
- select ture 默认值为 ture 表示 替换内容
Sub test_select5()
Dim i As Object
For Each i In Worksheets
i.Select False '如果不加 select参数false 每次都只选中1个sheet
Next
End Sub
2 selection一般只指sheet内的内容,常见的是range
2.1 selection
- Application.Selection 属性
- 为 Application 对象返回在活动窗口中选定的对象。
- 语法
- 表达式.Selection
- 表达式 一个代表 Application 对象的变量。
- 返回的对象类型取决于当前所选内容(例如,如果选择了单元格,此属性将返回 Range 对象)。如果未选择任何内容,Selection 属性将返回 Nothing。
- 在不使用对象识别符的情况下,使用此属性等效于使用 Application.Selection。
2.2 selection 看起来是 select 了什么就选了什么就是什么,但实测不是?
- selection 本身是一个属性,其父对象是:application,windows
- 理论上但它返回值是对象,选中什么,就返回什么对象----但实测不是-------------可能还需要验证
- 产生selection 属性的方法是:select,当然,用户也可以用鼠标、键盘等操作产生
实测 worksheet.select 但selection 却还是range
Sub t1()
Worksheets("sheet4").Select
MsgBox "The selection object type is " & TypeName(Selection)
End Sub
2.2 selection一般情况下都只sheet内的range
- select
- select可以选中 wb sh range等等
- 实测 selection内容,并不天然的 = XX .select
- selection 专指sheet内的range
测试代码
Sub test_select3()
Dim arr1()
ReDim arr1(1 To Worksheets.Count)
For i = 1 To Worksheets.Count
arr1(i) = Worksheets(i).Name
Next
Worksheets(arr1).Select
'虽然 select了多张工作表,但是selection并不是指select的内容 worksheet
'下面的会报错
'Dim j As Worksheet
'For Each j In Selection
' Debug.Print j.Name
'Next
'看起来selection 特指 sheet内的选取区域,就是特指range
Selection.Font.Color = vbRed
Selection.Font.Bold = True
Selection.Interior.ColorIndex = 6
End Sub
2.3 selection 也可能是sheet内的其他内容
Sub test117()
MsgBox "The selection object type is " & TypeName(Selection)
End Sub
3 selection 的用法
3.1 selection相关的内容
- xxx.select 得到 selection 对象
-
通过语句得到该Selection对象:var selection = document.getselection()
- Selection.Copy
- Selection.ClearContents
3.2 selection 如果选择了区域,直接当range 使用
Sub test1003()
Range("a3:b5").Select
For Each i In Selection
Debug.Print "cells(" & i.Row & "," & i.Column & ")=" & i
Next
End Sub
3.3 Selection.Copy 方法
- selection.copy 到对应的单元格,类偏移效果
- 如果目标区域更小,则也会平铺赋值 原区域的内容
- 如果目标区域更大,则会平铺赋目标区域所有区域全部赋值为 原区域的内容
Sub test91()
Range("a3:b6").Select
Selection.Copy Range("d1")
Selection.Copy Range("d7:e10")
Selection.Copy Range("d13:g20")
End Sub