Excel VBA Contents.docx

上传人:b****3 文档编号:3652440 上传时间:2022-11-24 格式:DOCX 页数:64 大小:52.09KB
下载 相关 举报
Excel VBA Contents.docx_第1页
第1页 / 共64页
Excel VBA Contents.docx_第2页
第2页 / 共64页
Excel VBA Contents.docx_第3页
第3页 / 共64页
Excel VBA Contents.docx_第4页
第4页 / 共64页
Excel VBA Contents.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

Excel VBA Contents.docx

《Excel VBA Contents.docx》由会员分享,可在线阅读,更多相关《Excel VBA Contents.docx(64页珍藏版)》请在冰豆网上搜索。

Excel VBA Contents.docx

ExcelVBAContents

TableofContents

1函数与方法3

1.1VBA,字符串处理大全3

1.1.1VBA中处理字符串的函数3

1.1.2转换字符串4

1.1.3创建字符串6

1.1.4获取字符串的长度7

1.1.5格式化字符串8

1.1.6查找字符串16

1.1.7提取字符/字符串17

1.1.8示例28

1.2关闭屏幕刷新31

1.3Msgbox内换行31

1.4在VBA中设置一个变量的小数点位数32

1.5类型转换函数32

1.6SelectCase语句34

1.6.1语法34

1.6.2说明35

1.6.3SelectCase语句也可以是嵌套的36

1.6.4和Case子句一起使用Is38

1.6.5确定Case子句里数值的范围38

1.6.6在Case子句里确定多个表达式40

1.7Vba暂停几秒的代码40

1.7.1自动式的VBA暂停语句40

1.7.2手工暂停VBA语句的办法41

1.8TreeView控件41

1.8.1打开TreeView控件41

1.8.2点击时加入子节点,找出树中当前节点的级数41

1.9VBAlistview控件用法45

1.9.1应用帮助(vba)45

1.9.2显示数据表内容46

1.9.3VBA点listview列名时自动排序(超有用)47

1.10窗体上显示图表48

1.10.1其实装载的只是一个图片48

1.10.2在窗体上显示图表51

1.11如何让VBA制作的窗体即在前端显示又不影响表使用56

2应用实例56

2.1获取工作表使用的最大行数56

2.2利用动态数组获取当前目录下指定文件类型的文件59

1函数与方法

1.1VBA,字符串处理大全

VBA中的字符串

VBA不仅可以处理数字,也可以处理文本(字符串)。

VBA提供了两类字符串:

一类为固定长度的字符串,声明时包含指字的字符数。

例如,下面的语句

DimstrFixedLongAsString*100

声明字符串变量后,无论赋予该变量多少个字符,总是只包含100个字符,但字符串最长不超过65526个字符,且需要使用Trim函数去掉字符串中多余的空格。

定长字符串只有在必要时才使用。

另一类为动态字符串。

例如,声明字符串变量DimstrDynamicAsString后,可以给该变量任意赋值,最多可包含20亿个字符。

1.1.1VBA中处理字符串的函数

比较字符串

通常,在VBA中进行字符串比较时,会用到比较运算符(如=、>等)、Like运算符和StrComp函数。

此外,在模块的开头用OptionCompare语句指定比较方式。

1.1.1.1比较运算符

可以采用简单的逻辑运算符进行两个字符串的比较,即<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、=(等于)、<>(不等于)。

此外,还可以使用Like运算符进行比较。

1.1.1.2StrComp函数

StrComp函数返回字符串比较的结果。

其语法为:

StrComp(string1,string2[,compare])

其中,参数string1和strng2为必需的参数,可以是任何有效的字符串表达式。

参数Compare为可选参数,如果该参数为Null,将发生错误。

如果参数Compare设置为常数vbUseCompareOption或-1或忽略该参数,将使用OptionCompare语句设置进行比较;如果忽略该参数且没有设置OptionCompare语句,则按二进制进行比较;如果参数Compare设置为常数vbBinaryCompare或0,则用二进制进行比较;如果参数Compare设置为常数vbTextCompare或1,则按文本进行比较;如果参数Compare设置为常数vbDatabaseCompare或2,此时仅适用于MicrosoftAccess,进行基于数据库信息的比较。

StrComp函数的返回值为:

如果String1String2,则返回值为1;如果String1或String2为Null,则返回值为Null。

看看下面的示例:

SubtestStringCompare()

DimMyStr1AsString,MyStr2AsString,MyComp1,MyComp2,MyComp3,MyComp4

MyStr1="ABCD"

MyStr2="abcd"

MyComp1=StrComp(MyStr1,MyStr2,1)'返回0

MyComp2=StrComp(MyStr1,MyStr2,0)'返回-1

MyComp3=StrComp(MyStr1,MyStr2)'返回-1

MyComp4=StrComp(MyStr2,MyStr1)'返回1

MsgBox"StrComp(MyStr1,MyStr2,1)的结果为:

"&MyComp1

MsgBox"StrComp(MyStr1,MyStr2,0)的结果为:

"&MyComp2

MsgBox"StrComp(MyStr1,MyStr2)的结果为:

"&MyComp3

MsgBox"StrComp(MyStr2,MyStr1)的结果为:

"&MyComp4

EndSub

示例说明:

如果StrComp函数的第三个参数值为1,则以文本比较的方式进行字符串比较;如果第三个参数值为0或忽略该参数,则以二进制比较的方式进行字符串比较。

注意,文本比较的方式不区分字母大小写,而二进制比较方式则区分大小写。

[编程方法和技巧]完成一次简单的单一比较,如

IfUCase(sString1)

比使用StrComp函数:

IfStrComp(sString1,sString2,vbTextCompare)=-1Then

在性能上要提高30%,且更容易阅读和理解。

1.1.2转换字符串

1.1.2.1StrConv函数

使用StrConv函数来按指定类型转换字符串。

其语法为:

StrConv(string,conversion,LCID)

其中,参数string为要转换的字符串,参数conversion为指定转换的类型,参数LCID为可选参数。

如果将参数conversion设置为vbUpperCase或1,则将字符串转换成大写;设置为vbLowerCase或2,则将字符串转换成小写;设置为vbProperCase或3,则将字符串中每个字的开头字母转换成大写;设置为vbUnicode或64,则根据系统的缺省码页将字符串转换成Unicode;设置为vbFromUnicode或128,则将字符串由Unicode转换成系统的缺省码页。

在将ANSI格式的Byte数组转换成字符串时,应使用StrConv函数;转换Unicode格式的数组时,使用赋值语句。

下面的例子使用StrConv函数将Unicode字符串转换成ANSI字符串:

SubtestConverseString()

DimiAsLong

Dimx()AsByte

x=StrConv("ABCDEFG",vbFromUnicode)'转换字符串。

Fori=0ToUBound(x)

Debug.Printx(i)

Next

EndSub

下面的例子将句子中每个词语的首字母转换为大写:

SubtestConverseString2()

Debug.PrintStrConv("mybookisthisbook.",vbProperCase)

EndSub

程序运行后,在VBE窗口中的立即窗口中将会看到上述结果。

下面的示例演示了如何把一个字符串转换为字节数组,以便使用在API函数调用中:

SubTest()

DimbyArray()AsByte

DimsStringAsString

sString="Somestuff"

byArray=StrConv(sString,vbFromUnicode)

EndSub

StrConv函数将下面的字符看成是字的分隔符:

Null:

Chr$(0)

水平制表符:

Chr$(9)

换行符:

Chr$(10)

垂直制表符:

Chr$(11)

换页符:

Chr$(12)

回车符:

Chr$(13)

空格:

Chr$(32)

[编程方法和技巧]在使用API时该函数很重要,很多程序调用都要求传递给它们Unicode字符,或者赋给返回变量Unicode字符。

1.1.2.2Str函数

将数值转换成字符串,即返回代表一个数值的字符串。

其语法为:

Str(number)

当一个数字转成字符串时,总会在前面保留一个空位来表示正负,即字符串的第一位一定是空格或正负号。

如果参数number为正,返回的字符串前面包含一空格。

Str函数将句点(.)作为有效的小数点。

示例如下:

MyString=Str(459)'返回"459"

MyString=Str(-459.65)'返回"-459.65"

MyString=Str(459.001)'返回"459.001"

[编程方法和技巧]使用LTrim函数可删除Str函数在返回的字符串开头添加的前导空格。

此外,CStr函数和Format函数已经取代了Str函数,CStr函数不用为正数的符号而添加前导空格,Format函数能够用来识别小数点。

1.1.2.3CStr函数

CStr将数值表达式转换成String数据类型。

示例如下:

MyDouble=437.324'MyDouble为Double类型

MyString=CStr(MyDouble)'MyString的内容为"437.324"

[编程方法和技巧]传递给CStr的未初始化的数字数据类型返回“0”,传递给CStr的未初始化的日期变量返回“0:

00:

00”。

1.1.3创建字符串

Space函数

该函数返回指定数的空格的字符串。

语法为:

Space(number)

其中,参数number必须,为字符串中指定的空格数。

如下例所示:

SubCreateString1()

DimMyString

'返回10个空格的字符串。

MyString=Space(10)

'将10个空格插入两个字符串中间。

MyString="Hello"&Space(10)&"World"

EndSub

该函数可用于在调用外部DLL时建立字符串缓冲区,特别是在调用WindowAPI时。

此外,使用该函数还可以使字符串在特定长度的缓冲区左对齐或右对齐。

注意,如果参数number是负数,则会产生运行时错误5:

“无效的过程调用或参数”。

[编程方法和技巧]可以使用Space函数添加和清除存储在定长字符串中的数据,例如,下面的代码用空格填充一个定长字符串:

DimstrFixedAsString*32

strFixed=Space(Len(strFixed))

1.1.3.1String函数

该函数返回重复的字符或字符串。

其语法为:

String(number,character)

其中,参数number必须,指定所返回的字符串的长度;参数character必须,指定字符的字符代码或字符串表达式。

例如,下面使用String函数生成指定长度且只含单一字符的字符串。

SubCreateString2()

DimMyString

MyString=String(5,"*")'返回"*****"

MyString=String(5,42)'返回"*****"

MyString=String(10,"ABC")'返回"AAAAAAAAAA"

EndSub

如果参数number包含Null,则返回Null;如果参数character包含Null,则返回Null;参数character可以指定为字符串或者是ANSI字符代码,如:

strString1=String(128,”=”)‘用”=”填充

strString2=String(128,0)‘用Chr$(0)填充

[编程方法和技巧]

(1)String函数在用于创建较长的“_”,“-”,或者“=”构成的水平线以便给报表分段时十分有用。

(2)当调用API函数向缓冲区写入字符串值时,首先要用String函数创建一个长度合适的字符串变量,并且用诸如Chr$(0)之类的单个字符来填充。

1.1.4获取字符串的长度

可以使用Len函数来确定任何字符串或字符串表达式的长度,其语法为:

Len(string|varname)

其中,参数string为任何有效的字符串表达式;参数varname为任何有效的变量名称。

两个参数必须取一。

利用LenB函数可以确定存储某变量所需的实际字节数。

下面的示例使用Len函数来获取某字符串的长度(字符数)或某变量的大小(位数)。

TypeCustomerRecord'定义用户自定义的数据类型

IDAsInteger'将此定义放在常规模块中

NameAsString*10

AddressAsString*30

EndType

SubGetStrLen()

DimCustomerAsCustomerRecord'声明变量

DimMyIntAsInteger,MyCurAsCurrency

DimMyString,MyLen

MyString="HelloWorld"'设置变量初值

MyLen=Len(MyInt)'返回2

MyLen=Len(Customer)'返回42

MyLen=Len(MyString)'返回11

MyLen=Len(MyCur)'返回8

EndSub

此外,在需要大量判断是否为空字符串的代码中,使用Len函数也可以加快代码执行的速度。

例如:

IfstrTemp=""Then

'要执行的代码

EndIf

上面的代码可以用以下代码代替:

IfLen(strTemp)=0Then

'要执行的代码

EndIf

注意:

(1)参数string和参数varname互不相容,即只能指定这两个参数中的某一个,不能同时指定这两个参数。

(2)如果参数string或参数varname中包含Null,则Len函数会返回Null。

(3)在向文件写入某种用户自定义类型数据时,Len函数会返回数据的大小(字符数)。

(4)LenB函数返回用户自定义类型数据实际占用的内存大小。

(5)在对字节数据或Unicode字符串使用LenB函数时,LenB函数返回表示数据或字符串的字节数。

(6)不能对对象变量使用Len函数。

(7)如果参数varname是一个数组,则必须指定一个有效的下标,即Len函数不能确定数组中元素的总数或数组占用内存的大小。

(8)Len函数对Variant类型变量的处理和字符串变量一样,Len函数返回变量所存储的实际字符数,如下面的代码:

DimvVar

vVar=100

MsgBoxLen(vVar)

结果为3。

(9)由于VB本质上使用的是Unicode字符串(用两个字节的空间来存储一个字符),因此当相同的字符串变量传递给Len函数和LenB函数时会出现不同的返回值。

例如,对于一个包含4个字符的字符串,使用Len函数时返回值为4,使用LenB函数则为8。

(10)使用强类型变量(即强制声明该变量的类型)时,Len函数会返回存储该变量所需的字节数。

例如,长整型变量的长度为4。

下面的示例说明了为什么要显式声明数据类型:

Subtest()

DimlVarAsLong

DimvVar

lVar=10000000

vVar=10000000

MsgBoxLenB(lVar)'返回4

MsgBoxLenB(vVar)'返回16

EndSub

很显然,Variant类型变量比强制声明的类型变量要占用更多的内存。

1.1.5格式化字符串

可以使用Format函数规定输出的字符串的格式,其语法为:

Format(expression[,format[,firstdayofweek[,firstweekofyear]]])

其中,参数expression必须,为任何有效的表达式;其余参数均可选。

参数format表示所要采用的格式,参数firstdayofweek使用常数,表示一星期的第一天,参数firstweekofyear使用常数,表示一年的第一周。

在参数format中,使用字符“@”,表示空格或字符占位符,如果在输入的字符串相应位置有字符,则显示该字符,否则显示空格;使用字符“&”,表示空或字符占位符,如果在输入的字符串的相应位置有字符,则显示该字符,否则不显示;使用字符“<”,则将所有字符显示为小写格式;使用字符“>”,则将所有字符显示为大写格式;使用字符“!

”,强制占位符从左向右填满,满足默认为从右向左。

例如下面的代码:

DimstrOut

strOut=Format("8888888","(@@@)&&&-&&&&")'返回()888-8888

strOut=Format("8888888","(&&&)&&&-&&&&")'返回()888-8888

在Format函数中,还可以同时格式化普通字符串和空字符串,只须在指定的格式中用分号隔开两个部分,第一部分用于非空字符串,第二部分用于空字符串。

例如:

strOut=Format("6666666","(@@@)&&&-&&&&;NoPhone")'返回()666-6666

strOut=Format("","(@@@)&&&-&&&&;NoPhone")'返回NoPhone

又如,下面的代码将字母全部转换为大写:

DimstrOut

strOut=Format("Hello",">@@@@@")‘返回HELLO

同理,可以使用“<”将字母全部转换为小写。

Format函数的简要使用规则:

(1)允许用预先定义或用户定义的格式来建立多种用于输出字符串、数字和日期/时间数据的方法。

(2)创建用户定义的数值格式最多可以有四个部分,每个部分代表一种不同类型的数值,且用分号分隔。

第一部分在单独命名使用时可用于所有值,与其它多个部分一起使用时只用于正数;第二部分用于负数;第三部分用于零值;第四部分用于Null值。

在参数format中不必包括所有四部分,但所用部分的数目决定了每一个部分所定义的数值类型:

只有一个部分,则应用于所有数值;有两个部分,则第一部分应用于正数和零值,第二部分应用于负数;有三个部分,则第一部分用于正数,第二部分应用于负数,第三部分应用于零值;有四个部分,则每部分的使用如前所述。

如果忽略了一个部分,则该部分使用与定义正数的部分一样的格式,例如:

“#.00;;#,##”

表示负数值与正数值使用同一种格式显示。

如果参数含有命名格式,则只能有一个部分。

(3)字符串值的用户定义格式有两个部分,第一部分可应用于所有值,第二部分只应用于Null值或零长字符串。

(4)预定义的日期和时间格式如下:

GeneralDate

范例:

Format("28/02/2007","GeneralDate")

返回:

2007-2-28

LongDate

范例:

Format("28/02/2007","LongDate")

返回:

2007年2月28日

MediumDate

范例:

Format("28/02/2007","MediumDate")

返回:

07-02-28

ShortDate

范例:

Format("28/02/2007","ShortDate")

返回:

2007-2-28

LongTime

范例:

Format("17:

30:

03","LongTime")

返回:

17:

30:

03

MediumTime

范例:

Format("17:

30:

03","MediumTime")

返回:

下午05:

30

ShortTime

范例:

Format("17:

30:

03","ShortTime")

返回:

17:

30

(5)预定义的数值格式如下:

GeneralNumber

范例:

Format(123456.0789,"GeneralNumber")

返回:

123456.0789

Currency

范例:

Format(123456.0789,"Currency")

返回:

¥123,456.08

Fixed

范例:

Format(0.2,"Fixed")

返回:

0.20

Standard

范例:

Format(123456.0789,"Standard")

返回:

123,456.08

Percent

范例:

Format(.7321,"Percent")

返回:

73.21%

Scientific

范例:

Format(123456.0789,"Scientific")

返回:

1.23E+05

Yes/No

范例1:

Format(0,"Yes/No")

返回:

No

范例2:

Format(23,"Yes/No")

返回:

Yes

True/False

范例1:

Format(0,"True/False")

返回:

False

范例2:

Format(23,"True/False")

返回:

True

On/Off

范例1:

Format(0,"On/Off")

返回:

Off

范例2:

Format(23,"On/Off")

返回:

On

(6)创建用户自定义的日期和时间格式的字符:

C

元素:

日期

显示:

基于当前Windows系统的短日期和短时间国际设置格式的日期或时间。

范例:

Format("28/02/200717:

30:

03","c")

返回:

2007-2-2817:

30:

03

dddddd

元素:

日期

显示:

基于当前Windows系统的长日期国际设置格式的完整日期。

范例:

Format("28/02/2007","dddddd")

返回:

2007年2月28日

/

元素:

日期分隔符

范例:

Format("28/02/2007","mm-dd-yyyy")

返回:

02-28-2007

d

元素:

显示:

1~31范围内的一个数字,无前导0。

范例:

Format("02/02/2007","d")

返回:

2

dd

元素:

显示:

01~31范围内的一个

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1