vba编程教程

第八节:了解Excel基本结构(2)

2019-06-20  本文已影响0人  潮办公

上节,我们讲到了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 就是要两者同时满足,才能运行。

运行效果如下:

好了,今天的课程就讲到这里,喜欢的小伙伴欢迎扫码关注右边的公众号,我们下期再见。

上一篇下一篇

猜你喜欢

热点阅读