第八节:了解Excel基本结构(2)
上节,我们讲到了Excel五大结构的range和value结构,也就是单元格和单元格属性。这节,我们开始分析worksheet结构。
一、了解Worksheet引用方法
在将之前,我们先录一个宏,测试一下。录制宏的内容,就是在sheet2工作表的range(“A1”)单元格写入”1″,录制完成的代码如下:
Sub 测试sheet2()
'
' 测试sheet2 宏
'
'
Worksheets("Sheet2").Select '选中sheet2工作表
Range("A1").Select '再选中A1单元格
ActiveCell.FormulaR1C1 = "1" '在输入框输入"1"
End Sub
从上面的代码可以看出,工作表在引用的时候,采用的不是worksheet,而是用worksheets。那么问题来了,两者有啥区别呢?
Worksheet 与 Worksheets
worksheet:单指一张工作表,它只是单独指一个名词。
worksheets:指很多个工作表的集合,只有使用它,才可以引用工作表
举个栗子,我要找某个人,worksheet就是指人,worksheets,就是某些人的集合,比如某个班,某个村。只有通过worksheets,才能正确引用工作表。同理,Workbook也要通过Workbooks才能引用。
二、实战篇——写一个批量复制工作表的宏
假设现在小编正在做一个老师,需要把学生的学号,成绩单录入,打印出来。假设班级上共有88位学生。小编需要做多个工作表,每个工作表里面录入学生的学号(其它的姓名,班级,成绩本节课暂时不录入),并且每个学生都占用一张工作表。工作表如下:
小编瞎编的成绩单
我们要做的就是,复制一个单元格,重命名为其学号,然后再填入学号,然后继续复制工作表。假设学号以001开头,088结尾。
我们可以先试着复制一张表格,填入一个学号试试。把这个过程录制下来,看看宏是怎么写的。总共分为以下几个步骤。
1.设置学号栏的单元格格式为文本(非文本没法填入0开头的数字)
2.填入学号“001”
3.复制“001”工作表,并将它放到最后面
4.重命名工作表“001(2)”为“002”
5.在学号单元格填入学号
Sub 看看宏怎么写的()
'
' 看看宏怎么写的 宏
'
Range("D2").Select '选中D2单元格
Selection.NumberFormatLocal = "@" '将单元格格式设置为文本
ActiveCell.FormulaR1C1 = "001" '输入框输入001
Sheets("001").Select '选中工作表"001"
Sheets("001").Copy After:=Sheets(1) '复制单元格,并且把他丢到工作表1后面
Sheets("001 (2)").Select '选中新复制的001(2)工作表
Sheets("001 (2)").Name = "002" '将它的工作表重命名为"002"
Range("D2").Select '选中D2单元格 ActiveCell.FormulaR1C1 = "002" '填入数据002
End Sub
可以看出,基本我们要循环利用的就是步骤3,4,5了
但是问题来了,我们怎么样,让001变成00i(i代表变量)?
如果是数字类型的话,我们可以利用a=000+i,但是,这,加起来后,不一定是三位数呀。
而且,它是文本类型,也就是字符串类型(也就是带双引号的),那他如何加入变量呢?
这里我们要提到一个vba常用的符号“&”——连接符号
在excel表格中,我们常用符号“&”来连接文本单元格,举个栗子:比如我们要将三个文本类型的单元格拼接到一个单元格里面,我们可以这么写
利用与符号,可以轻松连接字符串与变量。我们只需要,把原来的“001”改成“00”&i即可。
Sub 看看宏怎么写的()
'
' 看看宏怎么写的 宏
'
'
Dim i As Integer '定义i为整数
For i = 1 To 1 '写个循环,为后期做准备
Sheets("00" & i).Select '选中工作表"00i"
Sheets("00" & i).Copy After:=Sheets(i) '复制单元格,并且把他丢到工作表i后面
Sheets(i + 1).Select '选中第二i+1个工作表
Sheets(i + 1).Name = "00" & (i + 1) '将它的工作表重命名为00(i+1)
Range("D2").Select '选中D2单元格
Selection.NumberFormatLocal = "@" '设置为文本,以防万一
ActiveCell.FormulaR1C1 = "00" & (i + 1) '填入数据00(i+1)
Next
End Sub
友情提醒:worksheets(),括号里面可以写数字,代表第几个工作表,也可以写双引号,代表工作表的名称,如果要重命名,建议用数字代表工作表。
运行这个宏后,发现基本ok。但是问题又来了。如果i循环到9的时候,最后两行代码”00″ & (i + 1) 是不是不适用了,这个时候就变成“0010”,所以我们要加入一个if判断。如果为9,后面的代码就改成 “0″ & (i + 1) ,如果为10的话,前面的两个 “00” & i 也不对了,不存在这个表格。所以我们这里也要加入一个if判断。最后代码如下:
代码较多,这里就不粘贴了。需要的请关注公众号回复”代码8“获取代码以及示范表格链接。
注意”&“除了作为连接符号外,还有或的意思。比如if i>2 & i<0,就是就是两者同时满足一个即可。
而and 就是要两者同时满足,才能运行。
运行效果如下:
好了,今天的课程就讲到这里,喜欢的小伙伴欢迎扫码关注右边的公众号,我们下期再见。