VBA程序设计实例精讲word资料19页.docx
《VBA程序设计实例精讲word资料19页.docx》由会员分享,可在线阅读,更多相关《VBA程序设计实例精讲word资料19页.docx(29页珍藏版)》请在冰豆网上搜索。
![VBA程序设计实例精讲word资料19页.docx](https://file1.bdocx.com/fileroot1/2022-10/25/ad9deadb-d668-4fad-b245-44ab8ce9c565/ad9deadb-d668-4fad-b245-44ab8ce9c5651.gif)
VBA程序设计实例精讲word资料19页
第2章VBA程序设计
“教书先生”恐怕是市井百姓最为熟悉的一种称呼,从最初的门馆、私塾到晚清的学堂,“教书先生”那一行当怎么说也算是让国人景仰甚或敬畏的一种社会职业。
只是更早的“先生”概念并非源于教书,最初出现的“先生”一词也并非有传授知识那般的含义。
《孟子》中的“先生何为出此言也?
”;《论语》中的“有酒食,先生馔”;《国策》中的“先生坐,何至于此?
”等等,均指“先生”为父兄或有学问、有德行的长辈。
其实《国策》中本身就有“先生长者,有德之称”的说法。
可见“先生”之原意非真正的“教师”之意,倒是与当今“先生”的称呼更接近。
看来,“先生”之本源含义在于礼貌和尊称,并非具学问者的专称。
称“老师”为“先生”的记载,首见于《礼记?
曲礼》,有“从于先生,不越礼而与人言”,其中之“先生”意为“年长、资深之传授知识者”,与教师、老师之意基本一致。
2.1工作簿和工作表
我国古代的读书人,从上学之日起,就日诵不辍,一般在几年内就能识记几千个汉字,熟记几百篇文章,写出的诗文也是字斟句酌,琅琅上口,成为满腹经纶的文人。
为什么在现代化教学的今天,我们念了十几年书的高中毕业生甚至大学生,竟提起作文就头疼,写不出像样的文章呢?
吕叔湘先生早在1978年就尖锐地提出:
“中小学语文教学效果差,中学语文毕业生语文水平低,……十几年上课总时数是9160课时,语文是2749课时,恰好是30%,十年的时间,二千七百多课时,用来学本国语文,却是大多数不过关,岂非咄咄怪事!
”寻根究底,其主要原因就是腹中无物。
特别是写议论文,初中水平以上的学生都知道议论文的“三要素”是论点、论据、论证,也通晓议论文的基本结构:
提出问题――分析问题――解决问题,但真正动起笔来就犯难了。
知道“是这样”,就是讲不出“为什么”。
根本原因还是无“米”下“锅”。
于是便翻开作文集锦之类的书大段抄起来,抄人家的名言警句,抄人家的事例,不参考作文书就很难写出像样的文章。
所以,词汇贫乏、内容空洞、千篇一律便成了中学生作文的通病。
要解决这个问题,不能单在布局谋篇等写作技方面下功夫,必须认识到“死记硬背”的重要性,让学生积累足够的“米”。
一、创建和打开工作簿
一般说来,“教师”概念之形成经历了十分漫长的历史。
杨士勋(唐初学者,四门博士)《春秋谷梁传疏》曰:
“师者教人以不及,故谓师为师资也”。
这儿的“师资”,其实就是先秦而后历代对教师的别称之一。
《韩非子》也有云:
“今有不才之子……师长教之弗为变”其“师长”当然也指教师。
这儿的“师资”和“师长”可称为“教师”概念的雏形,但仍说不上是名副其实的“教师”,因为“教师”必须要有明确的传授知识的对象和本身明确的职责。
Workbooks.Add创建一个新的工作簿
SetNewBook=Workbooks.Add建工作簿,用对象变量表示
NewBook.SaveAsFilename:
="Test.xls"工作簿另存为
Workbooks.Open("D:
\Test.xls")打开工作簿
二、引用工作表
Worksheets
(1).Activate激活第一张工作表
Sheets(4).Activate激活四张工作表
Worksheets("Sheet1").Activate激活指定的工作表
Sheets("Chart1").Activate激活图表“Chart1”
2.2单元格和区域
一、引用单元格和区域
1.用A1样式记号引用单元格和单元格区域
表2.1使用Range属性的A1样式引用示例
引用
含义
Range("A1")
单元格A1
Range("A1:
B5")
从单元格A1到单元格B5的区域
Range("C5:
D9,G9:
H16")
多块选定区域
Range("A:
A")
A列
Range("1:
1")
第一行
Range("A:
C")
从A列到C列的区域
Range("1:
5")
从第一行到第五行的区域
Range("1:
1,3:
3,8:
8")
第1、3和8行
Range("A:
A,C:
C,F:
F")
A、C和F列
【例2.6】将工作表“Sheet1”中单元格区域A1:
D5的字体设置为加粗。
Sheets("Sheet1").Range("A1:
D5").Font.Bold=True
2.用编号引用单元格
【例2.7】将Sheet1上的单元格A6的Value属性设置为10
Worksheets("Sheet1").Cells(6,1).Value=10
【例2.9】清除活动工作簿中Sheet1上的所有单元格的内容
Worksheets("Sheet1").Cells.ClearContents
【例2.10】假设工作簿中Sheet1的A列是员工姓名(不超过50人),Sheet2的A列是员工姓名、B列是对应的电话号码。
现在需将所有员工的电话号码填写到Sheet1中的B列(注:
Sheet1中姓名“李三”在Sheet2中可能为“李三”,中间没有空格)。
3.引用行和列
【例2.11】将Sheet1上第一行单元格区域的Font对象Bold属性设置为True。
Worksheets("Sheet1").Rows
(1).Font.Bold=True
表2.2Rows和Columns属性的应用示例
引用
含义
Rows
(1)
第一行
Rows
工作表上所有的行
Columns
(1)
第一列
Columns("A")
第一列
Columns
工作表上所有的列
【例2.12】将活动工作表上的第一行、第三行和第五行的字体设置为加粗。
SetmyUn=Union(Rows
(1),Rows(3),Rows(5))
myUn.Font.Bold=True
4.用快捷记号引用单元格
【例2.13】将工作表“Sheet1”的单元格区域“A1:
B5”内容清除。
Worksheets("Sheet1").[A1:
B5].ClearContents
5.引用命名区域
【例2.14】将当前工作表中名为“AA”的单元格区域设置为30。
[AA].Value=30
【例2.15】用GoTo方法激活工作簿“Book1.xls”,选定区域“AA”,然后清除该区域内容。
Application.GotoReference:
="Book1.xls!
AA"
Selection.ClearContents
【例2.16】用ForEach...Next循环语句在命名区域中的每一个单元格上循环。
如果该区域中的任一单元格的值超过25,就将该单元格的颜色更改为黄色。
ForEachcInRange("AA")
Ifc.Value>25Then
c.Interior.ColorIndex=27
EndIf
Nextc
6.相对于其他单元格来引用单元格
【例2.17】将位于活动单元格下一行和右边三列的单元格的内容设置为双下划线格式。
ActiveCell.Offset(1,3).Font.Underline=xlDouble
7.用Range对象引用单元格
【例2.18】将Sheet1上的单元格区域A1:
D5赋予该变量,随后用该变量代替该区域对象,填充随机函数。
SetmyRange=Worksheets("Sheet1").Range("A1:
D5")
myRange.Formula="=RAND()"
8.引用多个单元格区域
【例2.19】清除当前工作表上三个区域的内容。
Range("C5:
D9,G9:
H16,B14:
D18").ClearContents
Range("MyRange,YourRange,HisRange").ClearContents
【例2.20】将组合区域的字体设置为加粗。
Setr1=Sheets("Sheet1").Range("A1:
B2")
Setr2=Sheets("Sheet1").Range("C3:
D4")
SetmyMR=Union(r1,r2)
myMR.Font.Bold=True
【例2.21】计算选定区域中的数目,如果有多个区域,就显示一则警告消息。
IfSelection.Areas.Count>1Then
MsgBox"请不要选择多个区域!
"
EndIf
二、在单元格区域中循环
【例2.22】将单元格区域C1:
C20所有绝对值小于10的数字都设置红色。
ForCnt=1To20
SetcurC=Worksheets("Sheet1").Cells(Cnt,3)
IfAbs(curC.Value)<10Then
curC.Font.ColorIndex=3
NextCnt
求区域末尾行号常用的方法:
r=Range("A1").End(xlDown).Row'求A1单元格数据区末尾行号
r=Cells(1,1).End(xlDown).Row'求A1单元格数据区末尾行号
r=Range("A65536").End(xlUp).Row'求A列数据区末尾行号
r=Cells(65536,1).End(xlUp).Row'求A列数据区末尾行号
r=Columns
(1).End(xlDown).Row'求A列数据区末尾行号
求区域末尾列号常用的方法:
c=Range("A1").End(xlToRight).Column'求A1单元格数据区末尾列号
c=Cells(1,1).End(xlToRight).Column'求A1单元格数据区末尾列号
c=Cells(1,256).End(xlToLeft).Column'求第1行数据区末尾列号
c=Rows
(1).End(xlToRight).Column'求第1行数据区末尾列号
【例2.23】将单元格区域A1:
D10所有绝对值小于10的数字都设置为红色。
ForEachcInWorksheets("Sheet1").Range("A1:
D10").Cells
IfAbs(c.Value)<10Then
c.Font.ColorIndex=3
Next
【例2.24】将活动单元格区域所有绝对值小于10的数字都设置为红色。
ForEachcInActiveCell.CurrentRegion.Cells
IfAbs(c.Value)<10Then
c.Font.ColorIndex=3
Next
三、选定和激活单元格
1.使用Select方法和Selection属性
【例2.25】将A1:
B1单元格中的内容加粗。
Range("A1:
B1").Select
Selection.Font.Bold=True
也可以用下面语句:
Range("A1:
B1").Font.Bold=True
2.选定活动工作表上的单元格
【例2.26】将Sheet1中的一行复制到Sheet2上。
Worksheets("Sheet1").Rows
(1).Copy
Worksheets("Sheet2").Select
Worksheets("Sheet2").Rows
(1).Select
Worksheets("Sheet2").Paste
3.激活选定区域内的单元格
【例2.27】选定一个区域,激活区域内的一个单元格,但并不改变选定区域。
Range("A1:
D4").Select
Range("B2").Activate
四、处理三维区域
【例2.28】设置三维单元格区域的边框格式。
Sheets(Array("Sheet2","Sheet3","Sheet5")).Select
Range("A1:
H1").Select
Selection.Borders(xlBottom).LineStyl