打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA常用代码解析(第四讲)



下面应一位粉丝的要求,开始把我以前的一些学习资料整理了一下,然后分20期发给各位有需要的朋友,您也可以索取源文件,邮箱:546039945@qq.com!

022 选择工作表的方法

VBA中需要激活或者选择某个工作表时使用Select方法或Activate方法,如下面的代码所示。

Sub SelectSh()

Worksheets('Sheet2').Select

End Sub

Sub ActivateSh()

Worksheets('Sheet2').Activate

End Sub

代码解析:

SelectSh过程使用Select方法选择“Sheet2工作表,而ActivateSh过程则使用Activate方法选择“Sheet2工作表,从表面看两者的作用是相同的,但是如果“Sheet2工作表是隐藏的,Activate方法可以正常运行,而Select方法将会出现错误。如果需要同时选中工作簿中的所有工作表,则只能使用Select方法而不能使用Activate方法,如下面的代码所示。

Sub SelectShs()

DimShs As Worksheet

ForEach Shs In Worksheets

Shs.Select False

Next

End Sub

Sub SelectSheets()

Worksheets.Select

End Sub

Sub ArraySheets()

Worksheets(Array(123)).Select

End Sub

代码解析:

SelectShs过程遍历工作表并使用带参数的Select方法选中所有工作表。应用于Worksheet对象的Select方法的语法如下:

Select(Replace)

参数Replace是可选的。如果该值为True,则用指定对象替代当前选定对象。如果该值为False,则延伸当前选定对象以包括任何以前选定的对象。

SelectSheets过程使用Worksheets集合的Select方法选中集合中所有的对象。

ArraySheets过程使用Array 函数返回工作簿中的前三张工作表并使用Worksheets集合的Select方法选中前三张工作表。

023 遍历工作表的方法

Excel应用中经常需要遍历工作簿中所有的工作表,有以下两种方法可以实现。

023-1 使用For...Next 语句

使用For...Next 语句遍历工作簿中所有的工作表,如下面的代码所示。

Sub ShCount1()

Dimc As Integer

Dimi As Integer

Dims As String

c =Worksheets.Count

Fori = 1 To c

s = s & Worksheets(i).Name & Chr(13)

Next

MsgBox'工作簿中含有以下工作表:' & Chr(13) & s

End Sub

代码解析:

ShCount1过程使用For...Next 语句遍历工作簿中所有的工作表,并用消息框显示所有的工作表名称。

5行代码根据Worksheet对象的Count属性返回工作簿中工作表的数量赋给变量c。应用于Worksheet对象的Count属性返回Worksheets集合中工作表的数量,语法如下:

expression.Count

6行代码开始For...Next语句循环。For...Next 语句以指定次数来重复执行一组语句,语法如下:

For counter = startTo end [Step step]

[statements]

[Exit For]

[statements]

Next [counter]

参数counter是必需的,用做循环计数器的数值变量。

参数start是必需的,循环计数器的初值。

参数end是必需的,循环计数器的终值。

参数step是可选的,环计数器的步长,缺省值为 1

参数statements是可选的,放在ForNext之间的一条或多条语句,它们将被执行指定的次数。

7行代码在For...Next循环中根据工作表的索引号取得所有工作表的名称赋给字符串变量s

023-2 使用For Each...Next 语句

使用For Each...Next语句遍历工作簿中所有的工作表,如下面的代码所示。

Sub ShCount2()

DimSh As Worksheet

Dims As String

ForEach Sh In Worksheets

s = s & Sh.Name & Chr(13)

Next

MsgBox'工作簿中含有以下工作表:' & Chr(13) & s

End Sub

代码解析:

ShCount2过程使用For Each...Next语句遍历工作簿中所有的工作表,并用消息框显示所有工作表名称。

4行代码使用For Each...Next语句遍历Worksheets集合中所有元素。For Each...Next语句针对一个数组或集合中的每个元素,重复执行一组语句,语法如下:

For Each element InGroup

[statements]

[Exit For]

[statements]

Next [element]

参数element是必需的,用来遍历集合或数组中所有元素的变量。

参数group是必需的,对象集合或数组的名称。

参数statements是可选的,针对对象集合或数组中的每一项执行的一条或多条语句。

5行代码将返回的工作表的名称赋给字符串变量s

024 在工作表中上下翻页

如果需要在工作簿的工作表中进行上下翻页,可以使用下面的代码。

Sub DownSheet()

Dimi As Integer

i =Worksheets.Count

If ActiveSheet.Index< i Then

Worksheets(ActiveSheet.Index + 1).Activate

Else

Worksheets(1).Activate

EndIf

End Sub

Sub UpSheet()

Dimi As Integer

i =Worksheets.Count

If ActiveSheet.Index> 1 Then

Worksheets(ActiveSheet.Index - 1).Activate

Else

Worksheets(i).Activate

EndIf

End Sub

代码解析:

DownSheet过程向下翻页,第312行代码使用Worksheets对象的Count属性取得工作表的数目,第4行到第7行代码根据Index属性判断活动工作表是否是工作簿中的最后一张工作表。如果活动工作表不是最后一张工作表则激活活动工作表的下一张工作表,否则激活第一张工作表。

UpSheet过程向上翻页,第13行到第16行代码根据Index属性判断活动工作表是否是工作簿中的第一张工作表。如果活动工作表不是第一张工作表则激活活动工作表的上一张工作表,否则激活最后一张工作表。

025 工作表的添加与删除

在工作簿中添加工作表使用Add方法,如下面的代码所示。

Sub Addsh()

DimSh As Worksheet

WithWorksheets

Set Sh = .Add(after:=Worksheets(.Count))

Sh.Name = '数据'

EndWith

End Sub

代码解析:

Addsh过程使用Add方法在工作簿中新建“数据”工作表。

2行代码声明变量Sh为工作表对象。

4行行代码使用Add方法在工作簿的最后新建“数据”工作表。

Add 方法应用于SheetsWorksheets对象时新建工作表、图表或宏表,语法如下:

expression.Add(BeforeAfterCountType)

参数Before是可选的,指定工作表对象,新建的工作表将置于此工作表之前。

参数After是可选的,指定工作表对象,新建的工作表将置于此工作表之后。

如果Before After两者均省略,则新建的工作表将插入到活动工作表之前。

参数Count可选,要新建的工作表的数目。默认值为 1

参数Type可选,指定新建的工作表类型。

5行代码将添加的工作表重命名为“数据”。

如果需要在工作簿中批量添加工作表,可以使用下面的代码。

Sub Addsh_2()

Dimi As Integer

Dimsh As Worksheet

Fori = 1 To 10

Set sh = Sheets.Add(after:=Sheets(Sheets.Count))

sh.Name = i

Next

End Sub

代码解析:

Addsh_2过程使用For...Next 语句和Add方法在工作簿中添加10张工作表并将添加的工作表依次重命名。

在使用以上代码往工作簿中添加工作表时,如果工作簿中已存在相同名称的工作表,运行时会发生错误,代码中断。

为了避免此错误的发生,可以在添加前先删除所有的工作表,如下面的代码所示。

Sub Delsh()

Dimsh As Worksheet

ForEach sh In ThisWorkbook.Sheets

If sh.Name <> '工作表的添加与删除' Then

Application.DisplayAlerts = False

sh.Delete

Application.DisplayAlerts = True

End If

Next

End Sub

代码解析:

Delsh过程使用Delete方法删除工作簿中除了“工作表的添加与删除”工作表以外所有的工作表。

3行代码使用For Each...Next语句遍历代码所在工作簿中所有的工作表。

4行到第7行代码判断工作表名称是否为“工作表的添加与删除”,如果不是则使用Delete方法删除。其中第5行代码将Application对象的DisplayAlerts属性设置为False,使删除时不显示系统警告对话框。

6行代码使用Delete方法删除工作表,应用于工作表对象的Delete方法删除指定的对象,语法如下:

expression.Delete

参数expression是必需的,该表达式返回“应用于”列表中的对象之一。

在运行添加工作表代码前先删除工作簿中的工作表虽然可以避免同名错误,但也可能误删除有用的工作表,因此更为严谨的方法是在添加前先判断工作簿中是否存在相同名称的工作表,然后再进行下一步的操作。对于单张工作表可以使用下面的代码。

Sub Addsh_3()

DimSh As Worksheet

ForEach Sh In Worksheets

If Sh.Name = '数据' Then

MsgBox '工作簿中已有”“数据”“工作表,不能重复添加!'

Exit Sub

End If

Next

WithWorksheets

Set Sh = .Add(after:=Worksheets(.Count))

Sh.Name = '数据'

EndWith

End Sub

代码解析:

Addsh_3过程在使用Add方法在工作簿中新建“数据”工作表时首先判断工作簿中是否存在“数据”工作表,如果已存在“数据”工作表则不运行添加工作表的代码而只显示一个消息框进行提示。还可以使用错误处理语句来绕过错误,如下面的代码所示。

Sub Addsh_4()

Dimsh As Worksheet

On ErrorGoTo line

WithWorksheets

Set sh = .Add(after:=Worksheets(.Count))

sh.Name = '数据'

EndWith

ExitSub

line:

MsgBox'工作簿中已有”“数据”“工作表,不能重复添加!'

Application.DisplayAlerts= False

Worksheets(Worksheets.Count).Delete

Application.DisplayAlerts= True

End Sub

代码解析:

Addsh_4过程是先使用Add方法在工作簿中新建“数据”工作表,如果工作簿中已存在同名的工作表则使用GoTo语句转移到指定的line行处进行提示并删除已添加还没有重命名的工作表,也就是工作簿中最后一张工作表。

如果是批量添加工作表,使用上述方法时,添加工作表和已有工作表重名时,后面即使没有重名的工作表也不能添加,所以应先使用错误处理语句忽略错误,待全部添加好以后再删除多余的工作表,如下面的代码所示。

Sub Addsh_5()

Dimi As Integerarr

Dimsh As Worksheet

On ErrorResume Next

arr= Array(12345678910)

Fori = 0 To UBound(arr)

With Worksheets

Set sh = .Add(after:=Sheets(.Count))

sh.Name = arr(i)

End With

Next

Application.DisplayAlerts= False

ForEach sh In Worksheets

If sh.Name Like 'Sheet*' Thensh.Delete

Next

Application.DisplayAlerts= True

End Sub

代码解析:

Addsh_5过程使用Add方法在工作簿中添加10张工作表并重新命名为110,如果工作簿中已有相同名称的工作表则不添加。

4行代码错误处理语句,当发生重名错误时忽略错误,继续添加工作表。

5行到第11行代码在工作簿中添加10张工作表并重新命名为110,如果工作簿中已有相同名称的工作表则忽略重命名时发生的错误,此时工作簿中添加的工作表会以系统赋与的名称命名,如“Sheet1”。

12行到第15行代码使用For Each...Next语句遍历工作簿中所有的工作表,将工作簿中凡是以“Sheet”开头的工作表删除。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
给EXCEL表快速建立目录
每日Excel分享(VBA)| 数据合并?其实很简单(三)
如何通过VBA实现将一个工作簿中多个指定工作表另存为一个无公式的新工作簿
怎么批量修改Excel工作表名?用VBA批量修改工作表名称
excel vba复制工作表
VBA编程问答(第1辑)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服