Excel VBA范例大全
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 多表单元格选择

工作中常因数据较多而将数据存于多个工作表中,或者因工作表内容相同但属于不同分类而将数据分存于多表。在对工作表数据或者格式做修改时往往需要对多个表进行同样的操作,对一个个工作表进行修改就会事倍功半。本章中将通过三个不同方面的运用讲解多表操作之技巧。

● 实例15同时选择三个表的B2∶B11区域

● 实例16选择本表以外所有工作表的B2∶B11区域

● 实例17选中名字包含“星期”的工作表的已用区域

实例15 同时选择三个表的B2∶B11区域

【技巧说明】 同时选择三个表的B2∶B11区域。

【案例介绍】 如图1.33所示之资料表,三个表存放三组员工资料。现需将三个表中的员工“工号”全部加粗显示,则需先选中三个表的“工号”区域。

图1.33 资料表

【案例实现】 操作步骤如下:

[1] 使用快捷键Alt+F11进入VBE(Visual Basic Editor)环境。

[2] 单击菜单【插入】\【模块】,打开模块代码窗口。

[3] 在右边代码窗口输入以下代码:

Sub选择三个表的B2到B11()
    Sheets(Array("A组", "B组", "C组")).Select '组合工作表
    Sheets("A组").Activate                '激活第一个表
    Range("B2:B" & [b1048576].End(xlUp).Row).Select  '选择目标区域
End Sub

[4] 关闭VBE窗口返回到工作表。

[5] 使用快捷键Alt+F8调出运行宏窗口,然后单击“执行”按钮,三个表的B2∶B11区都已被选中。

提示

本实例参见光盘样本:..\第1部分\实例15.xlsm。

【相关知识说明】

Array(arglist):表示数组,参数arglist是一个用逗号隔开的列表,用于给数组赋值。本例中将三个工作表表名组合为一个数组赋值给Array。

实例16 选择本表以外所有工作表的B2∶B11区域

【技巧说明】 选择本表以外所有工作表的B2∶B11区域。

【案例介绍】 仍以实例15之数据为例,假设当前表为“A组”,则选“B组”和“C组”的B2∶B11区域。

【案例实现】 操作步骤如下:

[1] 使用快捷键Alt+F11进入VBE(Visual Basic Editor)环境。

[2] 单击菜单【插入】\【模块】,打开模块代码窗口。

[3] 在右边代码窗口输入以下代码:

Sub选择本表以外所有工作表()
    Dim sh As Worksheet, n%, i%, arr
    n=ThisWorkbook.Sheets.Count
    ReDim arr(1 To n)                '声明数组
    For Each sh In ThisWorkbook.Sheets  '循环检查工作表表名
      If sh.Name <> ActiveSheet.Name Then  '仅记录不等于本表名称之表
        i=i+1
        arr(i)=sh.Name            '重定义数组为工作表表名
      End If
    Next
    If i > 0 Then
      ReDim Preserve arr(1 To i)
      ThisWorkbook.Sheets(arr).Select '组合工作表
      ActiveSheet.[B2:B11].Select    '选择区域
    End If
End Sub

[4] 关闭VBE窗口返回到工作表。

[5] 使用快捷键Alt+F8调出运行宏窗口,然后单击“执行”按钮,则“B组”和“C组”表的B2∶B11都已被选中。

提示

本实例参见光盘样本:..\第1部分\实例16.xlsm。

【相关知识说明】

(1)ActiveSheet:代表活动工作簿中或指定的窗口或工作簿中的活动工作表(最上面的工作表)。如果没有活动的工作表,则返回Nothing。后缀.Name即取得工作表的名称。

(2)ReDim:在过程级别中使用,用于为动态数组变量重新分配存储空间。

实例17 选中名字包含“星期”的工作表的已用区域

【技巧说明】 选中名字包含“星期”的工作表的已用区域。

【案例介绍】 如图1.34所示之产量表,有的工作表名称中包含“星期”二字,有的则没有,现需要对包含“星期”二字之工作表下已用区域进行选择。

【案例实现】 操作步骤如下:

[1] 使用快捷键Alt+F11进入VBE(Visual Basic Editor)环境。

[2] 单击菜单【插入】\【模块】,打开模块代码窗口。

[3] 在右边代码窗口输入以下代码:

Sub多表选择()
    Dim Wks As Worksheet, shtCnt As Integer
    Dim arr() As Variant, i As Integer
    shtCnt=ThisWorkbook.Sheets.Count   '取得工作表总数
    ReDim arr(1 To shtCnt)             '预定义数组
    For Each Wks In ThisWorkbook.Sheets  '在所有工作表中循环
      If Wks.Name Like "星期*" Then    '如果工作表名称以“星期”开头
      i=i+1
      arr(i)=Wks.Name          '将工作表名称存进数组
    End If
    Next
    If i > 0 Then                    '如果存在符合条件的工作表名称
    ReDim Preserve arr(1 To i)      '重定义数组
    ThisWorkbook.Sheets(arr).Select  '组合符合条件的所有工作表
    ActiveSheet.UsedRange.Select  '选择已用区域
    End If
End Sub

[4] 关闭VBE窗口返回到工作表。

[5] 光标定位于任意单元格,使用快捷键Alt+F8调出运行宏窗口,然后单击“执行”按钮,除第一个表外所有包含“星期”的工作表都已选中,如图1.35所示。

图1.34 产量表

图1.35 选中后的产量表

提示

本实例参见光盘样本:..\第1部分\实例17.xlsm。

【相关知识说明】

Like:用来比较两个字符串。用法为 “字符一”Like “字符二”,支持通配符。

通配符包括“*”和“?”,“*”表示任意字符;“?”表示单个字符。本例中“星期*”表示以“星期”开头的字符串,字符串长度不限;若是“星期?”,则表示以“星期”开头,且长度为3的字符串。