
已解决问题
谷歌姘村煄鐙掔嫆用户在2021.05.09提交了关于“偏岩古镇excel vba常用代码”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-14T14:01:33。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,希望你能感受到,我最真诚的谢意 !
详细问题描述及疑问:期待您的答案,希望你能感受到,我最真诚的谢意 !
**类型
基本**类型
即PrimaryTypeData,下
Byte(1):无符号数类型,取值范围0-255
Boolean(2)
Integer
Long(4)
Single(4)
Double(8)
Currency(8)
De
Date(8)
St
Object(
Variant(根据分配确定)[2]
自定义的**类型
相当于C语言的s
Type自定义类型名元素名As类型…[元素名As类型]EndType
OptionBase0:数组索
OptionBase1:数组索引值从1开始
DimMyArray(10)
MyArray
DimData(10,5):声明一个二维数组变量
Di
DimdArr()AsString:声明动态数组
ReDimdArr(0To5,1To2):改变动态
Preserve:使用Pr
EndIfEraseMyArrar,DataErase语句**数组元素,释放变量占用的空间[2]
常量
编辑
系统定义常量
系统定义常量有3个:True、False和Null。[4]
固有常量
固有常量是编程数用的对象库定义的常量。所有固有常量都可以在宏或VBA代码中使用。通常,固有常量通过前两个字母来指明定义该常量。来自VB库的常量则以“vb”开头。来自Access的常量以“ac”开头。可以使用对象浏览器来查看所有对象库中的固有常量列表。[4]
在VBA中,常量的**类型有整型、长整型、单精度型、双精度型、字节型、货型、字符型、日期型和逻辑型。一个整型**就是一个整型常量,一个长整型**就是一个长整型常量。例如,12%、-1%是整型常量,32768&、10000000&是长整型常量,-2.51、3.14是单精度实型常量,3.1415926#是双精度实型常量,China、Shanghai是字符型常量,#07/13/200111:45PM#是日期常量,由符号“#”将字符括起来。[4]
符号常量
可以自行定义的常量即符号常量,必须先定义,后使用。可见,需要声明的常量都是符号常量。[4]
基本语法格式:
1[Publicr/Private]Const常量名[As类型]=表达式如:GlobalConst符号常量名称=常量值[4]
语句功能:
定义一个符号常量,并将指定表达式的值赋给符号常量。[4]
语句说明如下:[4]
1)“常量名”指定符号常量的名字。符号常量名可以由字母、数字和下画线组成,但只能以字母开头,不能含有空格。[4]
2)“表达式”指定符号常量的值。该表达式通常由数值型、字符型、逻辑型或日期型**以及各种运算符组成,但在表达式中不能出现变量和函数。[4]
3)public用来表示这个常量的作用范围是整个**库的所有模块。[4]
4)private则表示这个常量只在使用该声明常量语句的模块中起作用。[4]
说明:
1)除用户定义的符号常量外,VBA还提供了许多符号常量,我们可以直接使用。[4]
2)对数码比较长,并且在程序中多次使用的常量,通常使用符号常量代替。运行程序时,系统自动把程序中的所有符号常量换为赋给它的值。[4]
变量
编辑
与常量一样,变量也是一块内存空间,用于保存程序运行过程中可能变化的**。变量的名称是用户定义的一个标识符。[5]
在代码中需要使用该变量时,只需引用相应的标识符即可,而不用管变量当前的值具体是什么。[5]
声明
与用户自定义的常量相似,变量在使用之前都需要声明,在VBA中声明变量的语法格式有以下几种:[5]
关键字变量名AS**类型
关键字变量1,变量2变量nAS**类型
关键字变量1AS**类型,变量2As**类型,,变量nAS**类型
在第二种语法格式中,“变量n”的**类型为AS关键字后定义的**类型,而“变量1”、“变量2”、…的**类型为变体型。[5]
在VBA中,可用Dim、Private、Public和Static这4个关键字来声明变量,使用不同关键字声明的变量其含义也有所不同。[5]
◆利用Dim关键字声明变量:Dim关键字主要用来在内存中分配一块空间,并为该空间命名,是VBA中声明变量最常用的关键字。使用Dim关键字声明的变量只能在当前过程或模块中使用。[5]
◆利用Private关键字声明变量:Private关键字用于在类模块中声明一个私有变量,它只能在当前的类模块中使用。当定义变量的位置同处于类模块中时,其使用效果与使用Dim关键字定义的变量相同。[5]
◆利用Public关键字声明变量:利用Public关键字声明的变量可以在程序的任何地方调用,而与声明变量的位置无关。[5]
◆利用Static关键字声明变量:Static关键字用于声明静态变量,即变量的值在整个代码运行期间都能被保留。[5]
赋值
变量在使用时还需要对其进行赋值。在VBA中对变量进行赋值可通过“=”符号或“Set”关键字进行。通过“=”符号对变量赋值的语法格式有以下几种。[5]
变量名=**
变量1=变量2运算符**
变量1=变量2运算符变量3…运算符变量n
如果在定义变量时指定了变量的**类型,则为变量所赋的值也必须是该**类型的值。如果变量定义为Integer类型,而在赋值时却给了变量一个String类型的**,则在编译运行的过程中将出错误框。[5]
运算符
编辑
运算符是在程序中执行计算功能的某些特殊符号,它是程序代码的重要组成部分。在程序代码中,运算符不能单独使用,必须与其操作数**同组成表达式后才具有运算意义。VBA中的运算符包含算术运算符、连接运算符、比较运算符和逻辑运算符等。[4]
算术运算符
算术运算符主要用于执行四则运算,仅用算术运算符连接起来的表达式称为算术表达式。算术运算符及其作用与示例如表所示。[5]
例子
名称
结果
-$a
取反
$a的负值。
$a+$b
加法
$a和$b的和。
$a-$b
减法
$a和$b的差。
$a*$b
乘法
$a和$b的积。
$a/$b
除法
$a除以$b的商,允许小数。
$a\$b除法$a除以$b的商,结果取整。
$aMod$b
取余
$a除以$b的余数
注意:
在执行算术运算时,运算符两侧操作的**类型必须相同,否则会出现“类型不匹配”的错误提示。当“+”运算符左右两侧都是字符串类型的操作数时,执行的是连接运算,如表达式“"Pass+"word"的计算结果为字符串“PassWord”。[5]
连接运算符
连接运算符的作用是将运算符两侧的操作数连接成一个数,其操作数的**类型通常都为String类型。VBA中的连接运算符有“&”和“+”两种,由于使用“+”执行连接运算时,容易与加法运算混淆,所以通常都采用“&”进行连接运算。[5]
比较运算符
比较运算符可以对运算符两侧的操作数执行比较运算,其返回结果为Boolean类型的True或False。比较运算符的操作数通常为具体的数值,当操作数为字符串或其他符号时,是根据该符号的ASCII码进行比较的。VBA中的比较运算符及其作用与示例如表所示。[5]
例子
名称
结果
$a=$b
等于
TRUE,如果$a等于$b。
$a<>$b
不等
TRUE,如果$a不等于$b。
$a<$b
小于
TRUE,如果$a严格小于$b。
$a>$b
大于
TRUE,如果$a严格大于$b。
$a<=$b
小于等于
TRUE,如果$a小于或者等于$b。
$a>=$b
大于等于
TRUE,如果$a大于或者等于$b。
逻辑运算符
逻辑运算符用于对运算符两侧的操作数执行逻辑运算,参与逻辑运算的操作数本身可以是逻辑表达式(表达式的最终结果为True或False),也可以是算术表达式(表达式的最终返回值为0或非0)。[5]
在逻辑运算中,数值0与逻辑值False相同,表示逻辑假;非0数值与True相同,表示逻辑真。逻辑运算符及其含义与示例如表所示。[5]
例子
名称
结果
$aand$b
And(逻辑与)
TRUE,如果$a与$b都为TRUE。
$aor$b
Or(逻辑或)
TRUE,如果$a或$b任一为TRUE。
$axor$b
Xor(逻辑异或)
TRUE,如果$a或$b同位相异。
Not(1>2)
Not(逻辑非)
TRUE。
(1>2)Eqv(1>2)
两个操作数同为假,返回False;两个操作数同为真,返回True;两个操作数一真一假,返回False
TRUE。
2<>1Imp3<5
运算符左右同为真,返回True;左右同为假,返回True;左真右假,回返False;左假右真,返回True
TRUE。
语法结构
编辑
if语句
1if条件1then语句1elseif条件2then语句2elseifelse语句nendifSelectCase语句
1SelectCase表达式Case表达式列表1语句1Case表达式列表2语句2Case表达式列表n语句nEndSelect其中的表达式列表可以为:[5]
表达式例:"A"
用逗号分隔的一组觅表达式例:2,4,6,8
表达式1To表达式2例:60To100
Is关系运算符表达式例:Is<60
DoLoop语句
1DoWhile或Until条件语句块1ExitDo语句块2LoopForNext语句
1Do语句块1ExitDo语句块2LoopWhile或Until条件ForEach…Next语句
1For循环控制变量=初值To终值Step步长语句块‘ExitFor语句可以跳出循环体Next跳出本次循环的conti**e语句
1For循环控制变量=初值To终值Step步长Do'用于模拟conti**e语句块If条件ThenExitDo'用于模拟conti**e语句块LoopWhileFalse'用于模拟conti**eNextWith语句
1With对象引用语句块EndWithOnError语句
1OnErrorGoto出错处理语句的label'跳转到出错处理语句或
1OnErrorResumeNext'遇到错误,不管错误,继续往下执行具有控制作用的函数
If(条件式,表达式1,表达式2)[5]
Switch(条件式1,表达式1,[条件式2,表达式2[,,条件式n,表达式n]])
Choose(索引式,选项1[,选项2,[,选项n]])'这是基于1的索引
其他语句
编辑
注释语句
使用REM或者单引号开始的行。[6]
语句的连写与续行
如果一行包括多条语句,用冒号分割各个语句。跨多行的语句,在行末用“空格加下划线”表示续行[6]。
过程与函数
编辑
12Sub过程名(参数表)语句块ExitSub语句块EndSub1Function函数名(参数表)AsType语句块函数名=表达式ExitFunctionEndFunction可以是Private、Public、Friend、Static等修饰。[6]
调用函数/过程时,可以加括号或者不加括号。如果调用表达式作为一行的一部分,那么必须用参数,例如函数调用的返回值赋给变量。调用过程时,可以使用/不使用call关键字。使用call语句调用过程,如果无参数,则不加括号;如果有参数,必须加括号。如果调用时用括号包住单个参数,则该参数强行按值传递。需要特别注意,不用call不加括号的调用,形参与实参是传值(passedbyvalue)而不是传引用(passedbyreference),这会导致一些对象的方法调用失败。例如:[6]
1DimcnAsADODB.ConnectionSetcn=CurrentProject.ConnectionDimrsAsNewADODB.Recordset***.open"**LECT*FROMmyTable",cnDimExcelAppAsNewExcel.ApplicationDimExcelWstAsWorksheetSetExcelWst=ExcelApp.Workbooks.Add.Worksheets(1)ExcelWst.Range("A2").CopyFromRecordset(rs)'失败,无法执行该行ExcelWst.Range("A2").CopyFromRecordsetrs'可成功执行该行常用内置函数
编辑
VBA的常用内置函数:[5]
MsgBox
InputBox
舍入函数:Fix向0取整,Int向下取整,Round四舍五入
Rnd:返回0-1内的单精度随机数
字符串函数:[5]
Filter:对字符串的一维数组的过滤
InStr([Start,]<Str1>,<Str2>[,Compare])与InStrRev:查找子串
Len:字符串长度
Join:连接一维数组中的所有子字符串
Left,Right,Mid:截取子字符串
Space(数值):生成空格字符串
Ucase,Lcase:大小写转换函数
Ltrim,Rtrim,Trim:删除首尾空格
Replace
Split:分割一个字符串成为一维数组
StrComp:字符串比较
StrConv:字符串转换
String(**mber,character):制定字符重复若干次
StrReverse
日期/时间有关函数:[5]
Year,Month,Day,WeekDay,h**our,Mi**te,Second:截取日期时间分量
DateAdd:日期/时间增量函数
DateDiff(<间隔类型>,<日期1>,<日期2>[,W1][,W2])日期/时间的距离函数
DatePart(<分割类型>,<日期>[,w1][,w2])时间分割函数
DateSerial(<表达式1>,<表达式2>,<表达式3>)合成日期;DateValue(“字符串表达式”)返回日期;
Date,Time,Now,Timer:返回日期时间
DateValue
TimeSerial:由时间序列得到时间对象
TimeValue:由时间字符串得到时间对象
Weekday:获得日期的周几
WeekdayName
转换函数:CBool、CByte、CCur、CDate、CDbl、CDec、CInt、CLng、CLngLng、CLngPtr、[5]CSng、CStr、CVar、CVErr、Asc(<字符串表达式>)返回第一个字符的Ascii编码值、Chr(ASCII码)返回字符、h**ex、Oct、Str(<数值表达式>)返回字符串、Val(string)、Format、FormatCurrency、FormatDateTime、FormatNumber、FormatPercent、MonthName。
Nz(表达式或字段属性值[,规定值])如果是空,则返回0或者""或者函数的第二个参数值[5]
验函数:isNumeric、isDate、isNull、isEmpty、IsArray、IsError、IsMissing、IsObject[5]
数学函数:Abs、Sqr、Tan、Atn(即atan)、Sin、Cos、Exp(e为基的指数)、Log自然对数[5]
Array:构造一个Array对象[5]
CallByName:getorsetaproperty,orinvokeamethodatruntimeusingastringname.[5]
控制流:Choose:类似于C语言的select语句、If相当于IF-EL**语句、Switch[5]
Command:获取命令行参数[5]
CreateObject:创建ActiveX对象
CurDir:返回指定驱动器的当前工作路径[5]
由基本数学函数导出的函数:Sec、Cosec、Cotangent、Cotan、Arcsin、Arccos、Arcsec、Arccosec、Arccotan、h**Sin、h**Cos、h**Tan、h**Sec、h**Cosec、h**Cotan、h**Arcsin、h**Arccos、h**Arctan、h**Arcsec、h**Arccosec、h**Arccotan、LogN
DoEvents:暂时把CPU控制权交回给系统[5]
Environ:返回环境变量的值[5]
文件操作:[5]
Dir:返回满足条件的所有文件、目录的名字
EOF
FileAttr
FileDateTime
FileLen
FreeFileFunction
GetAttr:返回文件、目录的属性值
Input:读取文件
Loc:文件指针位置
LOF:文件打开时的指针位置
Seek:文件指针**
Spc:使用Print做positionoutput
Tab:用于Print函数
Error:错误号对应的错误消息[5]
WindowsRegistry中的**:GetAllSettings、S**eSetting、DeleteSetting、GetSetting[5]
GetObject:ActiveX组建的引用[5]
IMEStatus:返回当前InputMethodEditor(IME)[5]
Macintosh平台:MacID、MacScript[5]
金融函数:[5]
DDB:使用double-decliningbalance计算贬值
FV:计算固定利率的年金
IPmt:计算利率
IRR:计算利率
MIRR:计算利率
NPer:计算周期数
NPV:计算netpresentvalue
Pmt:计算支付数
PPmt:计算本金支付数
PV:计算presentvalue
Rate:利息率
SLN:straight-linedepreciation
SYD:计算sum-of-years'digitsdepreciation
Partition:返回字符串,表示一个数值名字落在各个range内。常用于SQLselect语句[5]
QBColor:颜色值[5]
RGB:颜色值[5]
TypeName:得到变量的类型名[5]
VarType:得到变量的类型数[5]