首页 > 编程知识 正文

excel vba实例教程,wpsvba编程实战教程

时间:2023-05-06 10:37:39 阅读:10622 作者:886

文章目录准备VBA宏编程打开打开宏功能打开“开发工具”选项卡VBA编程示例任务介绍文件宏的全局宏

VBA宏编程概述

VBA编程是Office系列软件中搭载的编程功能。 也就是说,不仅是Excel,Word和PPT也可以进行VBA编程。 “”可以理解为一系列自动化程序,可以通过运行一个宏来执行相应的操作序列。 创建宏主要有两种方法。 一个是录制宏,即录制人的操作,如果需要,可以在3358www.Sina.com/自动重复这些操作。 另一种是用本文介绍的VBA编程自己写宏。

准备工作Excel默认情况下未打开宏功能和VBA编程功能,必须打开。

要打开宏功能,请单击【文件】 rightarrow 【选项】 rightarrow 【信任中心】 rightarrow 【信任中心设置】 rightarrow

打开“开发工具”选项卡,单击【文件】 rightarrow 【选项】 rightarrow 【自定义功能区】找到“开发工具”,并将其添加到右边

VBA编程示例任务将此任务分为两个shelter进行介绍。 其中,掩体1是学生的分数,掩体2对掩体1的信息进行分类统计。 具体如下。

第一个表命名为“分数”,第二个表命名为“统计”

文件宏单击【开发工具】 rightarrow 【Visual Basic】

左侧有如上图所示的目录,双击【Sheet1】、【Sheet2】、【ThisWorkbook】都可以打开编程窗口,但程序的作用范围不同。 因为需要操作两个Sheet,所以双击【ThisWorkbook】将其打开。 您可能在这里猜到了,工作簿是指这个Excel文件。 下一个方案Sub分类统计(Dim maleCtr As Integer '男子人数Dim femaleCtr As Integer '女子人数Dim daCtr As Integer '名字是末尾人数Dim maleSum As Double '男子总分dim female ss e '女子总分d imiasintegeri=2dowhilenotisempty (sheet1. range ) (a'I ) ) Dim name,sexasstringdimscoreasdoublename=sheet If sex='男' thenmalectr=male CTR1male sum=malesumscoreelsefemalectr=female CTR1female sum=femalesumscoreeendififnamelike达是通配符daCtr=daCtr 1 End If i=i 1'中的下一行loopsheet2.range('a2 ' ).Numb

erFormatLocal = "0" '设置数字格式为没有小数 Sheet2.Range("B2").NumberFormatLocal = "0.##" '设置数字格式为小数点后两位,非零才显示 Sheet2.Range("C2:E2").NumberFormatLocal = "0.00" '设置数字格式为小数点后两位且补零 Sheet2.Range("A2") = maleCtr Sheet2.Range("B2") = femaleCtr Sheet2.Range("C2") = daCtr Sheet2.Range("D2") = maleSum / maleCtr Sheet2.Range("E2") = femaleSum / femaleCtr End Sub 下面对程序进行一些说明,首先Sub 宏名称()...End Sub里“宏名称”改成任意你想要的宏名称即可,但不可以有空格。Dim 变量名 As 数据类型是Visual Basic语言定义变量的方式,其中常用的数据类型有Integer整数、Double小数、String字符串、Date日期。Visual Basic语言中单引号'后面的为注释内容,即程序之外的文本,不参与程序的运行,一般用来写一些解释说明,方便程序的理解。如程序中Dim maleCtr As Integer '男生人数。maleCtr这个整数类型的变量用于累加Sheet1中男生的人数。Do While 逻辑条件 ... Loop是Visual Basic中的循环语句之一,当逻辑条件为真时进入循环,当逻辑条件为假时退出循环。本程序中这个循环是为了一行行遍历Sheet1这张表,直到最后一个学生。因此我们需要判断变量i什么时候到最后一行。这里采用的逻辑条件是Not IsEmpty(Sheet1.Range("A" & i)),其中IsEmpty()是用于判断是否为空,为空时返回true,否则返回false,但我们希望当不为空时继续循环,因此前面加个Not用于取反。Sheet1.Range("A1" )可以用于取出Sheet1中A1格里面的内容,此外还可以用Sheets(1).Range("A1" )或Sheets("分数").Range("A1" )。"A" & i是将字符串"A"和整数i拼接起来,随着i=i+1的累加,这个程序中会依次遍历"A2"、"A3"一直到退出循环。Visual Basic常用的逻辑判断语句如下,当逻辑条件1满足时执行程序1,都不满足时执行程序3,其中Elseif 逻辑条件 Then的数量不限。 If 逻辑条件1 Then ... 程序1Elseif 逻辑条件2 Then ... 程序2Else ... 程序3End If name Like "*达"的意思是name这个字符串的内容是否以“达”结尾,其中“*”为通配符,可以表示任意长度的任意内容,如果写成"*达*"意思就是名字中间是否有"达"。Sheet2.Range("A2").NumberFormatLocal = "0"是设置数字单元格的显示格式,例如可以有"0.0","0.##","0.00%"等各种你想要的格式。这里的0和#都是一个代号,0代表即便这一位上没有数字也要显示一个0;#代表这一位如果有数字就显示,没有就不显示;%结尾会自动转成百分比显示,具体可以看Excel的帮助或是这个链接:Excel自定义格式。上述代码中为了展示不同的格式才这么写,实际上整数就用"0",两位小数就用"0.00"即可。Sheet2.Range("A2") = maleCtr大家肯定都能猜到了,这是往Sheet2中对应的单元格里填数。这里Range()其实可以选多个单元格,就如上面设置格式的时候就用过多选:Sheet2.Range("C2:E2").NumberFormatLocal = "0.00"。

点击绿色的小三角就可以运行这个程序了,保存程序的时候可能会提示为无法保存,这时候将Excel文件另存为带宏的格式即可,例如xlsm格式。

这时,点击【开发工具】 → rightarrow →【宏】也能找到我们编写的宏,点执行就能运行,但我们可以看到,这里宏的位置为“ThisWorkbook”,也就是我们打开的这个Excel文件,在别的文件里是无法运行这个宏的。

运行结果如下:

如果想调试程序,点击【调试】 → rightarrow →【逐语句】即可一行一行运行程序,将鼠标放到对应变量上可以看到它们的值,这样程序运行结果不对时就可以用于寻找BUG。

全局宏

上面我们提到,通过【Visual Basic】进入编程界面编写的宏是属于单个文件或Sheet的,如果我们想编写一个可以在所有文件中运行的宏要怎么做呢?下面是具体做法。

点击【开发工具】 → rightarrow →【录制宏】宏名称随意,保存在必须选择【个人宏工作簿】,这个工作簿就是这台电脑共享的宏保存位置,具体位置为C:Users【用户名】AppDataRoamingMicrosoftExcelXLSTART,里面有一个文件叫PERSONAL.XLSB。共用的宏就保存在这里,通过将这个文件发给别人覆盖对应的文件就可以把共用的宏给别人用了。如果是文件自带的宏,只需要把Excel文件发给对方就可以,文件已经自包含了。
点【确定】,这时可能会提示文件必须打开,那我们就把PERSONAL.XLSB这个文件打开后再来一次。这次点【确定】可以录制了,事实上什么都无需录,直接点【停止录制】即可,我们只想要个壳而已。点击【宏】,找到我们刚才录制的这个宏,点击【编辑】。
我们会看到这个宏保存在【PERSONAL.XLSB】这个分支的【模块】分支下面,如果是第一次录制就是【模块1】,对于我来说是【模块2】。我们将前面的程序复制一下,然后替换掉这个空的宏里的所有代码。
仅仅是将代码复制过来是不够的,因为这个宏是共用的,代码中Sheet1等变量的指代不明,不知道是哪个Excel文件中的Sheet1,因此我们做些小的修改。直接查找替换,将Sheet1都替换成ActiveWorkbook.Sheets(1);将Sheet2都替换成ActiveWorkbook.Sheets(2)即可。这里顾名思义,ActiveWorkbook就是指当前激活的那个Excel文件,因此想在哪个文件运行宏,就从那个文件执行宏即可。记得点保存,最终完整代码如下: Sub 分类统计() Dim maleCtr As Integer '男生人数 Dim femaleCtr As Integer '女生人数 Dim daCtr As Integer '名字以达结尾人数 Dim maleSum As Double '男生总分 Dim femaleSum As Double '女生总分 Dim i As Integer i = 2 Do While Not IsEmpty(ActiveWorkbook.Sheets(1).Range("A" & i)) Dim name, sex As String Dim score As Double name = ActiveWorkbook.Sheets(1).Range("A" & i) sex = ActiveWorkbook.Sheets(1).Range("B" & i) score = ActiveWorkbook.Sheets(1).Range("C" & i) If sex = "男" Then maleCtr = maleCtr + 1 maleSum = maleSum + score Else femaleCtr = femaleCtr + 1 femaleSum = femaleSum + score End If If name Like "*达" Then 'like是相似的意思,*为通配符 daCtr = daCtr + 1 End If i = i + 1 '下一行 Loop ActiveWorkbook.Sheets(2).Range("A2").NumberFormatLocal = "0" '设置数字格式为没有小数 ActiveWorkbook.Sheets(2).Range("B2").NumberFormatLocal = "0.##" '设置数字格式为小数点后两位,非零才显示 ActiveWorkbook.Sheets(2).Range("C2:E2").NumberFormatLocal = "0.00" '设置数字格式为小数点后两位且补零 ActiveWorkbook.Sheets(2).Range("A2") = maleCtr ActiveWorkbook.Sheets(2).Range("B2") = femaleCtr ActiveWorkbook.Sheets(2).Range("C2") = daCtr ActiveWorkbook.Sheets(2).Range("D2") = maleSum / maleCtr ActiveWorkbook.Sheets(2).Range("E2") = femaleSum / femaleCtr End Sub 在想要执行宏的Excel文件中点击【宏】,这时就可以看到我们刚才写的宏了,点击【执行】就可以运行。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。