Excel函数VBA教程基础入门课件

上传人:2127513****773577... 文档编号:241320504 上传时间:2024-06-17 格式:PPT 页数:35 大小:369.07KB
返回 下载 相关 举报
Excel函数VBA教程基础入门课件_第1页
第1页 / 共35页
Excel函数VBA教程基础入门课件_第2页
第2页 / 共35页
Excel函数VBA教程基础入门课件_第3页
第3页 / 共35页
点击查看更多>>
资源描述
Excel函数函数VBA教程基础入门教程基础入门12021/2/21Excel函数VBA教程基础入门Excel函数VBA教程基础VBA简易教程简易教程(下)(下)22021/2/21VBA简易教程(下)22021/2/21创建过程创建过程创建第一个过程需要两个基本步骤。首先,需要向工作簿中添加一个模块。接着需要向模块中添加一个工程。对于创建的每一个应用程序,只需添加一次模块。可以使用多个模块,但这是不必要的。某些开发者喜欢使用多个模块,以便根据他们的目的或者窗体对过程进行组织。在本练习中,创建的过程只显示一个消息框。在本练习中创建的过程只显示一个消息框。在本练习中使用Msgbox是为了提供一个可见的例子,虽然我们还没有介绍过Msgbox语句,但是在本例中将使用它。要创建该过程,请按如下步骤进行:打开一个新工作簿。选择工具-宏-VisualBasic编辑器,打开VBA编辑器窗口。32021/2/21创建过程创建第一个过程需要两个基本步骤。打开一个新工作簿。在VBA编辑器的左面,可以看到“工程资源管理器”窗口。在工程资源管理器窗口的“Thisworkbook上单击鼠标右键,选择“插入”-“模块”,这样就将一个模块添加到应用程序中了。(如果你没有看见“工程资源管理器”窗口,可以按 Ctrl+R)。选择“插入”“过程”,显示“添加过程”对话框。输入“第一个工程”作为过程名字。在“类型”分组框中,确认选择了“子程序”。单击“确定”按钮。这样一个新的过程就添加到模块中了。可以在模块中看到以PublicSub第一个过程()开始,以EndSub结束的语句结构。42021/2/21在VBA编辑器的左面,可以看到“工程资源管理器”窗口。选择6)在过程中插入光标,输入以下语句并回车:Msgbox这是我的第一个过程 在输入在输入MsgboxMsgbox后,会自动弹出一个消息框告诉你有关这条命令的信息,后,会自动弹出一个消息框告诉你有关这条命令的信息,称之为自动列表技术。输入完成的过程如下所示:称之为自动列表技术。输入完成的过程如下所示:PublicSub第一个过程()Msgbox这是我的第一个过程 EndSubVBAVBA对子程序和函数对子程序和函数有有如下的命名规则:如下的命名规则:*名字中可以包含字名字中可以包含字母数字和下划线。母数字和下划线。*名字中不能包含空名字中不能包含空格句号惊叹号,也不能格句号惊叹号,也不能包含字符包含字符&$#.&$#.*名字最多可以包含名字最多可以包含255255个字符。个字符。52021/2/216)在过程中插入光标,输入以下语句并回车:在输入Msgbo运运行宏行宏l创建这个过程后,可以运行一下。l运行一个过程有几种方法:l可以直接使用“运行”菜单,“运行子程序/用户窗体”工具栏按钮或按下F5键。l要运行一个过程,可以按照如下步骤:l1)单击“运行子程序/用户窗体”工具栏按钮,过程执行并显示一个消息框。2)单击消息框之中的“确定”按钮,关闭该消息框。62021/2/21运行宏创建这个过程后,可以运行一下。62021/2/21保存对模块所做的改变保存对模块所做的改变要保存新过程要保存新过程,需要保存过程所驻留的工作簿需要保存过程所驻留的工作簿.可以用可以用VBAVBA编辑器保存工作簿编辑器保存工作簿.具体步骤如下具体步骤如下:选择选择 文件文件-保存工作簿保存工作簿.因为本工作簿还没有保存过因为本工作簿还没有保存过,所以要给它命名所以要给它命名.输入输入“HOUR4”“HOUR4”作为文件名并按回车键作为文件名并按回车键,则工作簿和模块与则工作簿和模块与过程都保存下来了过程都保存下来了.72021/2/21保存对模块所做的改变要保存新过程,需要保存过程所驻留的工作变量变量l变量是用于临时保存数值的地方.l每次应用程序运行时,变量可能包含不同的数值,而在程序运行时,变量的数值可以改变.l为了说明为什么需要变量,可以按照如下步骤创建一个简单的过程:l1)创建一个名为你叫什么名字的过程.2)在过程中输入如下代码:Inputbox输入你的名字:l3)按下F5键运行过程,这时会显示一个输入框,要求输入你的名字.4)输入你的名字并按确定按钮,则结束该过程.你输入的名字到那里去了?如何找到用户在输入框中输入的信息?在这种情况下,需要使用变量来存储用户输入的结果.82021/2/21变量变量是用于临时保存数值的地方.82021/2/21变量的数据类型变量的数据类型使用变量的第一步是了解变量的数据类型.变量的数据类型控制变量允许保存何种类型的数据.表列出了VBA支持的数据类型,还列出了各种类型的变量所需要的存储空间和能够存储的数值范围.数据类型数据类型存储空间存储空间数值范围数值范围Byte1字节0-255Boolean2字节True或者FalseInteger2字节-32768-32767Long(长整型)4字节-2147483648-2147483647Single4字节负值范围:-3.402823E38-1.401298E-45正值范围:1.401298E-453.402823E38Object4字节任何引用对象String(长字符串)10字节+1字节/字符0-约20亿92021/2/21变量的数据类型使用变量的第一步是了解变量的数据类型.变量的变量的数据类型变量的数据类型数据类型数据类型存储空间存储空间数值数值范围范围Double8字节负值范围:-1.79769313486232E308-4947E-324正值范围:4.947E-3241.79769313486232E308Decimal14字不包括小数时:+/-79228162514264337593543950335包括小数时:+/7.9228162514264337593543950335Currency8字节-922337203685477922337203685477Date8字节1000年1月1日-9999年12月31日String(固定长度)字符串的长度1约65400Varient(数字)16字节Double范围内的任何数值Varient(文本)22字节+1字节/字符数据范围和变长字符串相同102021/2/21变量的数据类型数据类型存储空间数值范围Double8字节负值用用DimDim语句创建变量语句创建变量(声明变量声明变量)现在,你对变量可以使用的数据类型已经比较熟悉了,以下我们将创建变量.创建变量可以使用Dim语句,创建变量通常成为声明变量。DimDim语句的基本语法如下语句的基本语法如下:Dim变量名变量名AS数据类型数据类型变量名必须以字母开始变量名必须以字母开始,并且只能包含字母数字和特定的特殊字符并且只能包含字母数字和特定的特殊字符,不能包含空格句号惊叹号不能包含空格句号惊叹号,也不能包含字符也不能包含字符&$&$#.#.名字最大长度为名字最大长度为255255个字符个字符。112021/2/21用Dim语句创建变量(声明变量)现在,你对变量可以使用的数变量命名的惯例变量命名的惯例下表给出了推荐的变量命名惯例数据类型短前缀长前缀数据类型数据类型短前缀短前缀长前缀长前缀ArrayaaryBooleanfbinBytebbitCurrencyccurDoubleddblDate/Timedtdtm/datIntegeriintLongllngObjectoobjSinglesngStringsstrVariantvvar122021/2/21变量命名的惯例下表给出了推荐的变量命名惯例数据类型短前缀使用数组使用数组如果你使用过其他编程序语言如果你使用过其他编程序语言,可能对数组已经比较熟悉了可能对数组已经比较熟悉了.数组是具有数组是具有相同数据类型并共同享有一个名字的一组变量的集合相同数据类型并共同享有一个名字的一组变量的集合.数组中的元素通过数组中的元素通过索引数字加以区分索引数字加以区分,定义数组的方法如下定义数组的方法如下:Dimarray_name(n)Astype(其中n是数组元素的个数)例如例如,如果要创建保存如果要创建保存1010个学生名字的数组个学生名字的数组,可以用以下语句可以用以下语句:Dims学生名字(9)AsInteger132021/2/21使用数组如果你使用过其他编程序语言,可能对数组已经比较熟悉了使用数组使用数组声明数组时的另一种方法是不给定大小。可以在程序运行时定义其大小。通过创建动态数组就可以做到。例如,你的程序要创建一表格,可以提示用户输入表格的行和列的数目。声明动态数组的语法如下:Dimdyn_array()Astype对数组声明后可以在程序运行时用ReDim语句指定数组的大小:ReDimdyn_array()(array_size)参数array_size代表数组的新大小。如果要保留数组的数值,请在ReDim语句后使用保留字Preserve,具体语法如下:ReDimPreservedyn_array(array_size)142021/2/21使用数组声明数组时的另一种方法是不给定大小。可以在程序运行时变量赋值变量赋值l声明变量后就可以给变量赋值。请注意下列语句中为数组变量赋值时索引数字的使用。Dimi人数AsIntegerDimi考试成绩AsIntegerDimiAsIntegeri人数=inputbox(输入学生的人数:)ReDimPreservei考试成绩(i数量)Fori=1toi人数i考试成绩(i)=inputbox(输入考试成绩&i)Next152021/2/21变量赋值声明变量后就可以给变量赋值。请注意下列语句中为数组使用常量使用常量l现在,你已经知道变量是存储非静态信息的存储容器.当存储静态信息时可以创建常量.它可以供程序多次使用而且便于记忆.l比如圆周率比3.1415926好理解得多.要声明常量并设置常量的值,需要使用const语句.常量声明后,不能对它赋一个新的值.l例如,假设需要声明一个常量来保存销项税率,可以使用以下语句:l通常常量声明时用全大写字母以区分变量.const销项税率AsLong=0.17162021/2/21使用常量现在,你已经知道变量是存储非静态信息的存储容器.当作用域作用域 到现在为止,已经学习了如何定义变量和常量,但是还不知道在何处定义.可以在两个地 方定义常量和变量:过程中定义和在模块顶部一个名为“通用声明”的区域内定义.定义的位置决定租用域定义的位置决定租用域.在过程中声明,该变量只能在该过程中使用,其他过程中不能使用这个变量和常量,这中变量成为局部变量或过程级变量;在模块顶部声明的变量称为模块级变量,该变量在该模块的所有过程中都可以使用。172021/2/21作用域到现在为止,已经学习了如何定义变量和常量,但作用域作用域还有一种等级的作用域称为公共级。公共级变量可以在应用程序的任何过程中使用,不论过程和变量是否定义在一个模块。这就使得公共级变量在使用中十分灵活,但是公共级变量在程序运行时一直保留在内存中,这样就占用了系统资源。要创建公共级变量,可以用Public语句,具体语法如下:PublicvariablenameAsdatatype要创建公共级常量,具体语法如下:PublicconstCONSTANAMEdatatype=value公共级变量或常量必须在模块顶部的公共级变量或常量必须在模块顶部的“通用声明通用声明”区域中定义。区域中定义。182021/2/21作用域还有一种等级的作用域称为公共级。Publicvari利用利用VBA设置工作表使用权限设置工作表使用权限 ExcelHome一般保护工作表采取的方法是用EXCEL菜单中的“保护”命令,有时这尚嫌不足,比如一些机密文件根本要让某些使用者无法看到,但又需要他来操作工作簿中的其他表,怎么办?可以打开VBA编辑器,打开“工程资源管理器”,双击该工作表,现在出现的是设置该表的属性的编辑窗口,单击窗口左上的下拉列表框,选择worksheet,这时再从该窗口右上方的列表框中选择Active(“激活”),这时自动显示如下的语句块:PrivateSubWorksheet_Activate()EndSub192021/2/21利用VBA设置工作表使用权限ExcelHome一般利用利用VBA设置工作表使用权限设置工作表使用权限在其中加入代码:在其中加入代码:(假设用假设用“123”“123”作为密码作为密码,Sheet“,Sheet“机密文档机密文档”为限制为限制权限文档权限文档,sheet,sheet普通文档普通文档 为工作簿中你认为任何适合的工作表为工作簿中你认为任何适合的工作表)IfApplication.InputBox(请输入操作权限密码:)=123ThenRange(A1).SelectElseMsgbox密码错误,即将退出!Sheets(普通文档).SelectEndif202021/2/21利用VBA设置工作表使用权限在其中加入代码:(假设用“123利用利用VBA设置工作表使用权限设置工作表使用权限l完整的程序如下:完整的程序如下:PrivateSubWorksheet_Activate()IfApplication.InputBox(请输入操作权限密码:)=123ThenRange(A1).SelectElseMsgBox密码错误,即将退出!Sheets(普通文档).SelectEndIfEndSub212021/2/21利用VBA设置工作表使用权限完整的程序如下:Private利用利用VBA设置工作表使用权限设置工作表使用权限 这样做仍有一个问题,就是越权使用者仍会看到一些文件的片段,即在提示这样做仍有一个问题,就是越权使用者仍会看到一些文件的片段,即在提示密码的那段时间。你可以这样做,用上述方法选择工作表的密码的那段时间。你可以这样做,用上述方法选择工作表的DeactivateDeactivate事件事件,输入以下代码:输入以下代码:Sheets(机密文档).Cells.Font.ColorIndex=2这段程序使得此工作表在不被激活时,所有文字为白色。这段程序使得此工作表在不被激活时,所有文字为白色。然后,在第一个程序中的然后,在第一个程序中的Range(A1).SelectRange(A1).Select后插入一行,写入以下代码:后插入一行,写入以下代码:ActiveSheet.Cells.Font.ColorIndex=56这段程序,在你输入正确密码后,将该表所有文字转变为深灰色。这段程序,在你输入正确密码后,将该表所有文字转变为深灰色。222021/2/21利用VBA设置工作表使用权限这样做仍有一个问题,就是越利用利用VBA设置工作表使用权限设置工作表使用权限完整的程序如下:完整的程序如下:PrivateSubWorksheet_Activate()IfApplication.InputBox(请输入操作权限密码:)=123ThenRange(A1).SelectSheets(机密文档).Cells.Font.ColorIndex=56ElseMsgBox密码错误,即将退出!Sheets(普通文档).SelectEndIf232021/2/21利用VBA设置工作表使用权限完整的程序如下:Private提高提高VBAVBA运行效率运行效率由于MicrosoftOffice办公套件的广泛应用,以及该软件版本的不断提升,功能不断完善,在Office办公套件平台上开发出的VBA应用程序越来越多,而VBA是一种宏语言,在运行速度上有很大的限制。因此VBA编程的方法直接关系到VBA程序运行的效率,本文列举了一些提高VBA程序运行效率的方法。方法方法1 1:尽量使用:尽量使用VBAVBA原有的属性、方法和原有的属性、方法和WorksheetWorksheet函数函数由于Excel对象多达百多个,对象的属性、方法、事件多不胜数,对于初学者来说可能对它们不全部了解,这就产生了编程者经常编写与Excel对象的属性、方法相同功能的VBA代码段,而这些代码段的运行效率显然与Excel对象的属性、方法完成任务的速度相差甚大。242021/2/21提高VBA运行效率由于MicrosoftOffice办公套提高提高VBAVBA运行效率运行效率ForEachcInWorksheet(1).Range(A1:A1000)TotalValue=TotalValuec.ValueNextAverageValue=TotalValue/Worksheet(1).Range(A1:A1000).Rows.Count如求平均工资的例子:如求平均工资的例子:例如用Range的属性CurrentRegion来返回Range对象,该对象代表当前区。(当前区指以任意空白行及空白列的组合为边界的区域)。同样功能的VBA代码需数十行。因此编程前应尽可能多地了解Excel对象的属性、方法。充分利用Worksheet函数是提高程序运行速度的极度有效的方法。252021/2/21提高VBA运行效率ForEachcInWorkshe提高提高VBAVBA运行效率运行效率而下面代码程序比上面例子快得多:而下面代码程序比上面例子快得多:AverageValue=Application.WorksheetFunction.Average(Worksheets(1).Range(A1:A1000)其它函数如Count,Counta,Countif,Match,Lookup等等,都能代替相同功能的VBA程序代码,提高程序的运行速度。尤其在循环中每一个Excel对象的属性、方法的调用都需要通过OLE接口的一个或多个调用,这些OLE调用都是需要时间的,减少使用对象引用能加快VBA代码的运行。方法方法2:尽量减少使用对象引用:尽量减少使用对象引用262021/2/21提高VBA运行效率而下面代码程序比上面例子快得多:Avera提高提高VBAVBA运行效率运行效率例如例如1 1使用使用WithWith语句。语句。Workbooks(1).Sheets(1).Range(A1:A1000).Font.Name=PayWorkbooks(1).Sheets(1).Range(A1:A1000).Font.FontStyle=Bold.则以下语句比上面的快则以下语句比上面的快WithWorkbooks(1).Sheets(1).Range(A1:A1000).Font.Name=Pay.FontStyle=Bold.EndWith272021/2/21提高VBA运行效率例如1使用With语句。Workboo提高提高VBAVBA运行效率运行效率2 2使用对象变量。使用对象变量。如果你发现一个对象引用被多次使用,则你可以将此对象用如果你发现一个对象引用被多次使用,则你可以将此对象用SetSet设置为设置为对象变量,以减少对对象的访问。如:对象变量,以减少对对象的访问。如:Workbooks(1).Sheets(1).Range(A1).Value=100Workbooks(1).Sheets(1).Range(A2).Value=200则以下代码比上面的要快:则以下代码比上面的要快:SetMySheet=Workbooks(1).Sheets(1)MySheet.Range(A1).Value=100MySheet.Range(A2).Value=200282021/2/21提高VBA运行效率2使用对象变量。如果你发现一个对象引用被提高提高VBAVBA运行效率运行效率3 3在循环中要尽量减少对象的访问。在循环中要尽量减少对象的访问。Fork=1To1000Sheets(Sheet1).SelectCells(k,1).Value=Cells(1,1).ValueNextk则以下代码比上面的要快:则以下代码比上面的要快:SetTheValue=Cells(1,1).ValueSheets(Sheet1).SelectFork=1To1000Cells(k,1).Value=TheValueNextk292021/2/21提高VBA运行效率3在循环中要尽量减少对象的访问。For提高提高VBAVBA运行效率运行效率方法方法3 3:减少对象的激活和选择减少对象的激活和选择如果你的通过录制宏来学习VBA的,则你的VBA程序里一定充满了对象的激活和选择,例如Workbooks(XXX).Activate,Sheets(XXX).Select,Range(XXX).Select等,但事实上大多数情况下这些操作不是必需的。例如:例如:Sheets(Sheet3).SelectRange(A1).Value=100Range(A2).Value=200可改为:可改为:WithSheets(Sheet3).Range(A1).Value=100.Range(A2).Value=200EndWith302021/2/21提高VBA运行效率方法3:减少对象的激活和选择如果你的通过录提高提高VBAVBA运行效率运行效率方法方法4 4:关闭屏幕更新:关闭屏幕更新如果你的VBA程序前面三条做得比较差,则关闭屏幕更新是提高VBA程序运行速度的最有效的方法,缩短运行时间2/3左右。关闭屏幕更新的方法:关闭屏幕更新的方法:Application.ScreenUpdate=False请不要忘记请不要忘记VBAVBA程序运行结束时再将该值设回来:程序运行结束时再将该值设回来:Application.ScreenUpdate=True312021/2/21提高VBA运行效率方法4:关闭屏幕更新如果你的VBA程序前面l用过Excel97里的加载宏定时保存吗?可惜它的源程序是加密的,现在就上传一篇介绍实现它的文档。在Office里有个方法是application.ontime,具体函数如下:expression.OnTime(EarliestTime,Procedure,LatestTime,Schedule)如果想进一步了解,请参阅Excel的帮助。l这个函数是用来安排一个过程在将来的特定时间运行,(可为某个日期的指定时间,也可为指定的时间段之后)。通过这个函数我们就可以在Excel里编写自己的定时程序了。下面就举两个例子来说明它。l1.1.在下午在下午17:00:0017:00:00的时候显示一个对话框。的时候显示一个对话框。SubRun_it()Application.OnTimeTimeValue(17:00:00),Show_my_msg 设置定时器在17:00:00激活,激活后运行Show_my_msg。EndSub SubShow_my_msg()msg=MsgBox(现在是17:00:00!,vbInformation,自定义信息)EndSub322021/2/21用过Excel97里的加载宏定时保存吗?可惜它l2.模仿Excel97里的自动保存宏,在这里定时5秒出现一次lSubauto_open()MsgBox欢迎你,在这篇文档里,每5秒出现一次保存的提示!,vbInformation,请注意!Callruntimer打开文档时自动运行EndSubSubruntimer()Application.OnTimeNow+TimeValue(00:00:05),saveitNow+TimeValue(00:15:00)指定在当前时间过5秒钟开始运行Saveit这个过程。EndSub332021/2/212.模仿Excel97里的自动保存宏,在这里定时以上只是两个简单的例子,有兴趣的话,可以利用Application.Ontime这个函数写出更多更有用的定时程序SubSaveIt()msg=MsgBox(朋友,你已经工作很久了,现在就存盘吗?&Chr(13)_&选择是:立刻存盘&Chr(13)_&选择否:暂不存盘&Chr(13)_&选择取消:不再出现这个提示,vbYesNoCancel+64,休息一会吧!)提示用户保存当前活动文档。Ifmsg=vbYesThenActiveWorkbook.SaveElseIfmsg=vbCancelThenExitSubCallruntimer如果用户没有选择取消就再次调用RuntimerEndSub342021/2/21SubSaveIt()msg=MsgBox(朋友Thank You世界触手可及世界触手可及携手共进,齐创精品工程携手共进,齐创精品工程352021/2/21Thank You世界触手可及携手共进,齐创精品工程3520
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!