欢迎来到天天文库
浏览记录
ID:37908625
大小:52.50 KB
页数:8页
时间:2019-06-02
《VBA 入门课程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
VBA入门教程VBALesson1程序说明:几种用VBA在单元格输入数据的方法:PublicSubWrites()1--2方法,最简单在"[ ]"中输入单元格名称。1 [A1]=100 '在A1单元格输入100。2 [A2:A4]=10 '在A2:A4单元格输入10。3--4方法,采用Range(""),""中输入单元格名称。3 Range("B1")=200 '在B1单元格输入200。4 Range("C1:C3")=300 '在C1:C3单元格输入300。5--6方法,采用Cells(Row,Column),Row是单元格行数,Column是单元格栏数。5 Cells(1,4)=400 '在D1单元格输入400。6 Range(Cells(1,5),Cells(5,5))=50 '在E1:E5单元格输入50。EndSub你点选任何单元格,按Selection按钮,則则所点选的单元格均会被输入文字"Test"。PublicSubSelection1() Selection.Value="Test" '在任何你点选的单元格输入文字"Test"。EndSub"观看本程序的方法:粗体文字为程序,其它字体均为说明文字。按快捷键Alt+F11即可看到程序。"VBALesson2程序说明:几种如何把别的工作表Sheet4数据,读到这个工作表的方法:在被读取的单元格前加上工作表名称 Sheet4。PublicSubWrites()1--2方法,最简单在被读取的 "[ ]"前加上被读取的工作表名称Sheet4。1 [A1]=Sheet4.[A1] '把Sheet4A1单元格的数据,读到A1单元格。2 [A2:A4]=Sheet4.[B1] ''把Shee4工作表单元格B1数据,读到A2:A4单元格。3--4方法,在被读取的工作表Range("")的Range前加上被读取的工作表名称Sheet4。3 Range("B1")=Sheet4.Range("B1") ''把Shee4工作表单元格B1数据,读到 B1单元格。4 Range("C1:C3")=Sheet4.Range("C1") '把Shee4工作表单元格C1数据,读到C1:C3单元格。5--6方法,在被读取的工作表Cells(Row,Column),Cells前加上被读取工作表名称Sheet4。5 Cells(1,4)=Sheet4.Cells(1,4) '把Shee4工作表单元格D1数据,读到D1单元格。6 Range(Cells(1,5),Cells(5,5))=Sheet4.Cells(1,5) '把Shee4-8- VBA入门教程工作表单元格E1数据,读到E1:E5单元格。EndSub你点选任何单元格,按Selection按钮,则所点选的单元格均会被输入Shee4工作表单元格F1数据。PublicSubSelection1() Selection.Value=Sheet4.[F1] '把Shee4工作表单元格F1数据,读到任何你点选的单元格。EndSubVBALesson3程序说明:如何利用Worksheet_SelectionChange输入数据的方法。PrivateSubWorksheet_SelectionChange(ByValTargetAsRange) Target=100EndSubTarget指的是你鼠标所选的单元格,Worksheet_SelectionChange()事件的参数。可以是一个也可以是好几个单元格。Range是Excel特有的变量形态,叫范围。TargetAsRang是把Target这个参数设定为Range变量形态。Target=100是把你点选的单元格输入数字100。VBALesson4程序说明:如何利用Worksheet_SelectionChange在限定的单元格输入数据的方法。PrivateSubWorksheet_SelectionChange(ByValTargetAsRange) IfTarget.Row>=2AndTarget.Column=2Then Target=100 EndIfEndSubIf... Then...EndIf这是我们学的这一个逻辑判断语句。Target.Row>=2,指的是鼠标选定的单元格的行大于或等于2。Target.Column=2,指的是鼠标选定的单元格的栏等于2。IfTarget.Row>=2AndTarget.Column=2Then指的是只有在Target.Row>=2及Target.Column=2二个条件成立时。就是(Target.Row>=2)为True及(Target.Column=2)为True时,才执行下面的程序 Target=100,也就是B栏第二行及以下行用鼠标被点选时,才会被输入100,其它单元格则不被输入数据。VBALesson5程序说明:-8- VBA入门教程比较Worksheet_SelectionChange()与用按钮 CommandButton1_Click()来执行程序二者的方法与写法有何不同。Worksheet_SelectionChange()事件PrivateSubWorksheet_SelectionChange(ByValTargetAsRange) IfTarget.Row>=2AndTarget.Column=2Then Target=100 EndIfEndSub按鈕 CommandButton1_Click()PrivateSubCommandButton1_Click() IfActiveCell.Row>=2AndActiveCell.Column>=3Then ActiveCell=100 EndIfEndSub二者执行方法最大的地方,在于Worksheet_SelectionChange()是自动的,你不用了解他是怎么完成工作的。按钮 CommandButton1_Click()是人工的,比SelectionChange()多一道手续,就是要去按那接钮,程序才会执行。SelectionChange()有一个参数Target可用;CommandButton1_Click()没有。所以我们要用ActiveCell内定函数来取代Target,ActiveCell与Target最大的不同点他只能指定一个单元格。就是你选取多个单元格也只有最上面的单元格会加上数据;用Selection取代ActiveCell,用法就跟Target一样了。VBALesson6程序说明:完整的If...Then┅End逻辑判断式。PrivateSubWorksheet_SelectionChange(ByValTargetAsRange) If Target.Row>=2AndTarget.Column=2Then Target=200 ElseIf Target.Row>=2AndTarget.Column=3Then Target=300 ElseIf Target.Row>=2AndTarget.Column=2Then Target=400 Else Target=500 EndIfEndSub这是个完整的If逻辑判断式,意思是说,假如If後的判断式条件成立的话,就执行第二条程序,否则假如ElseIf後的判断式条件成立的话,就执行第四条程序,否则假如另一个ElseIf後的判断式条件成立的话,就执行第六条程序。-8- VBA入门教程Else的意思是说,假如以上条件都不成立的话,就执行第八条程序。他的执行方式是假如IF的条件成立的话,就不执行其它ElseIf及Else的逻辑判断式,假如If後的条件不成立的话才会执行ElseIf或Else逻辑判断式。第二个ElseIf後的条件因为与IF後的条件一样,所以这个判断式後面的Target=400将是永远无法执行到的程序。VBALesson7程序说明∶我们为什麽要用变数。PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)Dim i, j AsIntegerDim k AsRangei = Target.Rowj = Target.ColumnSet k = Target If i >=2And j =2Then k = 200 ElseIf i>=2 And j=3 Then k = 300 ElseIf i>=2 And j=4 Then k = 400 Else k = 500 EndIfEndSub 跟VBALesson6比较,程序是不是明朗多了,在前课重复的用Target.Row,Target.Column及Target来写程序是不是有一点烦。用变量的第一个好处大家马上感觉得出来,就是可以简化程序。使用变量前,你得先宣告变量。宣告变量的方法是在"Dim"后面写上变量 " i"As后面接上变量的形态"Integer"。Dim i, j AsInteger就是宣告 i与j为整数变量,这是同时宣告二个变量 i与j所以要在二个变量间加个","号。Dim k AsRange是宣告k为范围资料形态,Range这是Excel特有的资料形态。i = Target.Row是把当前单元格的行数,指定给变量i。j = Target.Column是把当前单元格的栏数,指定给变量j。Set k = Target是把当前的单元格,指定给变量k。用像 i 与j 这样简单的变量,在程序的前面你可能还记得 i 或 j代表着什厶。程序写长了,你可能忘记i或 j代表着什厶。所以最好的方法是用比较有意义的代号,来为变量命名如iRow或iCol来取代i 及j。VBALesson8程序说明∶体会一下Worksheet_Change()事件。PrivateSubWorksheet_Change(ByValTargetAsRange)DimiRow,iColAsIntegeriRow=Target.RowiCol=Target.Column IfiRow>=2AndiCol=2AndTarget<>""-8- VBA入门教程Then Application.EnableEvents=False Cells(iRow,iCol+1)=Cells(iRow,iCol)*2 Application.EnableEvents=True ElseIfiRow>=2AndiCol=2AndTarget=""Then Cells(iRow,iCol+1)="" Else Cells(iRow,iCol+1)="" EndIfEndSub 前几个教程都是用Worksheet_SelectionChange事件来举例子,大家应该能体会他是怎厶一回事了吧。这个教程就是要让你来体会什厶是Worksheet_Chang()事件。因为这二个事件在VBA都是非常有用的,所以一定要了解。简单的说,前者是你鼠标移动到那个单元格,就触发那个事件的执行。後者是要等到你点选的单元格,数有了改变才会触发事件的执行。二者执行的时机一前一後。Target<>""是代表限定当前的单元格要是有数的,才会执行以下三行的程序。Cells(iRow,iCol+1)=Cells(iRow,iCol)*2,是你在B栏输入数时,C栏将可得到B栏二倍的数。Target=""是限定当前的单元格要是没有数的,才会执行以下一行的程序。Cells(iRow,iCol+1)="",是把C栏的数清成空格。Application.EnableEvents=False与Application.EnableEvents=True,这是个成双的程序,当你用了前者记得在执行其他程序後要写上後面的程序。它的目的在抑制事件连锁执行。简单的说就是,在B字段所触发的事件,不愿在其它单元格再触发另一个Worksheet_Change()事件。VBALesson9程序说明∶体会一下Worksheet_Change()事件连锁反应。PrivateSubWorksheet_Change(ByValTargetAsRange)DimiRowAsIntegeriRow=Target.Row Application.EnableEvents=False Cells(iRow,3)=Cells(iRow,3)+Cells(iRow,2) Application.EnableEvents=TrueEndSub PrivateSubWorksheet_Change(ByValTargetAsRange)DimiRowAsIntegeriRow=Target.Row 'Application.EnableEvents=False Cells(iRow,3)=Cells(iRow,3)+Cells(iRow,2) 'Application.EnableEvents=TrueEndSub这个程序的目的是要在B2输入新的数时,C2会将B2输入的新数加上C2-8- VBA入门教程原有的数呈现在C2上。照上面有加上 Application.EnableEvents=False程序执行当然没问题。现在你在Application.EnableEvents=False与Application.EnableEvents=True前加上「'」看看。程序前加上「'」的目的是要使「'」之后的文字变成说明文字,程序执行时是会跳过说明文字,不执行说明文字的内容。程序前加上「'」符号后,文字会变成绿色。执行第二个程序时,你将发现C2不会按你所要求的,呈现结果。这就是所谓的事件连锁反应。VBALesson10程序说明∶体会一下Worksheet_Activate()事件。这个程序的目的是要大家体会一下Worksheet_Activate()事件的意义与用法,大家暂且不用去了解事件的程序代码。我们在"出毛登记表"工作表K栏打勾选取我们要的数 。当打开"发毛单"工作表时,"出毛登记表"工作表K栏有打勾的那一行数 自动就复制至"发毛单"工作表。这样的做法可省去我们做一个按钮,用人工的方法将数 复制至"发毛单"工作表。但有个後遗症,那就是每次打开"发毛单"工作表时Excel一定会执行这个程序,增加Excel的工作量。VBALesson11程序说明∶体会一下Worksheet_Deactivate()与Worksheet_BeforeDoubleClick()事件。PrivateSubWorksheet_BeforeDoubleClick(ByValTargetAsRange,CancelAsBoolean) Cancel=True Sheet3.Visible=xlSheetVeryHiddenEndSub这个程序的目的是要大家体会一下Worksheet_Deactivate()与Worksheet_BeforeDoubleClick()事件的意义与用法,大家暂且不用去了解事件的程序代码。与VBALesson10教程Sheet3的Worksheet_Activate()相同的程序,写在Sheet1的Worksheet_Deactivate()事件上。一样可达成我们在VBALesson10所要达成的目的。那我们应把程序写在Sheet3的Worksheet_Activate()事件上,或是写在Sheet1的Worksheet_Deactivate()事件上呢?依这功能需求当然还是写在Sheet3的Worksheet_Activate()事件上比较 合。因为假如你从"出毛登记表"工作表切到"说明"工作表,也会触发Worksheet_Deactivate()的执行,徒增Excel的工作量。Worksheet_BeforeDoubleClick()事件有二个参数,Target以前介绍过了,另一个参数Cancel是做什厶用途的呢?原来我们在单元格DoubleClick时会变成编辑状态。假如我们把Cancel设定成True时,则你连按鼠标二次时,单元格不会变成编辑状态。就像这个Worksheet_BeforeDoubleClick()事件,我们就是把单元格DoubleClick变成编辑状态功能Cancel掉。并把Sheet3隐藏起来。"说明"工作表Worksheet_BeforeDoubleClick()的Cancel参数是设定-8- VBA入门教程True;"出毛登记表"工作表Worksheet_BeforeDoubleClick()的Cancel参数是设定False,你用鼠标连按二次就可体会设定成True与False的不同。VBALesson12程序说明∶体会一下Worksheet_BeforeRightClick()事件。PrivateSubWorksheet_BeforeRightClick(ByValTargetAsRange,CancelAsBoolean) IfNotApplication.Intersect(Target,Range("D8"))IsNothingThen Cancel=True MsgBox("TargetisRangeD8 andCancelisTrue!") Else Cancel=False EndIfEndSub这个程序的目的是要大家体会一下Worksheet_BeforeRightClick()事件的意义与用法。Worksheet_BeforeRightClick()事件也有二个参数,Target以前介绍过了,另一个参数Cancel是做什厶用途的呢?这个Cancel与前一个教程Worksheet_BeforeDoubleClick()的Cancel是有所不同的。这个Cancel假如设定成True的话,将屏闭掉鼠标右键的菜单。你可以在VBALesson12工作表的D8单元格与D12单元格,按鼠标右键试看看有何不同。在D12按鼠标右键将呈现正常的右键菜单;在D8 按鼠标右键将呈现一个对话框并且屏闭掉右键菜单VBALesson13程序说明∶动脑时间。Worksheet的事件计有如下七种∶1、Worksheet_Activate()2、Worksheet_BeforeDoubleClick()3、Worksheet_BeforeRightClick()4、Worksheet_Calculate()5、Worksheet_Change()6、Worksheet_FollowHyperlink()7、Worksheet_SelectionChange()1、前面几个教程都是我给答案,这次希望大家给我答案。2、VBALesson13有个自动筛选的数,请大家告诉我如何去补捉自动筛选的事件。3、也就是当你去按那筛选的按钮,如何让那对话框弹出来。4、Worksheet的事件计有如上七种,我在事件上均写上程序码。5、利用这七个事件中的一个,请你告诉我,你去按那筛选的按钮,将弹出那个对话框。6、提示你∶除非你在工作表动个手脚,否则是弹不出对话框的。-8- VBA入门教程请教sheet2,sheet3等的数据来自于sheet1,如何让sheet2,sheet3的内容随sheet1自动更新PrivateSubWorksheet_Change(ByValTargetAsRange)Dimr,cAsIntegerr=Target.Rowc=Target.ColumnSetws2=Sheet2Setws3=Sheet3IfTarget.Rows.Count>2OrTarget.Columns.Count>2ThenExitSubws2.Cells(r,c)=Target.Valuews3.Cells(r,c)=Target.ValueEndSubToWindRider兄∶1、Worksheet_BeforeDoubleClick(ByValTargetAsRange,CancelAsBoolean)的Cancel是在控制BeforeDoubleClick()事件引发的内定事件。2、BeforeDoubleClick()事件,引发的内定事件,就是你连按滑鼠右键二次,它会使单元格变成编辑状况。3、Cancel=False,就是它会使单元格变成编辑状况。这是BeforeDoubleClick()事件内定情况。也就是你没写上这句程式,内定就是你连按滑鼠右键二次,它会使单元格变成编辑状况。4、Cancel=True,就是你连按滑鼠右键二次,它不会使单元格变成编辑状况。5、Worksheet_BeforeRightClick(ByValTargetAsRange,CancelAsBoolean)的Cancel是在控制Worksheet_BeforeRightClick()事件引发的内定事件。6、BeforeRightClick()事件,引发的内定事件,就是它会弹出一个浮动功能表。7、Cancel=False,就是它会弹出一个浮动功能表。这是BeforeRightClick()事件内定情况。也就是你没写上这句程式,内定就是你按滑鼠右键,它会弹出一个浮动功能表。8、Cancel=True,就是你按滑鼠右键,它会使工作表不弹出一个浮动功能表。-8-
此文档下载收益归作者所有
举报原因
联系方式
详细说明
内容无法转码请点击此处