VBA 关于select 和 selection,比如 如何一次选中多个工作表

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

发布了416 篇原创文章 · 获赞 46 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/xuemanqianshan/article/details/104159429
vba
今日推荐