上节,我们讲到了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位学生。小编需要做多个工作表,每个工作表里面录入学生的学号(其它的姓名,班级,成绩本节课暂时不录入),并且每个学生都占用一张工作表。工作表如下:
![cdb69c08edbe33f5323a68a968fd6c8f.png](https://i-blog.csdnimg.cn/blog_migrate/f530dd8344bb166ed4197b7da9d05eb8.jpeg)
小编瞎编的成绩单
我们要做的就是,复制一个单元格,重命名为其学号,然后再填入学号,然后继续复制工作表。假设学号以001开头,088结尾。
我们可以先试着复制一张表格,填入一个学号试试。把这个过程录制下来,看看宏是怎么写的。总共分为以下几个步骤。
1.设置学号栏的单元格格式为文本(非文本没法填入0开头的数字)
2.填入学号“001”
3.复制“001”工作表,并将它放到最后面
4.重命名工作表“001(2)”为“002”
5.在学号单元格填入学号
Sub 看看宏怎么写的()'' 看看宏怎么写的 宏'Range("D2").Select '选中D2单元格Selection.NumberFormatLocal = "@" '将单元格格式设置为文本ActiveCell.FormulaR1C1 = "001" '输入框输入001Sheets("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" '填入数据002End Sub
可以看出,基本我们要循环利用的就是步骤3,4,5了
但是问题来了,我们怎么样,让001变成00i(i代表变量)?
如果是数字类型的话,我们可以利用a=000+i,但是,这,加起来后,不一定是三位数呀。
而且,它是文本类型,也就是字符串类型(也就是带双引号的),那他如何加入变量呢?
这里我们要提到一个vba常用的符号“&”——连接符号
在excel表格中,我们常用符号“&”来连接文本单元格,举个栗子:比如我们要将三个文本类型的单元格拼接到一个单元格里面,我们可以这么写
![d089b48a2c10e4ec264a1f3e515592b0.png](https://i-blog.csdnimg.cn/blog_migrate/6a061997b9272706ccea72ce391efe50.jpeg)
利用与符号,可以轻松连接字符串与变量。我们只需要,把原来的“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)NextEnd Sub
友情提醒:worksheets(),括号里面可以写数字,代表第几个工作表,也可以写双引号,代表工作表的名称,如果要重命名,建议用数字代表工作表。
运行这个宏后,发现基本ok。但是问题又来了。如果i循环到9的时候,最后两行代码”00″ & (i + 1) 是不是不适用了,这个时候就变成“0010”,所以我们要加入一个if判断。如果为9,后面的代码就改成 “0″ & (i + 1) ,如果为10的话,前面的两个 “00” & i 也不对了,不存在这个表格。所以我们这里也要加入一个if判断。最后代码如下:
![5320971249aef2954be8b7c32d3f0e87.png](https://i-blog.csdnimg.cn/blog_migrate/bfb6a99caf8d8c6a8433913ab05f7219.jpeg)
代码较多,这里就不粘贴了。需要的请关注公众号回复”代码8“获取代码以及示范表格链接。
注意”&“除了作为连接符号外,还有或的意思。比如if i>2 & i<0,就是就是两者同时满足一个即可。
而and 就是要两者同时满足,才能运行。
运行效果如下:
![7e4e316470480c4c085cdb8de26cd591.png](https://i-blog.csdnimg.cn/blog_migrate/faf1702d450db1690f2ad856211ebe7a.jpeg)
今天就到这里了,我们下期再见。
前文回顾:
第七节:了解Excel基本结构(1)
第六节:VBA编程基础(续)
第五节:VBA编程基础
第四节:如何录制宏
第三节:运行一个宏试试吧
第二节:使用宏所需要的环境
第一节:什么是vba
下一节:
第九节:了解Excel结构(3)