EXCELVBA学习笔记
- 格式:doc
- 大小:387.50 KB
- 文档页数:62
Excel中VBA编程学习笔记(一)1、注释及编码规则注释:1.单引号:可以位于句子结尾或者单独一行;2.Rem:单独一行编码规则:1.如果VB中的关键字是由多个英文字母组成,则系统自动将每个单词的首字母转换成大写字母,其余字母一律转换成小写字母。
2.对于用户自定义的变量名、过程名、函数名,VB以第一次定义的为准,以后输入的自动转换成首次的形式。
3.如果在同一行写多条语句,语句间要用冒号“:”隔开。
例如:Form1.Width = 300 : Form1.Caption = “VB!”1.如果一条语句在一行写不下,可以分多行写,续航符为:一个空格后面跟一个下划线“_”。
例如:Address = “天津市河北工业大学” + _“现代化教学中心” + _“计算机技术基础教研室”2、类模块在Excel VBA中类模块就相当于一个类,类模块的名字就是类名。
下面为定义的一个类Class1,并且有些基本属性及一个初始化函数【例】下面定义一个类Class1,Private name, sex As StringPrivate age As IntegerPublic rng As RangeSub class_initialize() '初始化sex = "男"age = 20End SubPublic Property Get GetName() As VariantGetName = nameEnd PropertyPublic Property Get GetSex() As VariantGetSex = sexEnd PropertyPublic Property Get GetAge() As IntegerGetAge = ageEnd PropertyPublic Property Let SetName(newName As String)name = newNameEnd PropertyPublic Property Let SetSex(newSex As String)sex = newSexEnd PropertyPublic Property Let SetAge(newAge As Integer)age = newAgeEnd PropertyPublic Function GetInfo() As StringGetInfo = "姓名:" & name & ";性别:" & sex & ";年龄:" & ageEnd FunctionPublic Property Get maxNumer(num As Integer) As Integer maxNumber = Application.WorksheetFunction.Max(num, age)End PropertyPublic Property Set SetBckColor(myRng As Range)myRng.Interior.ColorIndex = 3End Property新建一个过程Sub test()Set tmp = New Class1Debug.Print tmp.GetAge() '20tmp.SetName = "张三"tmp.SetAge = 23Debug.Print tmp.GetInfo() '姓名:张三;性别:男;年龄:23Set tmp.SetBckColor = Sheet3.Rows(1) ‘将Sheet3的第一行背景色设置为红色End Sub3、新建对象及常用对象新建一个模块。
EXCELVBA学习笔记第一章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 属性赋值()/doc/b016347290.html,=”改变自己”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判断的结果也可以执行多条语句。
VBA|Excel宏与VBA的12个关键知识点(小白进阶篇)1 VBA代码编辑器VBE的“模块”1.1 打开VBE(快捷键是alt+F11)→插入,即可在工程列表的“模块”下插入模块;1.2 录制的“宏”在工程列表的“模块”下查看;1.3 自定义sub过程或函数在工程列表的“模块”下编写;(网上共享的代码复制到此处即可使用)2 录了一个宏Marco1后,如何再接着录?•执行Marco1;•录制宏Marco2;•将录制的宏Marco2的内容复制到Marco1后。
3 某列的最后非空行Dim Lrow As LongLrow = Range('B' & Cells.Rows.Count).End(xlUp).Row - 14 行号与行数Range('B2').Value = ActiveCell.RowRange('B3').Value = Sheets(1).UsedRange.Rows.Count5 ThisWorkbook和ActiveWorkbookThisWorkbook指当前VBA代码所处的Workbook,ActiveWorkbook指当前活跃的Workbook相同点:如果VBA代码只对本身工作簿进行操作,则一直是相同的。
不同点:若VBA代码新建或打开了其它工作簿,则往往新建的或刚打开的是Activeworkbook,可以通过“工作簿名。
active”方法激活指定对象。
活动工作表和活动单元格:如Sheets('Sheet2').Activate即可得到ActiveSheet对象。
如cells(1,1).select,即可得到ActiveCell对象。
6 UsedRange和CurrentRegionUsedRange和CurrentRegion(不区分大小写)是应用非常频繁的两个属性,Usedrange是工作表的属性,即其使用时应该是sheets(1).usedrange、sheets(2).usedrange这种形式,而currentregion是单元格的属性,即其使用应该是range('A1').currentregion或cells(1,1).CurrentRegion这种形式。
Excel中VBA编程学习笔记(五)28、程序运行时间统计Sub test()begin_time = TimerFor i = 1 To 1000For j = 1 To 10000x = x + 1 * 2NextNextend_time = TimerMsgBox "运行用时" & Format(end_time - begin_time, "0.00") End Sub29、split函数及join函数split函数用于分割字符串并返回一个下标从0开始的数组,它包含指定的自字符串数目Dim direcSet direc = CreateObject("Scripting.Dictionary")contents = Split(Content, ",") ‘分割符为逗号For k = LBound(contents) To UBound(contents)direc(contents(k)) = direc(contents(k)) + 1NextKey = direc.KeysValue = direc.items[B1].Resize(direc.Count, 1) = Application.Transpose(Key)[C1].Resize(direc.Count, 1) = Application.Transpose(Value)jion函数返回一个字符串,该字符串通过连接某个一维数组的多个自字符串而创建的arr = [{"武汉","广州","深圳"}]res = Join(arr, ";") '得到武汉;广州;深圳30、filter函数filter函数返回一个下标从零开始的数组,该数组包含基于指定筛选条件的一个字符串数组的子集。
ExcelVBA学习笔记(1)其实很久之前我就有系统学习VBA的想法,也曾经买过书,看过一些视频,但无奈VBA从入门到入土,各种拖沓,各种原因,以至于不了了之。
这次趁疫情居家,给自己定了一个学习目标,学完B站孙兴华的VBA课程。
这里推荐B站的孙兴华老师,之前Power Query,Power BI等,我都有听他的课,感觉真是个宝藏老师。
孙老师有很多课程,Excel系列,SQL,Access,Python等等,甚至线性代数,都是无偿分享的。
如果你有兴趣可以去了解一下,当然如果你有好的学习资源,也欢迎一起分享呀。
这里记录自己的一些学习笔记,希望自己能学有所得,加油ヾ(◍°∇°◍)ノ゙01For...Next 循环语法:For 循环变量 = 初值 To 终值【Step 步长值】循环体(要循环执行的操作或计算)Next 【循环变量】【】括号内的代码可以省略。
步长值为1时可以省略。
例如新建5张工作表:Sub 新建5张工作表()Dim i As IntegerFor i = 1 To 5Worksheets.AddNextEnd Sub02Do While...loop循环语法:Do While 条件如果条件为True执行的代码……..loop同样我们来看如何新建5张工作表:Sub 新建5张工作表()Dim i As Integeri = 1Do While i<=5Worksheets.Addi=i+1LoopEnd Sub大学里我学的唯一编程课程是VB,记得没错的话,这两个循环语句应该在VB里面学过。
03For Each...Next 循环For Each...Next 循环用于针对一个数组或一个集合中的每一个元素重复执行一组代码。
语法:For Each <元素> in <集合>循环体Next元素是用来遍历集合中所有元素的变量。
例如我们提取工作表的名称:Sub 提取工作表名()Dim i, j i = 1 For Each j In Worksheets Range('A' & i) = i = i + 1 NextEnd Sub04工作表批量另存为多个PDF。
EXCEL学习笔记之VBA1、变量如果给对象项变量赋值,必须用set关键词如Set sheet=Activesheet如果加上Option Explicit则变量必须先声明后使用2、设置函数为易失性函数,让自定义函数也能重新计算秩序在Function过程中添加一行代码即可.Application.Volatile True ‘将函数设置为易失性函数3、声明动态数组(1)可以用 Dim 数组名称() As 数据类型(2)可以使用Array创建数组,如Dim arr As Variantarr=Array(1,2,3,4);(3)可以使用SplitDim arr2 As Variantarr=Split(“叶枫”,“张三”);(4)数组常用运算UBound(数组名称);’数组的最大索引号LBound(数组名称);’数组的最小索引号(5)用Join函数将一位数组合并组合成字符串arr=Split(“叶枫”,“张三”);Txt=Join(arr,”,”); ‘第二个参数为分隔个元素的分隔符,如果省略,默认使用空格。
(6) 将数组中的数据写入单元格区域arr=Split(1,2,3,4,5,6);Range.(“a1:A6”).Value=Application.WorksheetFunction.tra snpose(arr)‘transpose函数为行列转置的作用,如果只有一行不需要使用,直接赋值arr即可。
4、在vba中直接使用工作表函数要加前缀Application.WorksheetFunction如:Application.WorksheetFunction.Sum(“a1:b2”);5、区域的选择(1)引用多个不连续的区域无论有多少区域,参数都只有一个字符串,参数中各个区域的地址用逗号分隔Range("A1:B2,c1:d2").Select(2)引用多个区域的公共区域可以将Range属性的参数设置为一个用空格分隔的多个单元格地址组成的字符串如:Range("B1:B10 A4:D6").Select(3)引用两个区域围成的矩形区域设置两个用逗号隔开的参数,就可以引用这两个区域围成的矩形区域,注意与第(1)中情况的区别Range("A1:B2”,”c1:d2").Select(4)使用cells属性引用单元格Range(Cells(1,1),Cells(10,5)).Select或者Range(“A1”,”E10”).Select(5)可以使用union合并多个单元格区域Application.Union(Range("A1:B2"), Range("c1:d2")).Select '同时选中两个区域(6)Worksheet对象的UsedRange和CurrentRegion属性UseRange属性返回的总是一个矩形区域,无论这些区域是否存在空行、空列。
ExcelVBA学习笔记1:语句、对象、方法、属性很早以前就开始学习Excel VBA,下载了蓝色幻想的一套视频,每次都不得善终,前一阵硬着头皮完成了一个非常粗糙的程序后突然想把这件事做下去,所以又拿出来仔细做笔记。
以后会依次放出我的笔记,今天是第一次。
第1节宏与VBA这一节只是简单的介绍,最主要的是交给大家怎么录制宏,怎么使用宏。
在以后不会代码的情况下可以先录制宏,研究其代码,从中学习,毕竟微软的代码还是比较简洁的。
第2节语句、对象、方法、属性一、对象Excel中几个常用的对象表示方法:1、工作簿Workbooks 代表工作薄,所有的工作薄,Workbooks(n)表示已打开的第n个工作薄Workbooks(“工作薄名称”)ActiveWorkbook 正在操作的工作薄ThisWorkBook 代码所在的工作薄2、工作表Sheets(“工作表名称”),此方法可以表示所有类型的表Sheet1表示第一个插入的工作表,Sheet2表示第二个插入的工作表;看到生成的名称跟实际插入的顺序没关系Sheets(n) 表示按排序顺序,第n个工作表ActiveSheet 表示活动工作表,光标所在工作表Worksheet 也表示工作表,但不包括图表工作表、宏工作表等3、单元格Cells 所有单元格的集合Range(“单元格地址”),例如Range(“a1,c1,b2:b10”);其中,单元格地址可以是A1,也可以使R1C1Cells(行数,列数),没有双引号Activecell 正在选中或编辑的单元格Selection 正被选中或选取的单元格或单元格区域二、属性VBA属性就是VBA对象所具有的特点对象.属性=属性值Range(“a1”).Value = 100Sheets(1).Name = “工作表改名了”Sheets(“Sheet2”).Range(“a1”).Value = “abcd”Range(“A2”).Interior.ColorIndex = 3 单元格背景颜色Range(“A2”).Font.ColorIndex = 3 单元格字体颜色三、方法VBA方法是作用于VBA对象上的动作对象.方法参数名称:=参数值Range(“a1”).Copy Destionation:=Range(“a2”) 复制单元格Sheet1.Move before:=Sheets(“Sheet3”) 移动工作表。
Excel中VBA编程学习笔记(九)1、获取工作表数量及选中、激活工作表Private Sub test()Dim count As Integercount = Worksheets.count '获取工作表数量Dim name As Stringname = Worksheets(1).name '获取第一个工作表名称Worksheets(count).Select '选中最后一个工作表Worksheets(Array('StudentAttendence','studentsScore')).Select '选中多张工作表,可以同时对这些工作表进行操作Worksheets('sheet1').Activate '激活表名为sheet1的工作表End Sub注:对于激活的工作表可以使用ActiveSheet表示。
选中的工作表与激活的工作表不同,选中的工作表可以有多个,但是激活的工作表只有一个。
一般点击工作表的标签时候就会激活该工作表。
2、删除批注【例1】删除工作表中的所有批注Private Sub test()Dim tmp As CommentFor Each tmp In mentstmp.DeleteNextEnd Sub【例2】删除选中区域的所有批注Sub test2()For Each rng In SelectionIf Not ment Is Nothing Thenrng.ClearCommentsEnd IfNextEnd Sub3、添加批注及批注属性设置Range.AddComment添加批注。
If Worksheets(1).Cells(1, 1).Comment Is Nothing Then '判断是否存在批注Worksheets(1).Cells(1, 1).AddComment '添加批注Worksheets(1).Cells(1, 1).Comment.Visible = True '设置批注可见Worksheets(1).Cells(1, 1).Comment.Text Text:='Hello'Worksheets(1).Cells(1, 1).Comment.Shape.AutoShapeType = 9 '设置为椭圆形End If注:批注中的text必须设置为字符串类型,否则不显示批注内容。
excelvba学习总结【篇一:01-excel vba 学习总结 - 基础知识】excel vba 学习总结 - 基础知识1.什么是vba?当前辈们使用excel的时候,他们惊奇的发现:excel那是相当的彪悍,几乎任何的数据分析与处理,它都可以近乎完美(实际上不可能完美)完成。
但是在使用的过程中,他们也同样发现,有很多工作是要重复做的。
如果要想自动重复的完成这些工作,必须要借助其他的编程语言和工具。
微软为了简化这个过程,开发了一个通用的自动化语言,这个就是vba(visual basic for application)。
所有支持vba的应用程序都可以方便的自动化执行某些固定的步骤,除此以外,支持vba的应用程序之间也可以通过vba这个平台进行互操作。
由于这里讨论的是excel中的vba,所以我后面的总结内容都是以excel中的vba为主。
vba是vb的一个子集,它们之间有些地方是不同的:? vb程序可以独立的部署和运行,但是vba程序不能离开宿主程序运行。
vb程序是一个编译型的语言,程序需要编译后执行,而vba程序是解释执行的脚本语言。
?2.vba能做什么?知道了vba是什么东东后,那么它能干什么呢?确定的说,vba基本能做一切excel能做的事,比如打印,生成报表,分析数据,生成图表等,这是vba最大的优点。
不需要额外实现这些标准的功能,只需要简单的调用就可以了,excel已经做好了一切准备。
除了这个好处,vba其实还能处理很多的任务:? 自定义excel的外观,菜单,工具栏等。
重复执行自动化操作。
操作文件和文件夹访问数据库并执行相关操作访问网络操作xml获取系统信息操作和自动化office其它组件(支持vba的其他公司的产品也可以操作) ? ? ? ? ? ? ?除了上述的任务外,vba还有很多其它的功能有待发掘。
3. vba与macromacro是一组excel能理解并执行的命令集合。
EXCEL之VBA 学习笔记姓名:刘磊时间:2015年9目录第一章VBA基础知识 (3)第二章工作簿以及工作表的操作 (9)第三章:单元格区域操作 (14)第四章:事件程序: (36)第五章:VBA数组 (43)第一章VBA基础知识1:代码帮助:F12:代码换行:下划线+空格+回车3:.常用代码操作excel中的对象(1)、工作簿(Workbooks)Workbooks(N)第N个工作簿Workbooks ("工作簿名")ActiveWorkbook 活动工作簿ThisWorkBook 代码所在工作簿(2)、工作表(Worksheets)Sheets(N) 第N个工作表Sheets("工作表名")SheetN 第N个工作表ActiveSheet 活动工作表worksheets 与Sheets的区别(3)、单元格(cells)Range ("单元格地址")Cells(行号,列号)[A1]单元格简写Activecell 活动单元格Selection 当前被选取的区域4:常量与变量(1.)常量:常量是定义了之后就不做变化了。
常量定义格式:Const 常量名= 常量表达式(2).变量:在定义之后还能再次赋值变量定义格式:Dim 变量As 变量类型5:数据类型(1.)VBA中的常见数据类型:类型注释简写占用内存Integer 整型% 2ByteSingle 单精度! 4ByteDouble 双精度# 8ByteLong 长整型& 4ByteString 字符型$ 定长或变长( 变长字符串最多可包含大约20 亿( 2^31)个字符。
定长字符串可包含1 到大约64K ( 2^16 ) 个字符。
)Currency 货币型@ 8Byte6:if条件语句1.单行形式1(If...Then)If 条件判断Then 条件成立结果注意在单行形式中,按照If...Then 判断的结果也可以执行多条语句。
Excel中VBA编程学习笔记(十五)【例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 = "delete from students where sName='张三'"cnn.Execute sqlStringMsgBox "删除成功"cnn.CloseEnd Sub【例2】使用Recordset删除数据数据表字段如下:Sub exercise()Dim cnn ', rstSet cnn = CreateObject("ADODB.connection")'Set rst = CreateObject("ADODB.recordset")Dim rst As New ADODB.RecordsetDim sqlStr$, conStr$conStr$ = "provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.mdb"sqlStr = "select * from students where 总分 <161"cnn.Open conStr$rst.Open sqlStr, cnn, adOpenDynamic, adLockOptimisticDo Until rst.EOFrst.Deleterst.MoveNextLoopcnn.CloseEnd Sub————————————————版权声明:本文为CSDN博主「数据之道」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
ExcelVBA自学笔记一、对象、集合、属性与方法介绍1.对象对象就是客观存在的东西,是具体存在的事物,如:桌子、电脑等。
E某celVBA中的对象是指在E某cel里操作和控制的东西,如:工作表、单元格、图片等。
VBA通过代码类操作E某cel,处理数据。
编写VBA程,就是编写VBA语句引用对象,有目的的操作它。
引用对象就是指明对象的位置或名称,把它同集合里的其他对象区别开来。
2.集合集合也是对象,是包含一组相关对象(多个同种类型的对象)的对象,例如,三个工作表是同一类型的对象,可以用“工作表”来称呼它们,“工作表”为集合名称。
只要集合中发生变化,集合中的对象的位置就可能发生变化;因此,集合内任何特定对象的位置均可改变。
3.属性每个对象都有属性。
对象的属性可以理解为对象具有的特点,如颜色。
对象的属性还可以理解为对象包含的其它对象。
书写时,对象和属性之间用点(.)连接,对象在前,属性在后。
例如:Sheet1工作表的A1单元格,表示为Workheet(“heet1”).Range(“A1”)4.方法每个对象都有方法。
方法是指在对象上执行的某个动作,例如:打开工作簿、复制工作表、选中单元格,这里的打开、复制、选中即为在对象上执行的动作。
对象和方法之间用点(.)连接,对象在前,方法在后。
例如:选中A1单元格,表示为Range(“A1”).Select二、变量变量用来保存程序运行过程中需要临时保存的数据或对象。
声明变量就是指定变量的名称和可以存储的数据类型。
语法:Dim变量名A数据类型声明变量有如下4种语法:Dim变量名A数据类型本地变量Private 变量名A数据类型模块级变量Public变量名A数据类型公共变量Static 变量名A数据类型静态变量变量的作用域:决定该变量可以在哪个模块中使用。
本地变量:在一个过程中使用Dim或Static语句声明的变量,只有声明变量的语句所在的过程可以使用它。
(作用域为当前过程)模块级变量:在模块的第一个过程之前使用Dim或Private语句声明的变量,该模块里的所有过程都可以使用它。
ExcelVBA学习笔记Excel篇锁定区域第一步、选中所有单元格然后右键“设置单元格格式”选中保护选项卡,取消”锁定和隐藏复选框”的勾。
第二步、选中要锁定的单元格(也就是要保护的单元格),右键“设置单元格格式”选中保护选项卡,把”锁定和隐藏复选框”前面的勾上。
第三步、在“审阅(offeic2007版)”,“(offic2003版,在工具/保护/保护工作表)”菜单栏下找到保护工作表,弹出对话框,把“选定锁定单元格“的勾去除,把“选定未锁定的单元格”的复选框勾选(这样的话锁定的单元格将无法选取)。
如果需要可以继续插入行列,则需要在对话框里勾选“插入行“或“插入列“。
这里可以选择是否设置密码。
冻结窗口1、单击行编号(1,2,3……)—窗口—冻结窗口,可以实现编号上边的行被冻结;2、点击列标(A,B,C……)—窗口—冻结窗口,可以实现列标签左边部分被冻结;3、点击单元格—窗口—冻结窗口,可以实现单元格左边部分和上边同时被冻结。
数据列排序首先选择标题行,然后点击菜单栏的“数据”—“筛选”—“自动筛选”。
日期函数1. 计算某个月份的数据总和(日期列B,数据列D,指定日期B14)=SUMPRODUCT((MONTH($B$3:$B$400)=MONTH(B14))*$D$3:$D$400)2. 计算某个时期的数据总和(日期列B,数据列F,指定日期C4/C5)=SUMPRODUCT((B$3:B$400<=C5)*(B$3:B$400>=C4)*F$3:F$400)3. 时间判断函数,如果今天与指定日期l6的日期间隔小于30天,显示"需要续租"=IF(DATEDIF(TODAY(), I6, "d")<30, "需要续租","正常")函数技巧1. 使用$来锁定行或列,以后拖拉单元格时不会自动变化,例如=sum(F$3:F$400)2. 用连字符“&”来合并文本(此处假定将B、C、D列合并到一列中)=B1&C1&D13. 文本提取函数(RIGHT,LEFT,MID)=MID(A5,4,2)4. 财务填充函数(REPT)在A2单元格里的数字结尾处用“#”号填充至16位=A2&REPT("#",16-LEN(A2))5. 引用其他数据表的单元格<数据表名>!<单元格名>自定义数据颜色在工资表中,如果想让大于等于2000元的工资总额以“红色”显示,大于等于1500元的工资总额以“蓝色”显示,低于1000元的工资总额以“棕色”显示,其它以“黑色”显示,我们可以这样设置。
Excel中VBA编程学习笔记(十三)使用函数GetAllSettings(aooName,section)可以获取程序或者工程appName下的section区域的所有注册表项及值;使用函数SaveSetting appName,section,key,value为注册表项设置值;GetSetting(appName,section,key [,default])返回指定注册表项的值;DeleteSetting appName,section [,key]删除注册表项,如果不带key参数则删除整个区域的注册表项。
【例1】Sub test()Const appName = "ExcelBookA"Const section = "UsedInformation"Const key1 = "第一次打开时间"Const key2 = "上次打开时间"Const key3 = "打开总次数"Dim i%Dim arr As VariantDim strInfo$arr = GetAllSettings(appName, section)If Not IsArray(arr) Then ‘如果注册表项存在则返回一个数组SaveSetting appName, section, key1, Now()SaveSetting appName, section, key2, "没有记录"SaveSetting appName, section, key3, 0End Ifi = GetSetting(appName, section, key3)SaveSetting appName, section, key3, i + 1arr = GetAllSettings(appName, section)strInfo = "以下是当前工作薄的使用情况:" & vbCrFor i = LBound(arr) To UBound(arr)strInfo = strInfo & vbCr & arr(i, 0) & ":" & arr(i, 1)NextstrInfo = strInfo & vbCr & vbCr & "要清除记录信息吗?"If MsgBox(strInfo, vbDefaultButton1 + vbYesNo) = vbYes ThenDeleteSetting appNameElseSaveSetting appName, section, key2, NowEnd IfEnd Sub打开注册表可以看到写入的注册表信息。
Excel.VBA新手学习笔记之:九九看循环首先咱们要知道一些编程的基础知识一、编程文件保存格式:2003版本office:“.xls”2007版及以后:“xlsm”其他格式就不要去乱存了,你要是好奇心爆发一定要用其他格式保存有代码的表格我也不拦你,那什么代码无辜消失或代码部分功能失效的风险你就得自己扛着啦。
二、打开VBE编辑窗口快捷键:ALT F11======我是正文分割线=======好了说了很多废话,终于要进入正题了,今天咱们看看从九九乘法表的案例里如何理解VBA中的循环结构案例:用VBA写一个程序,生成九九乘法表,效果如下:代码如下:蓝色字体均为注释内容涉及到的知识点:1. 过程的开头和结尾,少一样都不行开头:Sub 过程名()结尾:End Sub2. 定义变量:变量名可以根据自己需要来定义,但是使用变量前必须定义语法:dim 变量名 as 变量类型常用的变量类型: String 文本;Integer 整型;Long 长整型;Single小数;3. For 循环结构:For 变量 = 1 to 9 (step 1)循环体Next 变量解释:step 1即表示变量按1 “步长值”进行累加,每累加一次就执行一次循环体,当“步长值”是1时,可以省略不写,其他的都要指定。
4. 单元格的表示方法:表示A1单元格的几种方法1)Range(“A1”)range()里面直接用“单元格地址”的列标&行号表示,并用引号引起来;表示区域可以在首尾单元格地址中间加上“:”2)cells(1,1) cells()里面逗号前面表示行号,逗号后面表示列号,A1单元格是在表格的第一行,第一列5. 需要了解代码运行规律(原理),可按键盘上的F8键做单步调试(学习代码必须要先学会调试)操作方法:1)在VBE编辑窗口-视图-本地窗口2)将鼠标定位在程序中间任意位置(即sub和End Sub 之间)3)按F8关注每行代码运行之后留意本地窗口和表格结果区域的值的变化。
第一章 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").CopySheets(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 SubSub test1()Dim fs%fs = InputBox("请输入考试分数:")Select Case fsCase 90 To 100MsgBox "优秀!"Case 80 To 89MsgBox "良好!"Case 60 To 79MsgBox "中等!"Case 0 To 59MsgBox "差等!"Case ElseMsgBox "输入的分数超出正常范围!" End SelectEnd Sub1-14 循环语句之DO…LOOPD o……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 DoLoopMsgBox "即将进行外层循环"LoopEnd Sub1-19 循环语句之for each next当需要处理集合成员时,一般会用for each…next,实际上就是处理对象。
Sub foreachnext()Dim rng As Range, wsh As Worksheet, n As Byte For Each rng In Sheets(1).Range("a2:a10")11 / 62If 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,12 / 621) * 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 For13 / 62NextMsgBox "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%14 / 62For a = 1 To 9For b = 1 To 9If b > a ThenExit ForElseSheets(2).Cells(a, b) = b & "×" & a & "=" & a * bEnd IfNextNextEnd Sub1-22 exit与end语句Exit是退出当前语句Exit do;exit for;exit function;exit subEnd结束一个过程或块End;end function;end if;end select;end sub 1-23 跳转语句'GoTo Line 无条件地转移到过程中指定的行。