EXCELVBA学习笔记
- 格式:doc
- 大小:81.00 KB
- 文档页数:33
Excel VBA 从入门到精通【1.1 VBA与Excel应用程序】1、看看下面吧:2、VBA不仅仅能在excel中使用,在其它的office应用软件里面也是可以使用的,比如word。
【1.2 使用Excel的宏】1、看看下面吧:看看用“图形对象”执行宏的例子吧:上图中所说的“清理宏代码”的意思是删除那些不需要的宏代码(因为在录制宏的时候可能会一同生成许多并不需要的宏代码)。
看看对于宏的安全设置吧:2、在保存有宏代码的excel文件的时候,文件格式要注意,如果保存成普通的excel格式是不具有宏的功能的:3、如下图的代码中其实就是红色矩形中的代码有用,其它的代码是没什么作用的(录制宏的时候系统自动添加上去的),所以是可以删除掉的,这个就是“清理宏代码”的操作:【1.3 VBE开发环境】1、看看下面吧:2、如下图中的“ThisWorkbook”指的是工作薄,而Sheet1、Sheet2、Sheet3指的是三个工作表。
而我们录制的宏的代码都在模块里面:3、在代码编辑窗口中可以进行分割窗口、可以显示全代码或者每个代码单独显示等等操作:4、在输入对象属性和方法代码的时候有时候代码提示功能没有了,此时可以按“ctrl+j”来重新调出提示来:在输入命令的时候,想要在只输入了前几个字母的情况下想要让系统自动补全后面的字母的话,可以用编辑工具栏中的特定按钮来完成操作:【1.4 第一个VBA程序】 1、看看下面吧:2、看看上面例子的具体做法吧:首先创建窗体并添加按钮,然后摆放按钮的位置和改变按钮的标题和名字:我们先编辑“关闭”按钮的代码,双击这个按钮就可以写它的代码了(这个按钮的代码比较简单,所以我们先写它吧。
双击这个按钮是编辑这个按钮的默认事件,按钮的默认事件是“Click”):再来编写“九九乘法表”的代码吧:我们来编写一个模块,为了实现往excel表格里面写入乘法表的功能:然后给“生成到工作表”按钮添加代码:最终的代码是如下图所示:3、我们在输入命令的时候如果拼写正确系统会自动把命令的首字母大写的,如果输入错误就不会首字母大写了,这个也是我们排错的一个方法(但是vba中关键字是不区分大小写的)。
VBA笔记8-211.VBA是什么:微软开发出来的应用程序一种能共享通用的自动化语言,VBA能使已有的应用程序(excel等)自动化,可以创建自定义的解决方案.等同:可以用excel的宏语言来使excel自动化,使用word BASIC使word自动化,等等。
VBA可以称作excel的“遥控器”.此外,如果你愿意,还可以将excel用做开发平台实现应用程序.2.VBA可以实现的功能1. 使重复的任务自动化.2. 自定义excel工具栏,菜单和界面.3. 简化模板的使用.4. 自定义excel,使其成为开发平台.5. 创建报表.6. 对数据进行复杂的操作和分析.3.宏3.1录制简单的宏选择“工具”—“宏”—“录制新宏”—输入宏名—确定—开始录制(状态栏中显示“录制”)—结束宏录制(“工具”—“宏”—“停止录制”。
)*开始录制并非一个按钮,而是你的一系列操作,宏会记录下来变为自己的操作。
3.2执行宏选择任何一个单元格—选择“工具”—“宏”—“宏”(出现“宏”对话框)—选择相应的宏名—“执行”。
3.3查看录制的代码工具”—“宏”—“宏”(显示“宏”对话框)—选择某个宏—“编辑”VBA的编辑器窗口(VBE)Sub 改变颜色() //宏名’’改变颜色Macro’xw 记录的宏2000-6-10’’//以上五行录制时自动生成Range("A5").Select //表示无论选择哪个单元格,最后都只作用于A5With Selection.Interior//设置属性在选择区域的内部(开始录制属性).ColorIndex = 3 //颜色为3号色:红色.Pattern = xlSolid //区域内部图案=纯色(录制时自动生成,可删)PatternColorIndex = xlAutomatic //内部图案底纹颜色=自动(自动生成,可删)End With //结束属性录制End Sub//结束宏录制一个名为练习的宏:Sub 练习()'' 练习宏''With Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous.ColorIndex = 0.TintAndShade = 0.Weight = xlMediumEnd WithWith Selection.Borders(xlEdgeTop).LineStyle = xlContinuous.ColorIndex = 0.TintAndShade = 0.Weight = xlMediumEnd WithWith Selection.Borders(xlEdgeBottom).LineStyle = xlContinuous.ColorIndex = 0.TintAndShade = 0.Weight = xlMediumEnd WithWith Selection.Borders(xlEdgeRight).LineStyle = xlContinuous.ColorIndex = 0.TintAndShade = 0.Weight = xlMediumEnd WithSelection.Borders(xlInsideVertical).LineStyle = xlNoneSelection.Borders(xlInsideHorizontal).LineStyle = xlNoneWith Selection.Interior.Pattern = xlSolid.PatternColorIndex = xlAutomatic.Color = 5296274.TintAndShade = 0.PatternTintAndShade = 0End WithWith Selection.Font.Color = -16727809.TintAndShade = 0End WithEnd Sub3.4为宏指定快捷键创建宏时指定:只须在录制宏时在输入宏名后,在“快捷键”文本框中输入相应的键。
Excel中VBA编程学习笔记(⼗六)--Access数据库更新操作【例1】使⽤Connection的Execute的⽅法数据库格式:Sub test()Dim conString$, sqlString$Dim cnn, rstSet cnn = CreateObject("ADODB.Connection")Set rst = CreateObject("ADODB.Recordset")Dim i%, sex$, Address$, Name$, birthDay$conString = "provider=Microsoft.ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.accdb;"cnn.Open conStringsqlString = "update students set sSex='男'"cnn.Execute sqlStringMsgBox "更新成功"cnn.CloseEnd Sub使⽤RecordSet数据库字段如下:Sub exercise()Dim cnn, rstSet cnn = CreateObject("ADODB.connection")Set rst = CreateObject("ADODB.recordset")Dim sqlStr$, conStr$conStr$ = "provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.mdb"sqlStr = "select * from students where 总分 <160"cnn.Open conStr$rst.Open sqlStr, cnn, adOpenDynamic, adLockOptimisticDo Until rst.EOFrst("总分") = 160rst.MoveNextLoopcnn.CloseEnd Sub【例3】从excel获取批量写⼊ACCESS数据库数据库字段如下:Execel数据如下:Sub exercise()Dim cnn ', rstSet cnn = CreateObject("ADODB.connection")'Set rst = CreateObject("ADODB.recordset")Dim rst As New ADODB.RecordsetDim sqlStr$, conStr$, Count%conStr$ = "provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.accdb"sqlStr = "insert into students(sName,sSex,sAddress,birthDay) select 姓名, 性别, 地址, 出⽣⽇期 from [excel 8.0;database=" & ThisWorkbook.FullName & "].[sheet2$]"cnn.Open conStr$cnn.Execute sqlStr, CountMsgBox "更新了" & Count & "条结果"cnn.CloseEnd Sub。
简单VBA、宏学习笔记对比EXCEL中的相同数据,找出不同数据(数据表的减法运算)Email:vincen20@ii使用前操作提示:1、打开VBA编辑器(1)打开VBA编辑器可以使用快捷键ALT+F11 或者点击菜单栏上工具-〉宏-〉VISUAL BASIC 编辑器(2)在编辑器的菜单栏中选择插入-〉模板,然后就可以在弹出的窗口中输入代码。
2、关于宏安全性的设定由于宏病毒的知名度,在写有宏代码的文档中,EXCEL把宏的安全性默认为比较高的级别,如果有对话框提示,请点击启用宏。
如果没有提示,宏又没有办法运行,请在菜单栏中选择工具-〉宏-〉安全性,在弹出的对话框中选择安全级别选项卡中选择中。
然后关闭EXCEL,再重新打开。
1、打开EXCEL文件程序段1:、//打开指定EXCEL文件pathfile = "D:\VBA_CODE\o\book1.xls" …pathfile为存储EXCEL文件的路径。
Workbooks.Open Filename:=pathfile …打开EXCEL文件有时为了方便修改打开的文件,可以使用变量来存储要打开的文件路径。
程序段2:、//选定指定的EXCEL、已打开的文件Workbooks("book1.xls").Activate2、引用工作表在一个EXCEL工作薄中,可以有256个工作表,这时要指定工作表。
指定工作表的命令为:命令Sheets(“sheet1”)代表工作表sheet1。
程序段://选择指定的工作表Workbooks("book1.xls") .Activate …选定指定的EXCEL、已打开的文件Sheets(“sheet1”). Activate ‟选择指定的工作表也可写成Workbooks("book1.xls"). Sheets(“sheet1”). Activate3、 引用单元格我理解的EXCEL 表是由多个小的单元格组成的,所以引用单元格可以用Cells 、Range 等命令。
excel vba -自学手册Excel VBA (Visual Basic for Applications)是一种用于自动化处理Microsoft Office应用程序(如Excel、Word和PowerPoint)的编程语言。
通过VBA,用户可以编写自定义的代码来执行各种任务,从简单的数据处理到复杂的业务逻辑。
Excel VBA基础首先,让我们来了解一些Excel VBA的基础知识。
在Excel中,使用VBA可以执行以下操作:1.宏录制(Macro Recording):通过录制宏,可以记录用户在Excel中的操作,并将这些操作转化为VBA代码。
然后,可以通过运行这些代码来自动执行录制的操作。
录制宏是入门Excel VBA的一个很好的方法。
2.编写VBA代码:通过自己编写VBA代码,可以实现更高级的自动化任务。
VBA代码可以通过集成开发环境(IDE)中的VBA编辑器进行编写。
VBA代码由一系列语句构成,这些语句可以执行特定的操作,如读取和写入单元格内容,创建图表,处理数据等。
3.事件处理程序:Excel中有许多事件,如单元格内容发生变化、工作表被激活等。
通过编写事件处理程序,可以在这些事件发生时执行特定的代码。
例如,可以在某个单元格的值发生变化时,自动更新其他相关的单元格。
Excel VBA进阶一旦掌握了Excel的基本概念和VBA的基础知识,就可以开始学习更高级的技术和技巧。
以下是一些Excel VBA的进阶主题:1.使用变量和数据类型:在VBA中,可以使用变量来存储数据,并对其进行操作。
了解不同的数据类型(如整数、字符串、日期等),以及如何声明和使用变量是非常重要的。
2.循环和条件语句:使用循环和条件语句,可以执行重复的操作或基于特定条件执行不同的操作。
例如,可以使用For循环来遍历一系列单元格,并对它们进行处理。
3.用户界面(User Interface):通过自定义用户界面,可以创建更友好的用户体验。
VBA新手学习笔记之:二级下拉菜单(字典嵌套法)如下效果图:今天这个效果所涉及的新增知识点有:1. 模块级变量的定义2. 事件程序3. 字典嵌套4. Join函数下面我们逐一来解读下这四个知识点:1.先看看什么是事件之前我们执行Excel程序都需要手动画一个按钮,然后将对应的过程指定给这个按钮,当我们需要程序运行的时候,就发送一个命令(点一下按钮)给这个程序,程序接收命令后,会按照程序的逻辑进行运行。
而事件程序是不需要手工指定按钮,而是当我们在操作Excel的时候有些动作会自动被ExcelVBA 所识别,VBA内部已经自行内置了有关此事件的过程名,我们在对应的过程中写需要执行操作的代码,当Excel的某个动作发生的时候,会自动触发执行所写的程序。
这个案例所用到的事件程序有两个:第一:单元格选区发生变化的时候:当需要填写省份的那一列的单元格选区发生变化时,需要添加去重后的省份的下拉菜单操作方法:对准需要达到效果的工作表名的位置右键——查看代码——进入工作表的代码编辑区——选择worksheet——会自动弹出(单元格选区发生变化时要执行的过程)——在该过程中写所需要的代码即可Private SubWorksheet_SelectionChange(ByVal Target As Range)End Sub第二:单元格的值发生变化的时候:当省份填写完毕后,则需要将对应省份的城市添加到城市单元格的下拉菜单,如果省份单元格没有填、则城市下拉菜单跟着消失。
操作方法:前面的操作与第一点都是一样的,调出代码窗口后——选择worksheet——在事件下拉框中选择Change事件——会自动生成(单元格值发生变化时要执行的过程)Private Sub Worksheet_Change(ByValTarget As Range)End Sub2.因为今天的两个程序中都需要使用同一个字典来做数据有效性的下拉菜单,所以用了一个字典对象的模块级变量dicSF,所谓模块级变量即在同一个模块内所有程序都能使用的变量;这里涉及到变量的作用域的问题,大家可以百度搜索下什么叫变量的作用域。
ExcelVBA学习笔记(⼀):单元格、单元格区域的表达式EXCEL表格中我们要处理的数据都位于单元格中,单元格及单元格区域怎么表⽰,就是VBA代码的基本了。
下⾯讲解⼏种常⽤的单元格、单元格区域语法表达式。
1、[A1] 最简单写法。
中括号,⾥⾯写上单元格地址,地址表述形式是列号在前,⾏号在后。
[A1:B10]表⽰A1到B10这么⼀个区域。
中括号内不需要加引号,因为中括号内不能⽤变量。
⽐如 n=10 ,[A1:B&n],是不⾏的。
2、cells(⾏号,列号)。
Cells多⽤于表⽰单个的单元格,参数是“⾏”在前,“列”在后。
Cells(1 , ”A”)表⽰的就是[A1]单元格,注意加引号“A”,不加引号会被认为是变量A。
Cells不带括号就表⽰所有单元格,之前讲到的Cells.Replace就是此⽤法。
带变量的写法:Cells(x, “A”),Cells(1, y),Cells(x,y);数字不能⽤作变量,所以数字1作为参数也不需要加引号。
变量x代表 “⾏”,变量y代表”列”,x的值只能为数字;变量y虽然可以为”A”这样的字符(下图),但通常使⽤中,都是给y赋值为数字。
语法:Cells(数字)还有这样的表⽰,见图:此表达式基本没见使⽤过,不做释义。
3、Range()本意是单元格区域的意思。
常⽤的表达式如下:(1)Range('A1') 就是单元格A1,等同于[A1]。
注意与Cells()的⾏在前,列在后顺序不同。
(2)Range('A1:B5') 从单元格A1到单元格B5区域;也可写为Range(“A1”,”B5”) 中间为逗号。
(3)Range('A1:B5 ,C1:C8') 多块区域的表达式。
(4)Range()带变量,表⽰单个单元格语法如Range(“A” & x) ,x为数字;单元格区域表达式Range('A1:F' & x) 等同于 Range('A1', 'F'&r) ,表⽰从A1到Fr区域范围。
VBA笔记道具:→案例一:代码:解析:拓展:VBA前景知识:VBA所实现的功能简单的说就是通过编写程序,用几个简单操作实现一系列的操作,以达到高效的目的,在做重复的操作时相当有效.在EXCEL中,要进入VBA编辑界面,首先要调出开发工具选项卡.按快捷键Alt+F+T到Excel选项,在自定义功能区勾选上开发工具并确定.在Excel中,宏功能是默认禁用的,因为很多病毒会通过宏传播.在使用之前需要启用该功能.按快捷键Alt+F+T到Excel选项,在信任中心→信任中心设置→宏设置→启用所有宏→确定. VBA中有对象、方法、属性.理解这些是学习VBA的基础.1、对象:工作簿、工作表、单元格、行、列等2、属性:相应对象的属性.如工作表名称、单元格的行高等属性一般理解为对象拥有的静态特性.3、方法:对相应对象所执行的动作称为对象的方法.如单元格移动、单元格删除内容等.从形状上来区别:前面带绿色图标的就是方法,带手形标志的就是属性.案例一:如何点击按钮实现简单加法运算?代码:Sub加法运算过程<>Cells<1,5>=Cells<1,1>+Cells<1,3>End sub解析:在开发工具选项卡中插入按钮控件,修改宏名为"加法运算过程",新建,这样就进入VBA编辑界面.这里的宏简单讲就是编程产生的一系列操作,而点击刚才插入的按钮就可以触发这些操作,这样一个点击操作就可以实现一系列的操作.Ctrl+S保存,这里下拉菜单中文件保存类型选成"启用宏的工作簿".因为默认文件类型是默认禁用的,很多病毒会通过宏传播,保存成xlsx则丢失代码右击按钮→编辑文字→修改为"加法".这里的加法是按钮显示出来的名称,和宏名不一样.宏是编程产生的一系列操作过程,引用宏名就代表操作这一系列过程.而按钮可以指定不同的宏过程.在开发工具选项卡中→宏→加法运算过程→编辑进入宏过程编辑界面.输入下面代码.上面代码中,sub表示宏开始,end sub 表示宏结束,"加法运算过程"是宏名,后面的括号可有可无.宏macroCells是VBA中最基本的对象,Cells<行号,列号>表示引用单元格, Cells<1,1>是指A1单元格的内容.拓展:案例二:如何点击按钮实现新建,保存,关闭,打开工作簿?代码:Workbooks.AddActiveWorkbook.SaveAs "C:\Users\Administrator\Desktop\工作簿4.xlsx"ActiveWorkbook.CloseWorkbooks.Open Filename:="C:\Users\Administrator\Desktop\工作簿1.xlsx"Workbooks<"工作簿1.xlsx">.Close解析:拓展:Workbooks.open<"路径">也可以打开文件案例三:定义函数:〔参数可以有多个,用逗号隔开〕代码:Function 乘积<a,b>乘积=a*bEnd function解析:用函数名调用这个功能,可以在VBA中调用,也可以像其它函数一样调用.括号内的参数可以有多个.拓展:系统函数:sqr<a>平方根如要在VBA中使用工作表中的函数,用Apication.worksheetfunction.公式名称〔〕直接调用括号中引用范围时,需要要用range等调用,不能用"A1"引用过程分为子过程和函数案例四:函数汇总〔〕代码:〔1〕Sub 按钮5_Click<>Dim i, j, totalDim w1 As WorksheetFor j = 2 ToWorksheets.CountSet w1 = Worksheets<j>i = 2total = 0Do While w1.Cells<i, 2> <> ""total = total + w1.Cells<i, 2>i = i + 1Loopw1.Cells<2, 3> = totalNext jEnd Sub〔2〕Sub 按钮6_Click<>'Call 按钮5_ClickDim iDim w1 As Worksheet, w2 As WorksheetSet w2 = Worksheets<1>For i = 2 ToWorksheets.CountSet w1 = Worksheets<i>w2.Cells<i, 1> = w1.Cells<1, 2>w2.Cells<i, 2> = w1.Cells<2, 3>Next iEnd Sub〔3〕Sub 按钮7_Click<>Dim i, j, totalDim w1 As Worksheet, w2 As WorksheetSet w2 = Worksheets<1>For i = 2 ToWorksheets.CountSet w1 = Worksheets<i> 'i循环工作表j = 2 'j循环成绩total = 0Do While w1.Cells<j, 2> <> ""total = total + w1.Cells<j, 2>j = j + 1Loopw1.Cells<2, 3> = totalw2.Cells<i, 1> = w1.Cells<1, 2>w2.Cells<i, 2> = w1.Cells<2, 3>Next i解析:'Call 按钮5_Click‘为程序中的注释,只起解释作用,不会运算.去掉’时,call+子过程,表示调用这个子过程.Call是过程调用的关键字,当遇到call时,先运行调用的过程,再往下运行.Sub,end sub即是一个子过程,宏是其小名.过程调用的call可以省略,只写出过程名.拓展:案例五:地址拆分代码:Sub 地址拆分<>Cells<2, 2> = Left<Cells<1, 2>, InStr<Cells<1, 2>, "县"> - 1>Cells<3, 2> = Mid<Cells<1, 2>, InStr<Cells<1, 2>, "县"> + 1, InStr<Cells<1, 2>, "路"> -InStr<Cells<1, 2>, "县"> - 1>Cells<4, 2> = Mid<Cells<1, 2>, InStr<Cells<1, 2>, "路"> + 1, InStr<Cells<1, 2>, "号"> -InStr<Cells<1, 2>, ""> - 1>End Sub解析:拓展:正则表达示处理字符串更容易案例一:三重循环汇总代码:解析:拓展:专题一:常用类、对象、属性和方法颜色:vbredRGB<r,g,b>类Application代表EXCEL本身Workbook工作簿Worksheet表Range区域上下为从属关系Cells引用单元格是range对象的属性相对于range cells可以实现循环属性Cells<行数,列数>.valueCells<行数,列数>.font.sizeCells<行数,列数>.font.color=Cells<行数,列数>字体大小Cells<行数,列数>.font.fontstyle字体加粗Cells<行数,列数>.Interior.color背景颜色Cells<行数,列数>.height单元格行高〔只能在显示中用〕Cells<行数,列数>.rowheight行高〔可以进行设置也可以进行msgbox显示〕withrange.font.color=.size=.bold=end with方法Cells<行数,列数>.selectactivecellRange引用多个单元格区域如:Range<"A1:A10,A18">,Range<cells<1,1>,cells<10,1>>属性Range.cellsRange.value让选定区域的值都为某个数.此属性可以省略,为默认值/color/italic/bold/=〔bold为粗体italic为斜休〔用ture,false确定〕range. Interior.color背景颜色range. Interior.colorindex=7背景颜色方法Range.deleteRange<"A2:D10">.SelectRange<"A2:D10">.copy 目标位置range.clearrange.clearcontentsrange.clearformats清除格式range.merge/unmerge 合并/拆分单元格Workbooks是工作簿集对象用Workbook<"办公费用">或Workbooks<3>引用某个工作表属性Workbooks.count方法Workbooks.add "路径"Workbooks.open<"路径">Workbooks.OpenFileName:="Array.xls", ReadOnly:=TrueWorkbooks.close关闭所有打开的工作簿关闭所有工作簿Workbooks<"##X">.close 关闭特定工作簿Workbooks.saveas"路径.扩展名"保存文件,此处不返回值,所以不用括号Workbooks<1>.Activate激活第一个工作簿workbook是工作簿文件对象属性Workbook.ActiveSheetWorkbook.AuthorWorkbook.savedWorkbook.path方法Workbook.ActivateWorkbook.CloseWorkbook.SaveWorkbook.SaveAs另存为This workbook当前工作簿属性Thisworkbook.path方法Thisworkbook.Active workbook活动工作簿属性Active workbook.author方法ActiveWorkbook.SaveAs Filename:="C:\Users\Administrator\Desktop\工作簿1.xlsx" Worksheets当前工作簿所有的工作表用Worksheet<"##">或Worksheets<3>引用某个工作表属性Worksheets.count方法Worksheets.AddWorksheet属性Worksheet.Visible方法Worksheet.Calculate对指定的工作表重新计算Worksheet.CopyWorksheet.MoveWorksheet.DeleteSheet1sheet2ApplicationApplication.cells表示当前活动表的单元格Application.Quit退出应用Application.activeworkbook当前活动的簿Application.activesheet当前活动的表Apication.worksheetfunction.公式名称〔〕直接调用括号中引用范围时,需要要用range等调用,不能用"A1"引用Application.displayalerts=false时,则就不会显示,强制覆盖.专题二:顺序、循环、分支三种结构顺序循环for循环指定次数.与do while 相比,for有内置的计数器〔1〕For i=1 to 20 step 1循环体Next i〔单个for时i可不写〕〔2〕For each a in b <b.count>循环体Next a如for each w in workbooks第一个工作表for each w in range第一个单元格=fori=1 to b.count循环体Next iWhile循环〔无特定终点〕While 条件循环体WendDO循环DO 〔DO开关〕LOOP<DO结尾>无限循环,可以在中间用EXIT DO终止循环.或者使用EXITSUB结束子过程.有多层循环时,跳出的是内层do 循环EXIT forExit functionExit sub可以用于退出第一次End 结束过程或块End for/function/sub/if/select单独用END结束当前过程或块Do While循环<当>Do While 条件循环体Loop其中do是循环,while是条件Do until<直到>Do until条件循环体LoopWhile和until可以放在loop之后,表示先循环再判断.For each a in bDim b as rangeFor each b in sheet1.range<"A3:A11">Next将每个单元格指定给b,多用于对象的操作分支If分支If 条件then计算Else <单个IF可不写>计算End if如果if then 所有内容在一行内,此if 可以不用end if 结束ELSEIF语句If 条件then循环体Elseif条件then计算Elseif条件then计算Else 结果End if从ABCD等级从大到小依次循环体,前面满足后面就不会执行.SELECT判断语句条件判断,像if 一样Pad="888"SELECT CASE PADCASE "888"MSGBOX "good"Case else<类似if中的else>MSGBOX "bad"END SELECTFor和if 配合使用,在一堆中找出一个跳转语句标识:Go to 标识Return<返回到go to>专题三:程序调试设置断点:在左边灰色区域点击或者F9.单独执行:F8.CTRL+F8运行到光标处F5运行CTRL+BREAK在光标处中断.调试→添加监视:输入要监视的变量,显示变量的数值,而不用动鼠标位置.调试→清除所有断点注释REM 注释语句,或’语法错误标记为红色专题四:疑问解决录制宏:记录手工,翻译成代码帮助VBA教程专题五:运算符算术运算符+-*/^求幂\整除Mod求余连接运算符&+针对字符〔&两边要加空格〕逻辑运算符and or not<符号两边的表达式都要完整,不能省> 优先级not >and>or返回true/false 运算符两边的表达式要完整才行关系/比较运算符<>=<>>=<=专题六:命名规则option explicit强制声明dim a,b,c定义变量const pi=3.14 定义常量dim w1 as worksheet/workbook/rangeset w2=worksheets.add给对象赋值要在前面加set新建保存文件:Set wb=workbooks.addWb.saveas"路径"wb.close大小写相同尽量用英文不超过256反映变量意义不能是系统已用的名字.如sub,end,if ,for,while,分为常量和变量不能以数字开头专题七:快捷键工程资源管理器:CTRL+R属性窗口:F4专题八:数据类型数据类型中文占用空间缩写Byte字节1字节0-255dim a as byte <a 只能是0-255的数字>例:Dim a as byte/dim a%超过范围将溢出DateString字符串长度$Dim a as string 不定长Dim a as string*3 定长Object对象VariantEmpty 空专题九:VBE编辑器窗口开发工具+VB;ALT+F11在工具,选项,编辑器格式中调整字体窗口工程窗口:对象,模块属性窗口编辑窗口下划线+空格+回车实现形式上的换行立即窗口在VBE的立即窗口中输入命令,回车后立即运行,大概由此而来为"立即窗口",试一下,输入:MSGBOX "ExcelHome"回车后弹出一个对话框.用得更多的是在程序调试过程中,把结果输出到立即窗口,检查程序运行结果是否正确,在代码中插入:Debug.Print S运行这一句,会把变量S的值输出到立即窗口中.debug.print的内容在立即窗口中显示本地窗口显示所有的数据插入〔可以通过菜单或者工程窗口右键〕模块窗体类模块视图:本地窗口:监视变量编辑窗口:监视变量立即窗口自定义工具编辑设置注释,解除注释块专题十:提示框Msgbox a 消息框显示aInputbox<"提示语">当保存时会弹出保存替换对话框.如果Application.displayalerts=false时,则就不会显示,强制覆盖.后面要设置成ture.专题十一:文本操作关于字符串""Replace<s,a,b>在s中用b替换a可以去掉字符串中的空格Trim<>去两边空格Lcase转换成小写ucase转换成大写,只能在VBA中用以上三个在字符串比较时有用Left<s,a>s中,左a位right<s,b>mid<s,i,a>s中,从第i位开始的a位INSTR<i,s,a> 在s中从第i个字符找a,返回的是位置值,第一个参数可以省略. Len<>字符长度双引号就是字符串的标志特殊的字符可以是空格,换行符,回车符,0字符的空串等&连接字符串时,前后有空格.变量加&有特殊含义。
Excel VBA 学习总结- 内置函数了解VBA与Excel内置的函数,能够使我们处理起任务来事半功倍。
这些函数不仅使用方便,而且效率一般都比较高(有些是例外的,特别是某些工作表函数),比我们自己写的要高效的多。
1. VBA内置的函数VBA内置函数是VBA种可以直接使用的函数,很多处理函数也相当有用。
调用方式:直接使用函数,或者使用VBA调用。
例如Shell()或者VBA.Shell()。
VBA内置的函数主要涉及以下几类:测试类函数:IsNumeric(x) - 是否为数字, 返回Boolean结果。
IsDate(x) - 是否是日期, 返回Boolean结果。
IsEmpty(x)- 是否为Empty, 返回Boolean结果。
IsArray(x) - 指出变量是否为一个数组。
IsError(expression) - 指出表达式是否为一个错误值。
IsNull(expression) - 指出表达式是否不包含任何有效数据(Null)。
IsObject(identifier) - 指出标识符是否表示对象变量。
数学函数:Sin(X)、Cos(X)、Tan(X)、Atan(x) - 三角函数,单位为弧度。
Log(x)、Exp(x) - 返回x的自然对数,指数。
Abs(x) - 返回x的绝对值。
Int(number)、Fix(number) - 都返回参数的整数部分,区别:Int 将-8.4 转换成-9,而Fix 将-8.4 转换成-8。
Sgn(number) - 返回一个Variant (Integer),指出参数的正负号。
Sqr(number) - 返回一个Double,指定参数的平方根。
VarType(varname) - 返回一个Integer,指出变量的子类型。
Rnd(x) - 返回0-1之间的单精度数据,x为随机种子。
Round(x,y) - 把x四舍五入得到保留y位小数的值。
字符串函数:Trim(string)、Ltrim(string)、Rtrim(string) - 去掉string左右两端空白,左边的空白,右边的空白。
VBA学习笔记(⼀):⾃动添加代码VBA修改注册表⼀、以下代码是通过Auto_Open事件,⾃动向ThisWorkbook⾥添加VBA代码:Private Sub Auto_Open()Call AddCodeToThisWorkbookMsgBox ("This is Auto_Open Sub !")End SubPrivate Sub AddCodeToThisWorkbook()With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule.InsertLines 1, "Private Sub Workbook_open()".InsertLines 2, " MsgBox (""This is Workbook_Open Sub !"")".InsertLines 3, "End Sub"End WithEnd Sub⼆、以下代码是通过VBA修改注册表:Sub ChangeSettings()Dim FsoDim RegKey_User_AcsVm As StringDim RegKey_User_Level As StringDim RegKey_Mach_AcsVm As StringDim RegKey_Mach_Level As StringDim RegVal_User_AcsVm As VariantDim RegVal_User_Level As VariantDim RegVal_Mach_AcsVm As VariantDim RegVal_Mach_Level As VariantDim ExcelVersion As StringOn Error Resume NextExcelVersion = Application.VersionSet Fso = CreateObject("Scripting.FileSystemObject")RegKey_User_AcsVm = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & ExcelVersion & "\Excel\Security\AccessVBOM"RegKey_User_Level = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & ExcelVersion & "\Excel\Security\Level"RegKey_Mach_AcsVm = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & ExcelVersion & "\Excel\Security\AccessVBOM"RegKey_Mach_Level = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & ExcelVersion & "\Excel\Security\Level"Value_User_AcsVm = 1Value_User_Level = 1Value_Mach_AcsVm = 1Value_Mach_Level = 1Call ModReg(RegKey_User_AcsVm, Value_User_AcsVm, "REG_DWORD")Call ModReg(RegKey_User_Level, Value_User_Level, "REG_DWORD")Call ModReg(RegKey_Mach_AcsVm, Value_Mach_AcsVm, "REG_DWORD")Call ModReg(RegKey_Mach_Level, Value_Mach_Level, "REG_DWORD")End SubSub ModReg(RegKey As String, Value As Variant, ValueType As String)Dim oWshellSet oWshell = CreateObject("WScript.Shell")If ValueType = ""ThenoWshell.RegWrite RegKey, ValueElseoWshell.RegWrite RegKey, Value, ValueTypeEnd IfSet oWshell = NothingEnd Sub三、以下函数⽤来判断⼀个⼯作簿中是否存在指定的Sheet名:Function SheetIsExist(WBookName As String,WSheetName As String) As BooleanDim Tmp_WSheet As WorksheetFor Each Tmp_WSheet In Workbooks(WBookName).WorksheetsIf UCase(Tmp_) = UCase(WSheetName) ThenSheetIsExist = TrueExit FunctionEnd IfNext Tmp_WSheetSheetIsExist = FalseEnd Function以下为调⽤SheetIsExist函数的⽰例:Sub Example01()'开始计时begin = Timer'禁⽌刷屏Application.ScreenUpdating = FalseApplication.DisplayAlerts = False'记录当前⽂件名Dim CurFileName As StringCurFileName = Sheets("Sheet1").[A1] If SheetIsExist(CurFileName, "Sheet2") ThenWorksheets("Sheet2").DeleteEnd IfIf SheetIsExist(CurFileName, "Sheet3") ThenWorksheets("Sheet3").DeleteEnd IfApplication.ScreenUpdating = TrueApplication.DisplayAlerts = Trueover = TimerMsgBox ("已运⾏完成!共运⾏" & over - begin & "s")End Sub。
第一章VBA 基础知识1-2 宏在工作中的运用1.宏的定义宏:macro形容词:巨大的;大量的;宏观的名词:[电脑]巨(宏)指令定义:一组可以让自动执行的代码(VBA)宏的录制相当于摄像机的功能。
2.总结:优点:重复执行相同操作,提高工作效率缺点:不够智能化,无法交互工作,代码冗余解决方案:VBA3.宏在excel中的地位虽然看起来不够灵活,但对于学习VBA编程却非常重要。
1.提高代码编写效率2.帮助学习VBA知识1-4 代码编写规则代码换行(下划线+空格+换行)Sub aa()Msgbox _“学习VBA”End sub1-7 属性VBA属性:指对象所具有的特性人的属性:姓名、年龄、身份证号、住址……VBA对象属性的赋值Sub 属性赋值()=”改变自己”Sheet2.range(“a1”)=”学习VBA”End sub1-8 方法方法:实际上就是对对象的操作,它是一种动作,一种行为。
Sub 选择方法()Range("a1:a10").SelectEnd SubSub 复制方法()Sheets(1).Range("a1:a10") = 1Sheets(1).Range("a1:a10").Copy Sheets(2).Range("a1")End SubSub 删除方法()Sheets(3).DeleteEnd Sub1-9 常量与变量1.常量:常量是定义了之后就不做变化了。
常量定义格式:const 常量名=常量表达式2.变量:在定义之后还能再次赋值变量定义格式:dim 变量as 变量类型3.A.VBA允许使用未定义的变量,默认是变体变量(Variant)B.变量的强制声明:Option explicit4.变量名的命名规则以字母开头不能用保留字不超过255个字符同一范围内必须是唯一1-10 数据类型类型注释简写占用内存Integer 整型%2byteSingle 单精度!4byteDouble 双精度# 8byteLong 长整型& 4byteString 字符型$ 定长或变长Currency 货币型@ 8byte1-12 IF语句VBA中的IIF函数与工作表函数IF的语法结构一致Sub iif函数应用()Cells(2,3)=iif(cells(1,2)>80,”优秀”,”不优秀”)End sub1-12B1.单行形式1(if…then)If 条件判断then 条件成立结果注意:在单行形式中,按照if…then判断的结果也可以执行多条语句。
所有语句必须在同一行上并且以冒号分开。
Sub test()If 11>10 then a=a+1:b=1+a:c=1+bEnd sub2.单行形式(if 条件判断then 条件成立else 条件不成立)Sub test2()If 2 > 1 Then MsgBox "yes" Else MsgBox "no"End Sub3.块形式(if…then…end)If 条件判断then条件成立结果End ifSub test3()If 11 > 10 Thena = 1 + ab = 1 + ac = 1 + bEnd IfEnd Sub4.块形式的if嵌套If 条件判断then成立时的结果Elseif 条件判断then成立时的结果……Else不成立时的结果End if1-13Select case 语句根据表达式的值,来决定执行几组语句中的其中之一。
sub select单条件判断()i = -1Select Case iCase Is > 0MsgBox "正数"Case ElseMsgBox "负数"End SelectEnd Sub1-14 循环语句之DO…LOOP Do……loop循环语句,直到满足某个条件Sub 基本示例()Dim a%Doa = a + 1If a > 10 ThenMsgBox a & "终于大于10"Exit DoEnd IfLoopEnd Sub1-15 循环语句do loop 实例Sub 基本示例()Dim rs%rs = 1Dors = rs + 1If rs > 10 ThenExit Do 'exit subElseIf Cells(rs, 2) >= 90 Then Cells(rs, 3) = "√"End IfLoopEnd SubSub 循环语句while()Dim rs%rs = 2Do While Cells(rs, 2) <> ""If Cells(rs, 2) > 90 Then Cells(rs, 3) = "√"rs = rs + 1LoopEnd Sub1-17 循环语句do untilSub dountil()Dim rs%rs = 2Do Until Cells(rs, 2) = ""If Cells(rs, 2) > 90 Then Cells(rs, 3) = "√"rs = rs + 1LoopEnd SubSub 隔行填色()Dim rs%rs = 2Do Until Cells(rs, 1) = ""Range("a" & rs, "c" & rs).Interior.ColorIndex = 7rs = rs + 2LoopEnd Sub1-18 循环语句之while与until位置变化While与until不但可以放在do后面,也可以放在loop后面事实上有时在循环的最后一行进行判断,更具有意义。
Sub doloop的最后判断循环()Dim pss$, i%Doi = i + 1If i > 3 Then Exit Dopss = InputBox("请输入密码:")Loop Until pss = "123"/loop while pss<>”123”End Sub1-18b do…loop语法小结'do [{while | until} 表达式]'[执行的一条或多条语句]'[exit do]'[执行的一条或多条语句]'Loop'while:当这个条件为true时就循环'until:直到这个条件为true时就跳出循环'或者可以使用下面这种语法:'Do'[执行的一条或多条语句]'[exit do]'[执行的一条或多条语句]'Loop [{while | until} 表达式]'用do…loop循环要注意的几点:'1.while与until是放在do后面还是loop后面,取决于是先判断再循环(放在do后面),还是先循环再判断(放在loop后面)'2.可以在do…loop中的任何位置放置任意个数的exit do语句,随时跳出do…loop'3.do…loop+if…then+exit do通常结合使用'4。
如果exit do使用在嵌套的do…loop语句中,则exit do会将控制权转移到exit do所在位置的外层循环。
Sub test()Dim a%Doa = a + 1If a > 5 ThenMsgBox a & "终于大于5了!"Exit DoEnd IfLoopEnd SubSub test2() '注意这是一个死循环,按f8运行(中止死循环,ctrl +暂停键)Dob = b + 1Doa = a + 1If a > 3 Then MsgBox "即将跳出内层循环": Exit Do LoopMsgBox "即将进行外层循环"LoopEnd Sub1-19 循环语句之for each next当需要处理集合成员时,一般会用for each…next,实际上就是处理对象。
Sub foreachnext()Dim rng As Range, wsh As Worksheet, n As ByteFor Each rng In Sheets(1).Range("a2:a10")If rng = "A1" Then rng.Interior.ColorIndex = 3NextFor Each wsh In Worksheetsn = n + 1Sheets(1).Cells(n, 3) = NextEnd Sub1-20 循环语句之for…next'for…next也是循环语句,与之前的do…loop不同之处在于,for next又一个内置的计数器Sub fornext循环()Dim i!, j!For i = 1 To 100j = j + iNextMsgBox jEnd SubSub fornextxh()Dim rng!For rng = 2 To 10Sheets(1).Cells(rng, 3) = Sheets(1).Cells(rng, 1) *Sheets(1).Cells(rng, 2)NextEnd Sub1-21 for…next小结与实例'for…next语句'以指定次数来重复执行一组语句'语法:'for 计数变量=初始值to 终止值[step 步长值]'[执行的一条或多条语句]'[exit for]'[执行的一条或多条语句]'next [计数变量]可以忽略不写'1.循环中可以在任何位置放置任意个exit for语句,随时退出循环'2.exit for与if…then经常一起使用,目的是:找到符合条件后,跳出循环,而不必再进行不必要的循环Sub test3()For i = 1 To 16If Cells(i, 1) = "2班" Then Exit ForNextFor j = 1 To 16If Cells(j, 1) = "3班" Then Exit ForNextMsgBox "2班的人数为:" & j - iEnd Sub'3.可以将一个for…next循环放置在另一个for…next循环中,组成嵌套循环'for i=1 to 10' for j=1 to 10' for k=1 to 10' ……' next' next'nextSub 理解计数变量的运行()For i = 1 To 2For j = 1 To 3k = "外层的第" & i & "次的,内层的第" & j & "次"NextNextEnd SubSub 九九乘法表()Dim a%, b%For a = 1 To 9For b = 1 To 9If b > a ThenExit ForElseSheets(2).Cells(a, b) = b & "×" & a & "=" & a * b End IfNextNextEnd Sub1-22 exit与end语句Exit是退出当前语句Exit do;exit for;exit function;exit subEnd结束一个过程或块End;end function;end if;end select;end sub1-23 跳转语句'GoTo Line 无条件地转移到过程中指定的行。