VBA学习记录
- 格式:doc
- 大小:80.00 KB
- 文档页数:10
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、新建对象及常用对象新建一个模块。
1、常量2、定义变量Dim 变量名称[as 数据类型或者对象类型]3、数据类型VBA 的数据类型有数值型、字符型、日期型、布尔型、对象型、变体型等,每种类型对应一种应用。
4、数组例子:Dim score(1 To 50) As IntegerDim i As IntegerFor i=0 To 50score(i) = InputBox("请输入第" + i + "个学生的成绩")Next i“Dim score(1 To 50) As Integer”,这个语句声明了一个一维数组,score 是数组名,1 到50 为下标的范围,这个数组共有50 个元素,每个元素的类型为整型(Integer)。
表示数组中各个元素的方法是score(1),score(2),score(3)…score(50)。
5、静态数组在声明数组的同时,确定了数组的元素的个数,这样的数组为静态数组。
声明数组的形式如下。
其中下标的个数决定了数组的维数,在VB 中最多允许60 维的数组。
Dim 数组名(下标1[,下标2…])[As 类型]一维数组的形式如下。
其中下标的形式为:[下界To]上界,下标下界最小可为-32768,最大上界为32767。
如果下界省略,则其默认值为0。
一维数组的大小为:上界-下界+1。
Dim 数组名(下标) [As 类型]例如:Dim a(5) As Integer 这条语句声明了一个含有6 个整型元素的数组,这六个元素分别用a(0)~a(5)来表示。
注意:数组的下标在声明时不可以是变量,如:n=10,然后定义Dim a(n) As Integer 这样定义是非法的。
多维数组域一维数组是类似的。
例如:Dim a(2,3) As Integer这条语句声明了一个二维数组,这个二维数组的排列如下:a(0,0) a(0,1) a(0,2) a(0,3)a(1,0) a(1,1) a(1,2) a(1,3)a(2,0) a(2,1) a(2,2) a(2,3)这个二维数组的第一维的范围是0~2,第二维的范围是0~3。
【整理】word vba学习记录Version:2011-01-06Author: green-waste (at) 【看帖前必读】1.此贴目的:只是为了记录最近在接触学习word vba的过程中,一些心得和体会或者是学习时候要注意的一些方面,特此记录,以备后差或他人借鉴。
2.看之前,读者最好具有基本的编程相关知识和基本的VB的基础,以便更好理解所说的内容。
3. 此贴所写内容,多为本人整理或自己的理解,如果有误,欢迎指正:green-waste (at) 【Word VBA学习记录】1.什么是word vba?为何要用VBA?什么是VBA?为什么要学习VBA?=========VBA是Visual Basic For Application的简称,换句话说,就是将VB应用于Application应用程序,此处的Application指的是微软的Excel,word等应用程序。
所以,对于我用到的,在word里面写宏,去实现一些操作,用到的VB,就是Word VBA了。
而其他常用的,还有Excel里面也会用到用宏去实现一些根据自己需求实现的一些功能,比如自动提取一些内容到一个文档中,否则,自己手动慢慢地复制粘贴,往往效率极低,累死你不说,还不容易保证完全正确,而通过宏来处理,运行一下宏,点击一下某个菜单等,即可实现要做的事情,高效,准确。
就像别人说的,除了“Excel本身的内置函数其实已经很强大了”,但是只是很强大,有些更高级或复杂的操作,还是宏实现起来更方便和快捷。
再简而言之,如果你不是需要对某(些)文档特殊处理,只是一般的使用word或excel文档,多数人都是用不到的。
而如果有类似于我这样的需求,将某个word文档中的很多表格中的符合某些特定条件的某些列的内容,经过一定条件判断,将对应的值提取到一个xml文档中,并且输出的时候,要将该值根据某些约定,再分成几个部分等等,这类的操作,手动实现,要一个个去找对应的表格,然后找到对应的值,然后手动复制,粘贴,一点点做,效率很低,而如果可以用宏实现,只需要写好宏代码,运行一下,即可省去大量的精力。
Word VBA 学习记录(Paragraphs对象)2、Paragraphs对象Paragraphs对象有多个上级对象,有:Document、Range、Selection;Paragraphs 表示前三个对象中的段落的集合。
访问方法:1)、application.Documents.item(1). Paragraphs也可缩写为ActiveDocument. Paragraphs,表示当前文档2)、selection. Paragraphs属性:1)、AddSpaceBetweenFarEastAndAlpha属性意义:给段落中的中文文字与拉丁文字之间自动添加少量间距(不是空格),效果差异很小,不是特别明显,见下方两对比图。
调用方法:ActiveDocument.Paragraphs(1).AddSpaceBetweenFarEastAndAlpha = True2)、AddSpaceBetweenFarEastAndDigit属性意义:给段落中的中文文字与数字之间自动添加少量间距(不是空格),效果差异很小,不是特别明显,效果同上。
调用方法:ActiveDocument.Paragraphs(1).AddSpaceBetweenFarEastAndDigit = True3)、Alignment属性意义:设置段落的对齐方式调用方法:Selection.paragraphs.Alignment=常量值常量值有很多种,分别如下:4)、AutoAdjustRightIndent属性意义:是否按指定的每行字符数自动调整段落的右缩进调用方法:此属性未了解清楚,暂未给出代码5)、BaseLineAlignment属性意义:设置段落对象的垂直对齐方式调用方法:Selection.paragraphs.BaseLineAlignment=常量值常量值有很多种,分别如下:6)、CharacterUnitFirstLineIndent属性意义:设置段落首行缩进或悬挂缩进调用方法:Selection.paragraphs.CharacterUnitFirstLineIndent = 2 ‘首行缩进2个字符Selection.paragraphs.CharacterUnitFirstLineIndent = -2 ‘悬挂缩进2个字符7)、CharacterUnitLeftIndent属性意义:设置段落左缩进字符数调用方法:Selection.paragraphs.CharacterUnitLeftIndent= 2 ‘段落左缩进为2个字符8)、Cout属性意义:显示段落的数目,以下代码将会依次通过弹出对话框的形式显示各段落的文字内容(是从基数1开始,而非0)调用方法:Dim i As IntegerFor i = 1 To Selection.paragraphs.CountMsgBox Selection.paragraphs.Item(i)Next9)、First、Last属性意义:选中段落中的第一个、最后一个段落调用方法:Dim i As IntegerFor i = 1 To Selection.paragraphs.CountMsgBox Selection.paragraphs.Item(i)Next10)、KeepTogether属性意义:对文档重新分页时,指定段落中的所有行保持在同一页上。
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(1)- 写在前面的话各位爱好钻研Office技术的网友,你们好!从今天开始,我将在我的博客中增加一个新的文章类别,即“和网友一起学VBA(Visual Basic for Application)”,简称“网友学VBA”。
我将把它作为一个专门系列,与我博客中的文学系列和税务系列并存,长期地写下去,同网友们一起交流学习心得,分享学习经验,共同提高VBA编程水平。
在实践中,VBA在Excel当中应用得最为广泛,也最有价值,能够高效、灵活地扩展Excel的功能,为处理大批量的、复杂的数据带来方便。
因此,我们的讨论将以Excel VBA为主要内容,兼顾其他Office组件。
我个人认为,修炼Excel高手有三个层次。
第一层是能够熟练地制作电子表格,并运用一些常用的、简单的公式进行计算;第二层是能够成功地运用一些高级函数以及Excel自身的高级功能分析数据,进行一些较为复杂的数据处理工作;第三层就是利用VBA技术扩展Excel的功能,对Excel进行二次开发,让它按照我们的意愿去处理相应的工作。
通过学习和使用VBA技术,我们会看到Excel的另一片天地,这也是我们之所以要努力修炼到第三层的目的:我们要随心所欲地让Excel老老实实地为我们工作。
需要说明的是,我不是在写教科书,所以今后我们交流的内容,将不会以各种概念为主,而会以实例和操作为主,而且介绍的实例也以能解决我们的实际问题为主。
在学习过程中,我将参考一些专业书籍,选用一些网络上流行的代码,在此就不一一注明原出处。
对其中可能引用的部分经典代码,在此先向原编写者致谢。
好了,从现在开始,让我们携手共同走进Office VBA的神奇世界。
网友学VBA(2)- 什么是VBA我第一次亲密接触VBA时,还在做一种叫“税收会计”的工作。
在使用Excel办公时,我对一次又一次的重复任务感到厌倦,就想找到一种能够自动重复任务的办法。
很快,我在Excel中发现了“宏”,发现它就是我要的东西,大喜!之后,我又发现了“VBA”,狂喜!说心里话,我其实不喜欢VBA,所有与编程有关的东西我都不喜欢。
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属性返回的总是一个矩形区域,无论这些区域是否存在空行、空列。
VBA入门笔记VBA始终是我绕不过的坎,因此利用了一些休息的时间着重的学习了语法。
学习以及运行环境在Office2019 Excel中进行。
VBA和VB语法大致相同底层应该是有差异的,学习VBA之后可以一边看着文档一边尝试VB窗体开发或者操作数据库,个人感受VBA 入门比较简单,和其他语言一样,入门简单精通难对于我们这个群体而言也没有必要要求自己达到程序员水平;坊间传言VBA要过时了,未来office中的脚本语言将会被python 或者JavaScript替代,可能以后会,但是VBA庞大的用户群体使用习惯不是一朝一夕就能改变的,除过officen内置了VBA 还有WPS 大名鼎鼎的CAD 工控界上位机WINCC FT-View,所以VBA还暂时不会淘汰不过!Protal WinCC Unifled是西门子最新的SCADA软件,其脚本语言已变成了JavaScript,IT&OT的界限将逐渐模糊……VBA的基本数据类型比较常用的数据类型主要有整型和浮点型,字符串说明数据类型简化后的申明符号占用字节数字节型Byte 1整型Integer % 2长整型Long & 4单精度浮点型Single ! 4双精度浮点型Double # 8货币型Currency @ 8字符型String $ 每字符占1字节布尔型Boolean日期型Date 8变体型Variant 不确定对象型Object 4字符串string型是指一切可以打印的字符与字符串一个西文字符占用一个字节,一个中文占用2字节•边长字符串随着赋值的变化而改变长度的字符串变量•定长字符串字符变量在声明时候进行限制例如: Dim str As String*10 (类型关键字*10 )表示长度为10字节的定长字符串。
Variant可变(Variant)类型数据能够根据赋值对象的类型变化和转换角色。
不建议使用Variant型,容易产生混乱。
自定义数据类型类似C语言的结构体(PLC中的UDT),可以自定义数据模板使用案例如下1'定义用户数据结构2Public Type myType3 member01 As Integer4 member02 As String5 member03 As Single6 member04 As Boolean7End Type8910Sub ok()1112Dim x As myType'声明用户自定义类型变量 x1314'使用该结构体的成员此处的赋值可以使用with语句处理15x.member01 = 123416x.member02 = 'hello world'17x.member03 = 3.14159318x.member04 = True1920'输出成员中的值21MsgBox (x.member01 & x.member02 & x.member03 & x. member04)2223End Sub输出结果如下:枚举数据类型声明枚举时从代码的开头处声明前面加上Public关键字枚举成员默认从0开始向后排序,用户可以指定枚举成员的初始值1Public Enum color2 red '可以给第一个赋一个初始值后面成员会自动递增3 orange4 yello5 green6 blue7 indigo8 purple9End Enum1011Sub AAA()12Dim x As Integer, y As Integer13x = color.green14y = color.purple1516MsgBox (x & y)'输出 3 617End Sub变量声明符号常量的使用下例中用Pi来替代3.141593的值,系统会根据表达式的值决定Pi 的数据类型。
第一课
(1)单元格的引用
代码:
Sub Rngselect()
Sheet1.range(“A1:F6,B1:C5”).select
End sub
效果:
解析:
Range 属性返回一个Range对象,该对象代表一个单元格或单元格区域,语法如下:Range(Cell1,Cell2)
参数Cell1是必须的,必须是“A1”样式引用的宏语言,可包括区域操作符(冒号)、相交区域操作符(空格)或合并区域操作符(逗号)。
也可包括美元符号(即绝对引用地址,如“$A$1”)。
可在区域中任一部分使用局部定义名称,如Range(“B2:LastCell”)。
其中LastCell 为已定义的单元格区域名称。
参数Cell为可选的,区域左上角和右下角的单元格。
LastCell不只是你存在有数值的单元格,你曾经编辑过的单元格也算在内,虽然它现在无内容。
你可以利用编辑中的定位---最后一个单元格试试。
注意:
如果没有使用对象识别符,range属性返回活动表的一个区域,如果活动表不是工作表,则属性无效。
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 判断的结果也可以执行多条语句。
VBA语法VBA语法 (1)1.声明变量 (3)1.1.Dim 变量名 As 数据类型 (3)1.2.Private 变量名 As 数据类型 (3)1.3.Public 变量名 As 数据类型 (3)1.4.Static 变量名 As 数据类型 (3)2.变量赋值 (4)2.1.Let 变量名称=要存储的数据 (4)2.2.Set 变量名称=要存储的对象名称 (4)3.类型声名符 (4)3.1.Integer % (4)3.2.Long & (4)3.3.Single ! (4)3.4.Double # (4)3.5.Currency @ (4)3.6.String $ (4)4.变量作用域 (4)4.1.单个过程 (4)4.2.单个模块 (4)4.3.所有模块 (4)5.数组 (4)5.1.Public/Dim 数组名称(a to b) as 数据类型 (4)5.2.Dim 数组名称() as 数据类型 (4)5.3.Array与Split函数创建数组 (4)5.4.UBound与LBound函数 (4)5.5.将数组数据写入单元格 (5)6.声明常量 (5)6.1.Const 常量名称 As 数据类型=存储在常量中的数据 (5)7.控制程序执行的基本语句 (5)7.1.if then else (5)7.2.select case (5)7.3.for next (5)7.4.for each next (5)7.5.do while (5)7.6.do until (5)7.7.go to (5)7.8.with (5)8.过程的调用 (5)8.1.直接引用过程名 (5)8.2.使用关键字call+过程名调用 (5)8.3.使用application对象的run方法 (5)9.Excel常用对象 (5)9.1.Application对象 (5)9.1.1.application.screenupdating=true/false (5)9.1.2.application.displayalerts=true/false (6)9.1.3.application.worksheetfunction (6)9.1.4.定义子对象的位置 (6)9.2.workbooks调用对象语句 (6)9.2.1.Range("b2") = Range("b3") = ThisWorkbook.PathRange("b4") = ThisWorkbook.FullName (6)9.2.2.workbooks add Template="模板带地址名称" (6)9.2.3.workbooks open="文件带地址名称" (6)9.2.4.workbooks save/as save 保存和另存,另存要注明地址 (6)9.2.5.workbooks close workbooks("book1") close 关闭所有和一个的区别 (6)9.3.worksheets调用对象 (6)9.3.1.worksheets add(before after count)添加一个工作表 (6) 为工作表命名 (6)9.3.3.worksheets("sheet1").delete 删除工作表 (6)9.3.4.worksheets.select/active 激活工作表 (6)9.3.5.worksheets(1).copy 复制活动工作簿到新的工作簿中 (6)9.3.6.worksheets(1).move上同 (6)9.3.7.worksheets(1).visible=fales worksheets(1).visible=xlSheetHiddenworksheets(1).visible=0 (6)9.3.8.worksheets(1).visible=xlSheetVeryHidden worksheets(1).visible=2 (7)9.3.9.worksheets(1).visible=true worksheets(1).visible=xlSheetVisibleworksheets(1)=1 worksheets(1)=-1 (7)9.3.10.worksheets.count统计有几张工作表 (7)9.4.range对象的属性 (7)9.4.1.offset(参数1,参数2),通过两个参数可以对指定区域进行偏移 (7)9.4.2.resize(参数1,参数2),以指定区域为中心扩充或缩小区域 (7)9.4.3.worksheets对象的usedrange属性,edrange.select 返回使用单元格的矩形区域 (7)9.4.4.range对象的CurrentRegion属性,range("B5").CurrentRegion.select 返回以range对象为中心的连续矩形区域 (7)9.4.5.range对象的end属性,end参数: xltoleft,xltoright,xlup,xldown 79.4.6.单元格的value、rows、columns、count、address属性 (7)9.4.7.源单元格区域.Copy/Cut Destination:=目标单元格 (7)10.分支主题 10 (7)Option Explicit (7)1.声明变量参见:Option Explicit1.1.Dim 变量名 As 数据类型1.2.Private 变量名 As 数据类型1.3.Public 变量名 As 数据类型1.4.Static 变量名 As 数据类型2.变量赋值2.1.Let 变量名称=要存储的数据2.2.Set 变量名称=要存储的对象名称3.类型声名符3.1.Integer %3.2.Long &3.3.Single !3.4.Double #3.5.Currency @3.6.String $4.变量作用域4.1.单个过程4.2.单个模块4.3.所有模块5.数组5.1.Public/Dim 数组名称(a to b) as 数据类型5.2.Dim 数组名称() as 数据类型5.3.Array与Split函数创建数组5.4.UBound与LBound函数5.5.将数组数据写入单元格6.声明常量6.1.Const 常量名称 As 数据类型=存储在常量中的数据7.控制程序执行的基本语句7.1.if then else7.2.select case7.3.for next7.4.for each next7.5.do while7.6.do until7.7.go to7.8.with8.过程的调用8.1.直接引用过程名8.2.使用关键字call+过程名调用8.3.使用application对象的run方法9.Excel常用对象9.1.Application对象9.1.1.application.screenupdating=true/false9.1.2.application.displayalerts=true/false9.1.3.application.worksheetfunction9.1.4.定义子对象的位置9.2.workbooks调用对象语句9.2.1.Range("b2") = Range("b3") = ThisWorkbook.PathRange("b4") = ThisWorkbook.FullName9.2.2.workbooks add Template="模板带地址名称"9.2.3.workbooks open="文件带地址名称"9.2.4.workbooks save/as save 保存和另存,另存要注明地址9.2.5.workbooks close workbooks("book1") close 关闭所有和一个的区别9.3.worksheets调用对象9.3.1.worksheets add(before after count)添加一个工作表 为工作表命名9.3.3.worksheets("sheet1").delete 删除工作表9.3.4.worksheets.select/active 激活工作表9.3.5.worksheets(1).copy 复制活动工作簿到新的工作簿中9.3.6.worksheets(1).move上同9.3.7.worksheets(1).visible=falesworksheets(1).visible=xlSheetHiddenworksheets(1).visible=09.3.8.worksheets(1).visible=xlSheetVeryHiddenworksheets(1).visible=29.3.9.worksheets(1).visible=trueworksheets(1).visible=xlSheetVisibleworksheets(1)=1worksheets(1)=-19.3.10.worksheets.count统计有几张工作表9.4.range对象的属性9.4.1.offset(参数1,参数2),通过两个参数可以对指定区域进行偏移9.4.2.resize(参数1,参数2),以指定区域为中心扩充或缩小区域9.4.3.worksheets对象的usedrange属性,edrange.select返回使用单元格的矩形区域9.4.4.range对象的CurrentRegion属性,range("B5").CurrentRegion.select返回以range对象为中心的连续矩形区域9.4.5.range对象的end属性,end参数:xltoleft,xltoright,xlup,xldown9.4.6.单元格的value、rows、columns、count、address属性9.4.7.源单元格区域.Copy/Cut Destination:=目标单元格10.分支主题 10Option Explicit参见:声明变量。
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 判断的结果也可以执行多条语句。
VBA学习记录范文在学习VBA的过程中,我遇到了很多挑战,但也从中获得了很多收获。
以下是我个人的VBA学习记录。
首先,我开始了解VBA是什么以及它的应用领域。
VBA全称是Visual Basic for Applications,是一种宏语言,用于在Microsoft Office应用程序(如Excel、Word和Access)中编写自定义的宏和程序。
通过学习VBA,我可以提高自己在办公软件中的工作效率,定制化各种功能,并在处理大量数据时实现自动化。
我开始的第一部分是学习VBA的基本语法和编程概念。
我首先了解了VBA的变量类型和声明方法,包括整型、字符串、布尔型等。
然后,我学习了如何使用条件语句和循环语句进行逻辑控制,如If语句、For循环和While循环等。
通过掌握这些基本语法,我能够编写简单的VBA程序。
接下来,我开始学习VBA的对象模型和常用对象的属性和方法。
我通过阅读相关教程和参考书籍了解了Excel的对象模型,并学习了如何使用VBA来操作Excel工作簿、工作表和单元格。
我还学习了Word和Access的对象模型,以扩展我的能力,并在实际项目中应用VBA来处理文档和数据库。
在学习过程中,我还积累了一些实用的技巧。
例如,我学会了如何使用VBA来处理大量数据,如筛选和排序数据,并进行数据分析和图表绘制。
我还学会了如何使用VBA来自动化Excel报表的生成和更新,以及如何使用VBA来进行数据的导入和导出。
除了基本的VBA语法和编程技巧,我还学习了一些高级的概念和技术。
例如,我学习了如何使用VBA来调用外部库和API,以实现更复杂的功能。
我还学习了如何使用VBA来处理不同文件格式的数据,如CSV、XML和JSON等。
通过学习这些高级技术,我能够解决更复杂的问题,并开发更强大的VBA程序。
在学习VBA的过程中,我还参加了一些在线培训和编程竞赛。
通过和其他学习者的交流和比较,我不断提高自己的编程水平,并拓宽了自己的知识面。
VBA学习笔记----谢勋圣一、单元格在VBA的表示方法: (1)二、工作表在VBA中表示方法:sheets("工作表名") (1)三、区域的表示方法:RANGE(CELLS(),CELLS()) (1)四、清除按钮代码表示方法:Range("A1:A22").ClearContents (1)五、对话框的表示方法: (1)2、三键选择对话框: (1)3、两键选择对话框: (2)六、编程中调用自定义函数的表示方法:Application.CountIf (2)七、把打开的某个工作设为当前工作薄的表示方法: (2)八、一次新建多个工作薄并存盘的表示方法: (2)九、关闭工作薄的表示方法: (3)十、颜色的表示方法: (3)十一、名称和标志 (3)1、名称: (3)2、标志: (4)十二、Visual Basic 常数 (5)1、Miscellaneous 常数 (5)2、Keycode 常数 (5)3、MsgBox 常数 (10)十三、Call 语句 (12)1、语法 (13)2、说明 (13)3、Call 语句示例 (13):=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _ (19)十四、Excel VBA编程的常用代码 (21)1、使用Dim语句 (21)2、强制声明变量 (21)3、声明常数 (21)4、选择当前单元格所在区域 (21)5、返回当前单元格中数据删除前后空格后的值 (21)6、单元格位移 (22)7、给当前单元格赋值 (22)8、给指定单元格赋值 (22)9、隐藏工作表 (22)10、打印预览 (22)11、得到当前单元格的地址 (23)12、得到当前日期及时间 (23)13、保护工作簿 (23)14、取消保护工作簿 (23)15、给活动工作表改名为"liu" (23)16、打开一个应用程序 (23)17、增加一个工作表 (23)18、删除活动工作表 (23)19、打开一个工作簿文件 (23)20、关闭活动窗口 (23)21、单元格格式 (23)22、With 语句 (24)23、清除单元格 (24)24、返回选定区域的行数 (24)25、返回选定区域的列数 (24)26、返回选定区域的地址 (24)27、忽略所有的错误 (24)28、遇错跳转 (24)29、删除一个文件 (24)30、定制自己的状态栏 (24)31、恢复自己的状态栏 (24)32、用代码执行一个宏 (24)33、滚动窗口到a1的位置 (25)34、定制系统日期 (25)35、返回当天的时间 (25)36、inputbox<输入框> (25)37、得到一个文件名 (25)38、打开zoom对话框 (25)39、激活字体对话框 (25)40、打开另存对话框 (25)十五、两个层面运行宏的方法 (25)十六、DblClick 事件 (27)1、语法 (27)2、说明 (27)3、DblClick 事件、CanPaste 属性、Paset 和Copy 方法示例 (28)十七、BeforeDragOver 事件 (30)十八、BeforeDropOrPaste 事件 (33)十九、Change 事件 (35)二十、Click 事件 (37)二十一、Enter、Exit 事件 (39)二十二、Error 事件 (40)二十三、KeyDown 和KeyUp 事件 (41)二十四、KeyPress 事件 (43)二十五、MouseDown 和MouseUp 事件 (45)二十六、MouseMove 事件 (47)二十七、晴雨表 .......................................................................................................... 错误!未定义书签。
1.统计A1:A10单元格内底色为黄色的个数Function countcolorDim rng as rangeFor each rng in range(“A1:A10”)If rng.interior.color=RGB(255,255,0) ThenCountcolor=Countcolor+1End ifNext rngEnd Function2.用颜色索引号来引用颜色Range(“A1”).interior.ColorIndex=6 黄色3.要统计的单元格不是固定的,用参数指定计算区域Function CountColor(arr as Range)Dim rng as rangeFor Each rng in arrIf rng.interior.color=RGB(255,255,0) ThenCountcolor= countcolor+1End ifNext rngEnd function4.给自定义函数指定第2个参数Function CountColor(arr as Range,c as range)Dim rng as rangeFor each rng in arrIf rng.interior.color= c.inerior.color ThenCountcolor=countcolor+1End ifNext rngEnd Function5.设置自定义函数为易失性函数: 在函数开始添加Application.volatile True F9键重算工作表6.只显示最终运行结果,而不显示运行过程Sub inputtest ()Cells.Clearcontents ‘清除表中所有数据Application.ScreenUpdating=FlaseRange(“A1:A10”)=100Range(“B::B10”)=200Application.ScreenUpdating= trueEnd sub7.取消显示警告对话框Sub DelSht()Dim sht as worksheetApplication.DisplayAlerts=FalseFor each sht in worksheetsIf <> ThenSht.deleteEnd ifNextApplication.DisplayAlerts= true ‘displayalerts是要加s的。
End sub8.自动写入单元格地址Private Sub Worksheet_SelectionChange(ByVal target As Range)target.Value = target.AddressEnd Sub9.禁用事件(1)Private Sub Worksheet_SelectionChange(ByVal target As Range)‘选中一个单元格后就显示该单元格的地址target.Value = target.Addresstarget.Offset(1, 0).Select ’程序结束前,选中新的单元格。
选中新的单元格会再次运行这个过程,因此造成了死循环。
End Sub(2) 虽然执行了第四行,但并没有触发重新执行该过程,而通过第五行得到的结果是在执行了第四行后,只是选择了下一个单元格,而没有重新执行该过程。
——禁用整个过程。
Private Sub Worksheet_SelectionChange(ByVal target As Range) ’在工作表中的自动生成的句子。
target.Value = target.Addressapplication.enableEvents= falsetarget.Offset(1, 0).Selectapplication.enableEvents= trueEnd sub10.在VBA里面没有countif 函数,可以使用Application对象WorksheetFunction属性调用工作表函数。
A1:B50单元格中数值大于1000的单元格有多少个。
Sub Countest()Dim mycount as integerMycount=application.worksheetfunction.countif(Range(A1:B50)范围,”>1000”条件)End sub如果VBA里有相同的函数,不能再引用工作表里的函数,否则会出错。
如Len(“ABCD”)11.在选择的单元格输入300Application.Selection.value=300, Selection 代表所选当前选中对象,省略了工作薄和工作表对象。
12.引用工作表1.Worksheets.item(3) ‘用索引号来指明位置2.Workbooks(“Book1.xls”)13.Thisworkbook:代码所在的工作薄,如Range(“A1”)=/.path/.FullName14.创建,打开,关闭工作薄1.创建一个工作薄并命名保存到一个指定文件夹。
Workbooks.AddActiveWorkbook.saveas Filename:= “D:\我的文档\javalearning\表格.xls”2.打开工作薄Workbooks.open “D:\我的文档\javalearning\表格.xls”3.激活某个工作薄Workbooks(“表格.xls”).activate4.继续保留源文件不打开新文件Thisworkbook.SaveCopyAs Filename:= “D:\我的文档\javalearning\表格.xls”5.关闭工作薄Workbooks.close ‘关闭所有打开的工作薄Workbooks(“表格.xls”).close ‘关闭表格工作表关闭而不显示保存对话框Workbooks(“表格.xls”).close savechanges:=true ‘关闭并保存修改,参数名称和参数之间用“:=”连接。
Thisworkbook:当前工作薄;activeworkbook:活动工作薄6.工作表操作1.新建工作表Worksheets.addWorksheets.Add after := Worksheets(1) , Count := 3 编程时,可以使用多个参数,不同参数之间用英文逗号隔开。
在第一张工作表后插入3张工作表。
在当前工作薄最后一张工作表前插入两张工作表:Worksheets.add before := worksheets(woksheets.Count) , Count=22.更改工作表标签名称Woksheets(2).Name = “工资表” = “工资表”,新建的工作表总是活动工作表。
Worksheets.add(before := Worksheets(1)).Name = “工资表”‘add方法是有参数的3.Delete 删除工作表删除工作表,不提示删除警告Application.DisplayAlerts = FalseWorksheets(“工资表”).deleteApplication.DisplayAlerts = true4.激活工作表Worksheets(1).Activate 或Worksheets(1).Select ‘当工作表隐藏时,调用它的Select方法会出错,用activate方法不能同时选中多张工作表。
5.复制工作表Worksheets(“工资表”).copy before := Worksheets(“出勤登记表”) /把复制得到的表放在哪张表前面,会出现“工资表(2)”。
不使用参数,默认将工作表复制到新工作薄中,也就是新建了一个工作薄。
6.移动工作表——Move方法Worksheets(“工资表”).Move before := Worksheets (“出勤登记表”)Move 告诉VBA执行的是移动操作,不保留原工作表,不不指定参数,将把工作表移动到新工作表中。
7.隐藏或显示工作表Worksheets(“工资表”).Visible = False= xlSheetHidden= 0这三句代码作用是一样的,这样隐藏的表示不能再菜单里取消隐藏的,只能用VBA代码或属性窗口中显示它。
Worksheets(“工资表”).Visible = xlSheetVeryHidden ‘取消隐藏= 2显示工作表:Worksheets(“工资表”).Visible = True/xlsheetVisible/1/-1四种方法来显示它。
8.获取工作表的数目Worksheets.Count15.Sheets 与WorksheetsSheets比Worksheets包含的方法和属性多。
16.核心,至关重要的Range对象1.Range (“A1:A10”).Value = 200; 如果单元格被定义为名称,如date, 可写成Range(“date”).Value = 100; 如果引用多个区间,在各区间添加逗号Range(“A1:A10, A4:A6, C3:D9”).select2.引用相交区域(公共区域),在多个区域之间添加空格。
Range(“B1:B10 A4:D6”).select 空格而不是逗号3.两个区域围城的矩形区域Range(“B6:B10”, “D2:D8”).select 相当于数学里的最小公倍数。
4.Worksheet /Range 对象的Cells属性,cells是复数形式两种等效的写法:ActiveSheet.Cells(3,4).value= 20; ActiveSheet.Cells(3,”D”).value= 20。
3是行号,只能是数字,4和D是列标,可以是数字,字母。
Range对象的Cell:Range(“B3:F9”).Cells(2,3)=100。
Cells 属性还可以用作Range属性的参数:Range(Cells(1,1), Cells(10,5)).select ‘选中活动工作表中的A1:E10单元格。
Range(“A1”,”E10”).selectCells可以只使用一个参数:ActiveSheet.Cells(2).Value = 200 也就是在B1单元格内输入200.在B3:F9的第8个单元格输入100:Range(“B3:F9”).Cells(8).Value =100如果不指定任何参数,Cells属性将返回指定对象中的所有单元格:ActiveSheet.Cells.Select; Range(“B3:F9”).Cells.Select更加简洁的方式:将单元格地址写在中括号里。
不用引号。