VBA学习(工作表对象的操作)

前面说到,打开了EXCEL文件后,你就可以为所欲为,做自己想做的事情了。
今天就来说说这个事儿。
还记得上篇提到的这段代码吧:

1
2
3
4
5
6
7
8
9
10
Dim str()
Dim wb As Workbook
Dim i As Integer
str = Application.GetOpenFilename("Excel文件,*.xls*", , "请选择")
For i = LBound(str) To UBound(str)
Set wb = Workbooks.Open(str(i))
'###################'这里针对打开的文件进行操作'##########
wb.Save
wb.Close
Next

上面####的区域就可以把你相对EXCEL做的操作填上了。
比如:Sheets("网络性能验收1-CQT").Range("g8") = "OK"意思就是将EXCEL文件中名叫“网络性能验收1-CQT”的表中单元格g8里填上OK。(当然,这里的OK可以换成你想填写的任何数据)
比如:Sheets("网络性能验收1-CQT").Range("g8") = ""意思是将EXCEL文件中名叫“网络性能验收1-CQT”的表中单元格g8里的内容清空。

上面的是简单的操作,当然也有稍微复杂的,比如:Sheets("汇总表").Range("a" & Rows.Count).End(xlUp).Row。不着急,咱先看看简单一些的,其他基本概念都是一样的,其他的内容都是在此基础上的叠加而已。

如果对EXCEL不陌生的话,应该知道EXCEL文件其实应该叫EXCEL工作簿文件,英文就是Workbook,工作簿中有工作表(Worksheet),工作表里有单元格(Range),而单元格里面就可以编辑数据了。
这下是不是有点明白Sheets("网络性能验收1-CQT").Range("g8") = "OK"为什么能够在单元格g8写上OK了吧。
其实这段代码写全了,应该是:wb.Sheets("网络性能验收1-CQT").Range("g8") = "OK",把里面的.换成“的”就相对好理解了。
即:wb的工作表”网络性能验收1-CQT”中的单元格g8填入OK。
wb是啥?前面定义了啊:Dim wb As Workbook,哦,wb就是一个工作簿文件。sheet是啥?工作簿里的工作表啊,那为什么不是worksheet?嗯,这是简写,也可以说是工作表的小名吧,当然,写成worksheet肯定也是对的。
这样一来,是不是完全对上号了:wb.Sheets("网络性能验收1-CQT").Range("g8") = "OK"翻译为自然语言就是在wb的worksheet”网络性能验收1-CQT”中的单元格g8填入OK。
当然,咱们打开EXCEL工作簿文件后,能做的远不止这个,那还有哪些操作呢?
前面说了,你可以“为所欲为”,其实意思就是手工操作时,你能的那些事儿,VBA全部可以实现。所以回顾下平时你对EXCEL做了什么?
在这里,咱们一起总结盘点一下:
工作簿是由工作表构成的,而工作表里包括了单元格,其实无论是工作簿、工作表还是单元格,在VBA眼里,都是一个个对象,什么意思呢?就是你可以对它们“为所欲为”,做想做的操作。
比如对于工作表对象,你可以在工作簿文件中:
1、增加工作表(Add)
2、删除工作表(Delete)
3、选择工作表(Select)
4、复制工作表(Copy)
当然也可以统计工作簿中的工作表数量(Count),修改工作表的名字(Name)…
以上这些若是手动操作,相信都很熟悉了吧,那么VBA又会如何来实现呢?白话一些就类似于,把这些操作翻译成VBA语言是什么样的呢,其实这个和中文翻译成英文是一样的道理,只是英文给老外看,VBA语言是给电脑看,毕竟让人家帮你干活,你总得交代清楚做什么吧。
好,咱们先来一一对比下,咱们熟悉的手工操作与相应的VBA语言,有何不同:

1、增加一张工作表
手动操作:选中一个当前存在的工作表,然后右键插入即可,此时就会在原有工作表的前面新建了一张新表;
VBA语言:Sheets.Add实现上述同样的效果,但如果想要在原有表的后面插入一张新表,该怎么办呢?代码只需稍稍改动一下:Sheets.Add after:=Sheet1(其中sheet1为当前表)
1.1 通常情况下,新建一张表,会给它起个名字,对应的代码就是:sheet2.name="新建工作表"(sheet2是新创建的工作表);
1.2 上述操作只是增加一张表,若想同时批量增加多张表,怎么做?
Sheets.Add Count:=6意思就是新建6张工作表,但这样建表有个局限,就是表名是自动生成的,如果想让新建的表格按照一定的规则命名,那就用到之前说到的for循环了For ...Next ...
比如:你想新建6张表,并按照“第X张表”的格式命名,代码是这样

1
2
3
4
5
6
7
Sub test()
Dim i As Integer
For i = 1 To 6
Sheets.Add
ActiveSheet.Name = "第" & i & "张表"
Next
End Sub

2、删除一张工作表
手动操作:选中一个当前存在的工作表,然后右键点击“删除”。当然,当前的工作簿文件中至少存在2个工作表才能这么操作,原因相信你懂的;
VBA语言:Sheet2.Delete(原有工作簿中存在2个工作表:sheet1和sheet2,此操作是将sheet2工作表删除)
删除工作表时,会弹出一个警告对话框,手动操作时,都是一一点击“确定”。
但是VBA实现删除操作,如果还是需要手动删除的话,则变得半自动了,无法充分发挥编程语言的作用,所以此处有必要提起这么一段代码:Application.DisplayAlerts = False(意思就是将主程序的显示告警框设置为false,也就是不显示),当然,表格删除完成后,别忘再恢复:Application.DisplayAlerts = True

3、选择一张工作表
手动操作:左键选中即可完成此操作;
VBA语言:Sheet4.Select(假如工作簿中存在6个工作表,此操作就是选中表名为“sheet4”的那张表)

4、复制工作表
手动操作:选中一个当前存在的你想要复制的工作表,然后右键点击“移动或复制”,随后勾选“建立副本”,复制后新生成的副本,具体放在什么位置可选(可以选择不同工作簿,也可以直接在当前工作簿中插入)
VBA语言:复制的工作表的工作表的操作,VBA实现时,需要注意:
Sheet6.Copy是对sheet6进行复制,但是会新建一个工作簿文件,然后将复制后的sheet6副本放在里面;
Sheet6.Copy after:=Sheet10才是在当前工作簿的sheet10工作表后面插入sheet6的副本

好了,以上就是EXCEL工作表涉及到的基本操作所对应的VBA代码,感觉怎样?动手试试吧。