语句无法定位程序输入点于动态链接库

无法定位程序输入点于动态链接库  时间:2021-03-01  阅读:()

VBA帮助(摘自Office2000VBA帮助)一、VBA入门知识1、激活工作簿2、创建新工作簿3、打开工作簿4、用编号引用工作表5、用名称引用工作表6、将文档保存为Web页7、用A1样式的记号引用单元格和单元格区域8、用编号引用单元格9、引用行或列10、用快捷记号引用单元格11、引用命名单元格区域12、按相对于其他单元格的方式来引用单元格13、用Range对象引用单元格14、引用工作表上的所有单元格15、引用若干单元格区域16、在单元格区域中循环17、选定和激活单元格18、处理三维区域19、处理活动单元格20、在工作表上使用ActiveX控件21、在文档中使用ActiveX控件22、创建自定义对话框23、在窗体上使用MicrosoftOfficeWeb组件24、内置对话框参数表25、使用MicrosoftExcel对象的事件26、在VisualBasic中使用MicrosoftExcel工作表函数27、处理形状(图形对象)28、在某一MicrosoftOffice应用程序中控制其他MicrosoftOffice应用程序29、OLE程序标识符30、关于数字签名31、启动MicrosoftExcel时不运行"自动执行宏"32、焦点二、了解对象、属性、方法和事件1、了解对象、属性、方法和事件2、Application对象3、Workbook对象4、Workbooks属性5、Range对象6、Range属性7、Cells属性8、Caller属性9、Offset属性10、Rows属性11、Activate事件12、Activate、Deactivate事件13、Activate方法14、WorkbookActivate事件15、WindowActivate事件16、OnError语句17、在工作表上使用ActiveX控件18、Add方法(Scenarios集合)19、Scenarios集合对象20、Add方法(Validation对象)21、Validation对象22、Validation属性23、Open事件24、Open方法25、Click事件26、Close方法27、Change事件28、Value属性29、DblClick事件30、SheetBeforeRightClick事件31、Select方法32、Select事件33、Goto方法34、Worksheet对象35、SheetChange事件36、SheetActivate事件37、OpenLinks方法38、Enabled属性三、VBA语法(一)VisualBasic的命名规则1、写VisualBasic语句2、写声明语句3、Dim语句的语法4、Activate方法的语法5、Set语句6、MsgBox函数的语法7、选项语句的语法8、AddressOf运算符9、了解变体10、写赋值语句11、写可执行的语句12、Public语句13、Private语句14、使用数组15、使用常数16、AppActivate语句17、Beep语句19、Date语句20、Error语句21、Exit语句22、GoSub.
.
.
Return语句23、GoTo语句24、Input#语句25、Let语句26、Load语句27、Name语句28、On.
.
.
GoSub、On.
.
.
GoTo语句29、Open语句30、Rem语句31、Stop语句32、Time语句33、While.
.
.
Wend语句(二)逻辑语句1、If.
.
.
Then.
.
.
Else语句2、使用SelectCase语句3、使用For.
.
.
Next语句4、ForEach.
.
.
Next语句5、Do.
.
.
Loop语句6、With语句(三)过程1、写Sub过程2、写Function过程3、写Property过程四、ActiveX控件1、AfterUpdate事件2、Click事件3、Click事件、命令按钮控件、Accelerator和Caption属性示例4、DblClick事件5、Error事件6、KeyDown和KeyUp事件7、KeyPress事件8、KeyPress事件示例9、MouseDown和MouseUp事件10、MouseMove事件11、列表框控件12、SpinDown和SpinUp事件13、SpinDown、SpinUp事件和Delay属性示例14、组合框控件15、命令按钮控件16、标签控件17、列表框控件、DataObject对象、MouseMove事件和StartDrag、SetText方法示例18、多页控件19、选项按钮控件20、文本框控件21、切换按钮控件22、用户窗体窗口一、VBA入门知识1、激活工作簿用Activate方法激活工作簿后,该工作簿将放在活动窗口中.
下述过程激活已打开的工作簿"MyBook.
xls".
SubMakeActive()Workbooks("MyBook.
xls").
ActivateEndSub2、创建新工作簿如果要用VisualBasic创建新的工作簿,应使用Add方法.
下述过程创建了新工作簿.
MicrosoftExcel自动将该工作簿命名为"BookN",其中N是下一个可用的数字.
新工作簿将成为活动工作簿.
SubAddOne()Workbooks.
AddEndSub创建新工作簿的较好的方法是将其赋给一个对象变量.
下例中,由Add方法返回的Workbook对象赋给了对象变量newBook.
然后,又设置了newBook的若干属性.
使用对象变量可以很容易地控制新工作簿.
SubAddNew()SetnewBook=Workbooks.
AddWithnewBook.
Title="1995Sales".
Subject="Sales".
SaveAsfilename:="95Sales.
xls"EndWithEndSub3、打开工作簿用Open方法打开一个工作簿时,该工作簿将成为Workbooks集合的成员.
下述过程打开C盘上"MyFolder"文件夹内的工作簿"MyBook.
xls".
SubOpenUp()Workbooks.
Open("C:\MyFolder\MyBook.
xls")EndSub4、用编号引用工作表编号是赋予工作表的连续的数字,这些数字的顺序,是根据同一类型的工作表的标签位置按由左而右的顺序确定的.
下述过程使用Worksheets属性激活活动工作簿上的第一张工作表.
SubFirstOne()Worksheets(1).
ActivateEndSub如果要处理所有类型的工作表(工作表、图表、模块表和对话框编辑表),可用Sheets属性.
下述过程激活工作簿中的第四张工作表.
SubFourthOne()Sheets(4).
ActivateEndSub注意移动、添加或删除工作表时,编号顺序将会改变.
5、用名称引用工作表使用Worksheets属性和Charts属性时,可用名称标识工作表.
下述语句激活活动工作簿内的不同工作表.
Worksheets("Sheet1").
ActivateCharts("Chart1").
ActivateDialogSheets("Dialog1").
Activate可用Sheets属性返回工作表、图表、模块表或对话框编辑表;Sheets集合包含了所有这些表.
下例激活活动工作簿内的图表"Chart1".
SubActivateChart()Sheets("Chart1").
ActivateEndSub注意嵌入到工作表上的图表是ChartObjects集合的成员,而那些位于单独的表上的图表则属于Charts集合.
6、将文档保存为Web页在MicrosoftExcel2000中,可以将工作簿、工作表、图表、区域、查询表、数据透视表报表、打印区域或自动筛选区域保存到Web页中.
也可以直接在Excel中编辑HTML文件.
将文档保存为Web页将文档保存为Web页是一个创建并保存HTML文件及其支持文件的过程.
要完成此过程,可使用SaveAs方法,如下例所示,此示例将活动工作簿保存为文件"C:\Reports\myfile.
htm".
ActiveWorkbook.
SaveAs_Filename:="C:\Reports\myfile.
htm",_FileFormat:=xlHTML自定义Web页通过设置DefaultWebOptions对象和WebOptions对象的属性,用户可以自定义HTML文档的外观、内容、浏览器支持、编辑支持、图形格式、屏幕分辨率、文件组织和编码.
DefaultWebOptions对象中包含应用程序级别的属性.
而任何具有相同名称的工作簿级别的设置(包含在WebOptions对象中)会覆盖这些设置.
设置完属性后,可以使用Publish方法将工作簿、工作表、图表、区域、查询表、数据透视表报表、打印区域或自动筛选区域保存到Web页中.
下例设置了一些应用程序级别的属性,然后又设置了活动工作簿的AllowPNG属性,而此设置将覆盖应用程序级别的默认设置.
最后,本示例将该区域保存为"C:\Reports\1998_Q1.
htm".
WithApplication.
DefaultWebOptions.
RelyonVML=True.
AllowPNG=True.
PixelsPerInch=96EndWithWithActiveWorkbook.
WebOptions.
AllowPNG=FalseWith.
PublishObjects(1).
FileName="C:\Reports\1998_Q1.
htm".
PublishEndWithEndWith也可以直接将文件保存到Web服务器上.
下例将一个区域保存到Web服务器上,假定该Web页的URL地址为http://example.
homepage.
com/annualreport.
htm.
WithActiveWorkbookWith.
WebOptions.
RelyonVML=True.
PixelsPerInch=96EndWithWith.
PublishObjects(1).
FileName=_"http://example.
homepage.
com/annualreport.
htm".
PublishEndWithEndWith在MicrosoftExcel中打开HTML文档要在Excel中编辑HTML文档,请首先使用Open方法打开该文档.
下例打开文件"C:\Reports\1997_Q4.
htm"以便进行编辑.
Workbooks.
OpenFilename:="C:\Reports\1997_Q4.
htm"打开文件后,就可以通过设置DefaultWebOptions和WebOptions对象的属性自定义该HTML文档的外观、内容、浏览器支持、编辑支持、图象格式、屏幕分辨率、文件组织和编码.
7、用A1样式的记号引用单元格和单元格区域可在Range方法中以A1样式的记号引用单元格和单元格区域.
下述Sub过程将单元格区域A1:D5的字体设置为加粗.
SubFormatRange()Workbooks("Book1").
Sheets("Sheet1").
Range("A1:D5")_.
Font.
Bold=TrueEndSub下表演示了用于Range方法的一些A1-样式的引用.
引用含义Range("A1")单元格"A1"Range("A1:B5")从单元格"A1"到单元格"B5"的区域Range("C5:D9,G9:H16")多块的选定区域Range("A:A")"A"列Range("1:1")第一行Range("A:C")从"A"列到"C"列的区域Range("1:5")从第一行到第五行的区域Range("1:1,3:3,8:8")第1、3和8行Range("A:A,C:C,F:F")"A"列、"C"列和"F"列8、用编号引用单元格可用Cells属性及行号和列标引用单个单元格.
该属性返回代表单个单元格的Range对象.
下例中,Cells(6,1)返回工作表"Sheet1"上的单元格"A6",然后将Value属性设置为10.
SubEnterValue()Worksheets("Sheet1").
Cells(6,1).
Value=10EndSub因为可用变量代入单元格索引值,所以Cells属性非常适于在单元格区域中循环,如下例所示.
SubCycleThrough()DimcounterAsIntegerForcounter=1To20Worksheets("Sheet1").
Cells(counter,3).
Value=counterNextcounterEndSub注意如果要同时对某一区域内的所有单元格修改属性或应用方法,可用Range属性.
有关的详细内容,请参阅"用A1样式的记号引用单元格和单元格区域".
9、引用行或列可用Rows属性或Columns属性处理整行或整列.
这两个属性返回代表单元格区域的Range对象.
下例中,用Rows(1)返回工作表"Sheet1"上的第一行,然后将该行的Font对象的Bold属性设置为True.
SubRowBold()Worksheets("Sheet1").
Rows(1).
Font.
Bold=TrueEndSub下表演示了使用Rows属性和Columns属性的一些行和列的引用.
引用含义Rows(1)第一行Rows工作表上所有的行Columns(1)第一列Columns("A")第一列Columns工作表上所有的列如果要同时处理若干行或列,可先创建一个对象变量,然后用Union方法把对Rows属性或Columns属性的多个调用组合起来.
下例将活动工作簿中第一张工作表上的第一行、第三行和第五行的字体设置为加粗.
SubSeveralRows()Worksheets("Sheet1").
ActivateDimmyUnionAsRangeSetmyUnion=Union(Rows(1),Rows(3),Rows(5))myUnion.
Font.
Bold=TrueEndSub10、用快捷记号引用单元格可用方括号将A1样式的引用或命名区域的名称括起来,作为Range属性的快捷方式.
这样就不必键入"Range"和引号,如下述各例所示.
SubClearRange()Worksheets("Sheet1").
[A1:B5].
ClearContentsEndSubSubSetValue()[MyRange].
Value=30EndSub11、引用命名单元格区域用名称比用A1样式的记号更容易标识单元格区域.
如果要命名选定的单元格区域,单击公式栏左端的名称框,键入名称,然后按ENTER键.
引用命名单元格区域下例引用了工作簿"MyBook.
xls"中的单元格区域"MyRange".
SubFormatRange()Range("MyBook.
xls!
MyRange").
Font.
Italic=TrueEndSub下例在工作簿"Report.
xls"中引用了特定于工作表的单元格区域"Sheet1!
Sales".
SubFormatSales()Range("[Report.
xls]Sheet1!
Sales").
BorderAroundweight:=xlthinEndSub如果要选定命名的单元格区域,可用GoTo方法,该方法将激活指定区域所在的工作簿和工作表,然后选定该区域.
SubClearRange()Application.
GotoReference:="MyBook.
xls!
MyRange"Selection.
ClearContentsEndSub下例显示了在活动工作簿中对上述同一过程的写法.
SubClearRange()Application.
GotoReference:="MyRange"Selection.
ClearContentsEndSub在命名区域中的单元格上循环下例用ForEach.
.
.
Next循环语句在命名区域中的每一个单元格上循环.
如果该区域中的任一单元格的值超过limit的值,就将该单元格的颜色改为黄色.
SubApplyColor()ConstlimitAsInteger=25ForEachcInRange("MyRange")Ifc.
Value>limitThenc.
Interior.
ColorIndex=27EndIfNextcEndSub12、按相对于其他单元格的方式来引用单元格处理位于相对于其他单元格的某一位置单元格的常用方法是使用Offset属性.
下例中,将位于活动工作表上活动单元格下一行和右边三列的单元格的内容设置为双下划线.
SubUnderline()ActiveCell.
Offset(1,3).
Font.
Underline=xlDoubleEndSub注意可用Offset属性而不用绝对引用方式来记录宏.
指向"工具"菜单内的"录制宏"子菜单,然后单击"使用相对引用"命令即可.
如果要在单元格区域中循环,可在循环中将Cells属性和变量共用.
下例用从5到100的值以5为步长填充第三列的前20个单元格.
变量counter用作Cells属性的行号.
SubCycleThrough()DimcounterAsIntegerForcounter=1To20Worksheets("Sheet1").
Cells(counter,3).
Value=counter*5NextcounterEndSub13、用Range对象引用单元格将对象变量设置为Range对象,即可用变量名方便地操纵该单元格区域.
下述过程创建了对象变量myRange,然后将活动工作簿中工作表"Sheet1"上的单元格区域"A1:D5"赋予该变量.
随后的语句用该变量代替该区域对象,以修改该区域的属性.
SubRandom()DimmyRangeAsRangeSetmyRange=Worksheets("Sheet1").
Range("A1:D5")myRange.
Formula="=RAND()"myRange.
Font.
Bold=TrueEndSub14、引用工作表上的所有单元格如果对工作表应用Cells属性时不指定索引,该属性将返回代表工作表上所有单元格的Range对象.
下述Sub过程清除活动工作簿中工作表"Sheet1"上的所有单元格的内容.
SubClearSheet()Worksheets("Sheet1").
Cells.
ClearContentsEndSub15、引用若干单元格区域使用适当的方法可以很容易地同时引用若干单元格区域.
可用Range和Union方法引用任意组合的单元格区域;用Areas属性可引用工作表上选定的一组单元格区域.
使用Range属性使用Range属性时,在两个或多个引用之间加上逗号,就可以引用多重区域.
下例清除了工作表"Sheet1"上三个单元格区域的内容.
SubClearRanges()Worksheets("Sheet1").
Range("C5:D9,G9:H16,B14:D18").
_ClearContentsEndSub命名区域使得用Range属性处理多重区域更为容易.
下例可在三个命名区域处于同一工作表时运行.
SubClearNamed()Range("MyRange,YourRange,HisRange").
ClearContentsEndSub使用Union方法用Union方法可将多个单元格区域组合到一个Range对象中.
下例创建了名为myMultipleRange的Range对象,并将其定义为单元格区域"A1:B2"和"C3:D4"的组合,然后将该组合区域的字体设置为加粗.
SubMultipleRange()Dimr1,r2,myMultipleRangeAsRangeSetr1=Sheets("Sheet1").
Range("A1:B2")Setr2=Sheets("Sheet1").
Range("C3:D4")SetmyMultipleRange=Union(r1,r2)myMultipleRange.
Font.
Bold=TrueEndSub使用Areas属性可用Areas属性引用选定的单个单元格区域或多块的选定区域集合.
下述过程计算选定区域内的块数目,如果选定区域中有多个块,就显示警告消息.
SubFindMultiple()IfSelection.
Areas.
Count>1ThenMsgBox"Cannotdothistoamultipleselection.
"EndIfEndSub16、在单元格区域中循环使用VisualBasic时,经常需要对某一区域内的每个单元格运行同一段语句.
为达到这一目的,可将循环语句和标识每个单元格的一个或多个方法组合使用,每循环一次,就对一个单元格执行一次操作.
在单元格区域中循环的一种方法是使用For.
.
.
Next循环语句和Cells属性.
使用Cells属性时,可用循环计数器(或其他变量或表达式)作为单元格编号.
下例中,变量counter代替了行号.
此过程将在单元格区域"C1:C20"中循环,将所有绝对值小于0.
01的数字都设置为0(零).
SubRoundToZero1()Forcounter=1To20SetcurCell=Worksheets("Sheet1").
Cells(counter,3)IfAbs(curCell.
Value)1ThenMsgBox"Youcannotcarryoutthiscommand"&_"onmulti-areaselections"EndIfEndSub10、Rows属性Application对象:返回一个Range对象,此对象代表当前工作表的所有行.
如果当前文档不是工作表,Rows属性无效.
只读.
Range对象:返回一个Range对象,此对象代表指定区域中的所有行.
只读.
Worksheet对象:返回一个Range对象,此对象代表指定工作表中的所有行.
只读.
有关返回一个集合中单个成员的详细内容,请参阅返回集合中的对象.
说明在不用对象识别符的情况下使用此属性等价于ActiveSheet.
Rows.
当应用于多选区域的Range对象时,该属性只返回该范围中第一个区域的行.
例如,如果Range对象有两个areas—A1:B2和C3:D4—Selection.
Rows.
Count返回2而不是4.
要在一个可能包含多选区域的范围时,利用Areas.
Count来判断该范围是否包含多个选择区域.
如果是,则象第3个示例中所示,在该范围中的每个区域循环.
Rows属性示例本示例删除Sheet1的第三行.
Worksheets("Sheet1").
Rows(3).
Delete本示例检查工作表一当前区域中的行,如果某行的第一个单元格值与前一行的第一个单元格的值相等,则删除此行.
ForEachrwInWorksheets(1).
Cells(1,1).
CurrentRegion.
Rowsthis=rw.
Cells(1,1).
ValueIfthis=lastThenrw.
Deletelast=thisNext本示例显示Sheet1选定区域的行数.
如果是多重选定区域,本示例将对每一个子区域进行循环.
Worksheets("Sheet1").
ActivateareaCount=Selection.
Areas.
CountIfareaCountlimitThenWithc.
Font.
Bold=True.
Italic=TrueEndWithEndIfNextcMsgBox"Alldone!
"EndSub示例中的If.
.
.
Then.
.
.
Else语句检查单元格的值.
如果它的值超过33,则With语句设置单元格中Font对象的Bold和Italic属性.
而If.
.
.
Then.
.
.
Else语句会以EndIf结束.
With语句可以节省代码键入次数,因为所包含的语句会自动的执行于紧接在With关键字后面的对象中.
Next语句会去调用单元格集合中的下一个单元格,而此单元格集合是包含于MyRange中.
MsgBox函数(它显示一个固有的VisualBasic对话框)显示一个信息用来指出Sub过程已经完成执行.
12、Public语句在模块级别中使用,用于声明公用变量和分配存储空间.
语法Public[WithEvents]varname[([subscripts])][As[New]type][,[WithEvents]varname[([subscripts])][As[New]type]].
.
.
Public语句的语法包含下面部分:部分描述WithEvents可选的.
关键字,说明varname是用来响应由ActiveX对象触发的事件的对象变量.
只有在类模块中才是合法的.
使用WithEvents,可以定义任意个所需的单个变量,但不能用WithEvents创建数组.
New和WithEvents不能一起使用.
varname必需的.
变量的名称;遵循标准的变量命名约定.
subscripts可选的.
数组变量的维数;最多可以定义60维的多维数组.
subscripts参数使用下面的语法:[lowerTo]upper[,[lowerTo]upper].
.
.
如果不显式指定lower,则数组的下界由OptionBase语句控制.
如果没有OptionBase语句则下界为0.
New可选的.
用它可以隐式地创建对象的关键字.
如果使用New声明对象变量,则在第一次引用该变量时创建该对象的新实例,因此不必使用Set语句来对该对象引用赋值.
New关键字不能用来声明任何内部数据类型的变量以及从属对象的实例,也不能与WithEvents一起使用.
Type可选的.
变量的数据类型;可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对变长的字符串)、String*length(对定长的字符串)、Object或Variant,用户定义类型,或对象类型.
所声明的每个变量都要有一个单独的Astype子句.
说明Public语句声明的变量在所有应用程序的所有没有使用OptionPrivateModule的模块的任何过程中都是可用的;若该模块使用了OptionPrivateModule,则该变量只是在其所属工程中是公用的.
小心不能在类模块中使用Public语句来声明一个定长的字符串变量.
使用Public语句可以声明变量的数据类型.
例如,下面的语句声明了一个Integer类型的变量.
PublicNumberOfEmployeesAsInteger也可以使用Public语句来声明变量的对象类型.
下面的语句为工作表的新实例声明了一个变量.
PublicXAsNewWorksheet如果在定义对象变量时没有使用New关键字,则在使用该变量之前,必须使用Set语句将一个已有的对象赋给这个引用对象的变量.
在被赋值之前,所声明的这个对象变量有一个特定值Nothing,这个值表示该变量没有指向任何对象的实例.
可以用带空圆括号的Public语句来声明动态数组.
在声明了动态数组之后,可以在过程内用ReDim语句来定义该数组的维数和元素.
如果试图在Private、Public或Dim语句中重定义一个已被显式定义了大小的数组的维数,就会发生错误.
如果不指定数据类型或对象类型,且在模块中没有使用Deftype语句,则按缺省情况该变量为Variant类型.
当初始化变量时,数值变量被初始化为0,变长的字符串被初始化为一个零长度的字符串(""),而定长的字符串则用0填充.
Variant变量被初始化为Empty.
用户自定义类型的变量的每个元素都作为各自独立的变量进行初始化.
Public语句示例该示例在标准模块的模块级(通用部分)使用Public语句,来显式声明公用的变量,指如果没有使用OptionPrivateModule,则在所有应用程序的所有模块的所有过程中都可以使用的变量.
PublicNumberAsInteger'公用的整数变量.
PublicNameArray(1To5)AsString'公用的字符串数组变量.
'多个声明,两个变体型变量,以及一个整数型变量,都是公用的.
PublicMyVar,YourVar,ThisVarAsInteger13、Private语句在模块级别中使用,用于声明私有变量及分配存储空间.
语法Private[WithEvents]varname[([subscripts])][As[New]type][,[WithEvents]varname[([subscripts])][As[New]type]].
.
.
Private语句的语法包含下面部分:部分描述WithEvents可选的.
关键字,说明varname是用来响应由ActiveX对象所触发的事件的对象变量.
只有在类模块中才是合法的.
使用WithEvents,可以定义任意个所需的单变量,但不能用WithEvents创建数组.
New和WithEvents不能一起使用.
varname必需的.
变量的名称;遵循标准的变量命名约定.
subscripts可选的.
数组变量的维数;最多可以定义60维的多维数组.
subscripts参数的使用语法如下:[lowerTo]upper[,[lowerTo]upper].
.
.
如果不显式指定lower,则数组的下界由OptionBase语句控制.
如果没有OptionBase语句则下界为0.
New可选的.
使其可以隐式地创建对象的关键字.
如果使用New声明对象变量,则在第一次引用该变量时创建该对象的新实例,因此不必使用Set语句来对该对象引用赋值.
New关键字不能声明任何内部数据类型的变量以及从属对象的实例,也不能与WithEvents一起使用.
type可选的.
变量的数据类型;可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对可变长的字符串)、String*length(对定长的字符串)、Object、Variant、用户定义类型或对象类型.
所声明的每个变量都要一个单独的Astype子句.
说明Private变量只能在包含其声明的模块中使用.
可以使用Private语句声明变量的数据类型.
例如,下面的语句声明了一个Integer类型的变量.
PrivateNumberOfEmployeesAsInteger也可以使用Private语句来声明变量的对象类型.
下面的语句为工作表的新实例声明了一个变量.
PrivateXAsNewWorksheet如果在定义对象变量时没有使用New关键字,则在使用该变量之前,必须使用Set语句将一个已有的对象赋给该引用对象的变量.
在赋值之前,所声明的这个对象变量有一个特定值Nothing,这个值表示该变量没有指向任何对象的实例.
如果不指定数据类型或对象类型,且在模块中没有使用Deftype语句,则按缺省情况该变量为Variant类型.
可以用带空圆括号的Private语句来声明动态数组,然后可以在过程内用ReDim语句来定义该数组的维数和元素.
如果试图在Private,Public或Dim语句中重新定义一个已显式定义了大小的数组的维数,就会发生错误.
当初始化变量时,数值变量被初始化为0,变长的字符串被初始化为一个零长度的字符串(""),而定长的字符串则用0填充.
Variant变量被初始化为Empty.
用户自定义类型的变量的每个元素作为各自独立的变量进行初始化.
注意当在过程中使用Private语句时,通常将Private语句放在过程的开始.
Private语句示例该示例演示在模块级使用Private语句来声明私有变量;即这些变量只能在包含其声明的模块中使用.
PrivateNumberAsInteger'私有的整数变量.
PrivateNameArray(1To5)AsString'私有的数组变量.
'多个声明,两个变体型,以及一个整型,都是私有的.
PrivateMyVar,YourVar,ThisVarAsInteger14、使用数组可以声明一个数组来代表一群具有相同数据类型的值.
数组是单一类型的变量,它具有很多的隔室来存储很多值,而常规的变量只有一个存储隔室,所以只能存储一个值.
但要引用所保持的所有值时,可以引用整个数组或是只引用数组的个别元素.

例如,若要存储一年中每天的支出,可以声明一个具有365个元素的数组变量,而不是365个变量.
数组中的每一个元素都包含一个值.
下列的语句声明数组变量curExpense具有365个元素.
按照缺省规定,数组的索引是从零开始,所以此数组的上标界是364而不是365.
DimcurExpense(364)AsCurrency若要设置个别元素的值,必须指定元素的索引.
下面的示例对于数组中的每个元素都赋予一个初始值20.
SubFillArray()DimcurExpense(364)AsCurrencyDimintIAsIntegerForintI=0to364curExpense(intI)=20NextEndSub更改数组的底层绑定可以在模块的顶部使用OptionBase语句,将第一个元素的缺省索引值从0改成1.
在下面的示例中,OptionBase语句改变数组第一个组件的索引值,接着Dim语句声明数组变量curExpense具有365个元素.
OptionBase1DimcurExpense(365)AsCurrency也可以利用To子句来对数组的底层绑定做显示地声明,如下面的示例所示:DimcurExpense(1To365)AsCurrencyDimstrWeekday(7To13)AsString在数组中存储Variant值有两种方式可以创建Variant值的数组.
第一种方式是声明Variant数据类型的数组,如下面的示例所示:DimvarData(3)AsVariantvarData(0)="ClaudiaBendel"varData(1)="4242MapleBlvd"varData(2)=38varData(3)=Format("06-09-1952","GeneralDate")另一种方式是指定Array函数所返回的数组为一个Variant变量,如下示例所示.
DimvarDataAsVariantvarData=Array("RonBendel","4242MapleBlvd",38,_Format("06-09-1952","GeneralDate"))对于元素类型为Variant的数组,可以利用索引来识别各元素,而不管用何种方式创建此数组.
例如,下列的语句可以被加到上述的示例中.
MsgBox"Datafor"&varData(0)&"hasbeenrecorded.
"使用具有多重维数的数组在VisualBasic中最多可以声明变量到60个维数.
例如,下列的语句声明一个5乘10的两维数组.
DimsngMulti(1To5,1To10)AsSingle如果将数组想成矩阵,则第一个参数代表行,而第二个参数代表列.
可以使用嵌套的For.
.
.
Next语句去处理多重维数数组.
下列的过程将一个两维数组的所有元素都填入Single值.
SubFillArrayMulti()DimintIAsInteger,intJAsIntegerDimsngMulti(1To5,1To10)AsSingle'用值填入数组.
ForintI=1To5ForintJ=1To10sngMulti(intI,intJ)=intI*intJDebug.
PrintsngMulti(intI,intJ)NextintJNextintIEndSub15、使用常数您的代码可能包含经常出现的常数值,或可能某些数值是非常难以记忆并且无明确意义的.
使用常数可使代码更容易读取与维护.
常数是一个有意义的名称,它可以替换一个号码或字符串而且值不会改变.
不能修改一个常数或如同操作变量般的赋一个新值给常数.

有三种类型的常数:固有的常数或系统定义的常数是由应用程序与控件提供的.
提供对象库的其它的应用程序如MicrosoftAccess,、MicrosoftExcelMicrosoftProject以及MicrosoftWord,也提供常数列表,这些常数可与它们所属的对象,方法以及属性等一起使用.
可以获得个别为对象浏览器中的对象库所提供的常数列表.
VisualBasic的常数都列在VisualBasicforApplications类型库以及DataAccessObject(DAO)程序库之中.
注意VisualBasic仍会对之前的VisualBasic或VisualBasicforApplications所定义的常数做识别.
可以提升常数到ObjectBrowser之中.
在ObjectBrowser中所列的常数,不用在的应用程序中声明.
符号或用户自定义的常数都是利用Const语句来声明.
条件编译常数都是利用#Const语句来声明.
在早期版本的VisualBasic中,常数的名称都是用大写字符串加上一横下划线而成,例如:TILE_HORIZONTAL固有的常数当前被限定来避免一个混淆,即具有相同名称的常数存在于多个对象库中,而这些常数可能具有不同的值所造成的.
有两种方法来限定常数名称:通过前缀通过库引用用前缀限定常数所有对象提供的固有的常数都以混合大小写格式显示,以两个字符为前缀来指出定义这些常数的对象库.
例如,由VisualBasicforApplications对象库而来的常数都会以"vb"为开端;而由MicrosoftExcel对象库而来的常数都会以"xl"为开端.
下面的示例解释了如何应用前缀字符于自定义控件,其通常是与类型库相关的.
vbTileHorizontalxlDialogBorder用库引用限定常数也可利用下列的语法来限定对常数的引用:[libname.
][modulename.
]constname限定常数的语法包含下面部分:单元描述libname可选的.
定义此常数的类型库.
对于多数的自定义控件(在Macintosh)中不可用来说,它也是控件的类名.
如果忘掉了控件的类名,可将鼠标的光标移动到工具箱中此控件的位置.
该类名会显示在"工具提示"中.
modulename可选的.
定义此常数的类型库,所包含的模块的名称.
可以利用"对象浏览器"来找到模块的名称.
constname在类型库中定义的常数名称.
例如:Threed.
LeftJustify16、AppActivate语句激活一应用程序窗口.
语法AppActivatetitle[,wait]AppActivate语句的语法具有以下几个命名参数:部分描述title必需的.
字符串表达式,所要激活的应用程序窗口的标题.
可以使用Shell函数返回的任务识别码来替换title,以激活应用程序.
wait可选的.
Boolean值,说明在激活另一个应用程序之前调用的应用程序是否有焦点.
如果为False(缺省),那么,即使调用的应用程序没有焦点,也直接激活指定的应用程序.
如果为True,则调用的应用程序会等到有焦点后,才激活指定的应用程序.
说明AppActivate语句将焦点移动到命名的应用程序或窗口,但并不影响焦点是否最大化或最小化.
当用户采取行动改变焦点或将窗口关闭时,就会将焦点从活动的应用程序窗口移动出去.
可用Shell函数启动一个应用程序并设置窗口样式.
在决定激活哪个应用程序时,请将title与每一个运行中的应用程序的标题字符串进行比较.
如果没有完全匹配,就激活任何这样的应用程序,其标题字符串以title开头.
如果以title命名的应用程序有很多实例,则激活任何一个实例.
AppActivate语句示例本示例说明使用AppActivate语句来激活应用程序的各种用法.
示例中用到的Shell语句均假定该应用程序已经存在指定的路径中.
在Macintosh上,缺省驱动器名为"HD",且路径名部分由冒号而不是反斜杠分隔.
DimMyAppID,ReturnValueAppActivate"MicrosoftWord"'激活Microsoft'Word.
'AppActivate也可利用Shell函数的返回值.
MyAppID=Shell("C:\WORD\WINWORD.
EXE",1)'运行MicrosoftWord.
AppActivateMyAppID'激活Microsoft'Word.
'您也可使用Shell函数的返回值.
ReturnValue=Shell("c:\EXCEL\EXCEL.
EXE",1)'运行MicrosoftExcel.
AppActivateReturnValue'激活Microsoft'Excel.
17、Beep语句通过计算机喇叭发出一个声调.
语法Beep说明呼叫的频率与时间长短取决于硬件和系统软件,并随电脑不同而不同.
.
Beep语句示例本示例使用Beep语句让计算机连续响三声.
DimIForI=1To3'循环3次.
Beep'发出一声.
NextI18、Close语句关闭Open语句所打开的输入/输出(I/O)文件.
语法:Close[filenumberlist]可选的filenumberlist参数为一个或多个文件号,其中filenumber为任何有效的文件号,语法如下:[[#]filenumber][,[#]filenumber].
.
.
说明若省略filenumberlist,则将关闭Open语句打开的所有活动文件.
当关闭Output或Append打开的文件时,将属于此文件的最终输出缓冲区写入操作系统缓冲区.
所有与该文件相关联的缓冲区空间都被释放.
在执行Close语句时,文件与其文件号之间的关联将终结.
Close语句示例本示例使用Close语句来关闭所有为Output而打开的三个文件.
DimI,FileNameForI=1To3'循环三次.
FileName="TEST"&I'创建文件名.
OpenFileNameForOutputAs#I'打开文件.
Print#I,"Thisisatest.
"'将字符串写入文件.
NextIClose'将三个已打开的文件全部关闭.
19、Date语句设置当前系统日期.
语法:Date=date对于运行MicrosoftWindows95的系统,要设置的date必须介于1980年1月1日与2099年12月31日之间.
对于运行MicrosoftWindowsNT的系统,date必须介于公元1980年1月1日到2079年12月31日之间.
对于Macintosh,date值必须是介于1904年1月1日到2040年2月5日之间的日期.
Date语句示例本示例使用Date语句来设置系统日期.
在开发环境中,日期原义会根据系统的地区设置,以短式日期格式显示.
DimMyDateMyDate=#February12,1985#'指定某个日期.
Date=MyDate'改变系统日期.
20、Error语句模拟错误的发生.
语法Errorerrornumber必要的errornumber可以是任何有效的错误号.
说明Error语句获得的支持是向后兼容的.
在新的代码中,特别是在建立对象时,要使用Err对象的Raise方法产生运行时错误.
如果已经定义errornumber,那么,在Err对象的属性被赋予下列值之后,Error语句会调用错误处理程序:属性值Number作为参数指定给Error语句的值.
可以是任何有效的错误号.
Source当前VisualBasic工程的名称.
Description字符串表达式,如果这个字符串存在,则表达式将与Error函数的返回值一致,该返回值是Error函数对指定的Number的返回值.
如果这个字符串不存在,则Description包含一个长度为零的字符串("").
HelpFileVisualBasic帮助文件的完整限定的驱动器、路径和文件名.
HelpContext对于与Number属性一致的错误所指定的VisualBasic帮助文件上下文ID.
LastDLLError零.
如果不存在错误处理程序,或未做任何启动动作,那么就会由Err对象属性发布一个错误信息并将错误信息显示出来.
注意并非全部VisualBasic主应用程序都可以建立对象.
请参考主机应用程序的文档来判断它能否建立类和对象.
Error语句示例本示例使用Error语句来模拟发生错误代号11的状况.
OnErrorResumeNext'错误处理.
Error11'模拟"除以零"的错误.
21、Exit语句退出Do.
.
.
Loop、For.
.
.
Next、Function、Sub或Property代码块.
语法ExitDoExitForExitFunctionExitPropertyExitSubExit语句的语法有以下几种形式:语句描述ExitDo提供一种退出Do.
.
.
Loop循环的方法,并且只能在Do.
.
.
Loop循环中使用.
ExitDo会将控制权转移到Loop语句之后的语句.
当ExitDo用在嵌套的Do.
.
.
Loop循环中时,ExitDo会将控制权转移到ExitDo所在位置的外层循环.
ExitFor提供一种退出For循环的方法,并且只能在For.
.
.
Next或ForEach.
.
.
Next循环中使用.
ExitFor会将控制权转移到Next之后的语句.
当ExitFor用在嵌套的For循环中时,ExitFor将控制权转移到ExitFor所在位置的外层循环.
ExitFunction立即从包含该语句的Function过程中退出.
程序会从调用Function的语句之后的语句继续执行.
ExitProperty立即从包含该语句的Property过程中退出.
程序会从调用Property过程的语句之后的语句继续执行.
ExitSub立即从包含该语句的Sub过程中退出.
程序会从调用Sub过程的语句之后的语句继续执行.
说明不要将Exit语句与End语句搞混了.
Exit并不说明一个结构的终止.
Exit语句示例本示例使用Exit语句退出For.
.
.
Next循环、Do.
.
.
Loop循环及子过程.
SubExitStatementDemo()DimI,MyNumDo'建立无穷循环.
ForI=1To1000'循环1000次.
MyNum=Int(Rnd*1000)'生成一随机数码.
SelectCaseMyNum'检查随机数码.
Case7:ExitFor'如果是7,退出For.
.
.
Next循环.
Case29:ExitDo'如果是29,退出Do.
.
.
Loop循环.
Case54:ExitSub'如果是54,退出子过程.
EndSelectNextILoopEndSub22、GoSub.
.
.
Return语句在一个过程中跳到另一个子程序中执行,执行后再返回.
语法GoSubline.
.
.
line.
.
.
Return必要的line参数可以是任何行标签或行号.
说明可以在过程中的任何地方使用GoSub和Return,但是GoSub和与之相应的Return语句必须放在同一个过程中.
一个子程序中可以包含一个以上的Return语句,但是当碰到第一个Return语句时,程序就会返回到紧接在刚刚执行的GoSub语句之后的语句继续执行.
注意不能使用GoSub.
.
.
Return来进入或退出Sub过程.
提示创建分开的过程,并使用GoSub.
.
.
Return来调用,可以使程序更具结构化.
GoSub.
.
.
Return语句示例本示例使用GoSub来调用子过程里的一段子程序.
Return语句则将执行返回到GoSub的下一个语句.
ExitSub语句则是用来避免控制意外进入该子程序的情形发生.
SubGosubDemo()DimNum'请求用户输入一个数字.
Num=InputBox("Enterapositivenumbertobedividedby2.
")'如果用户输入一个正整型,则使用子程序.
IfNum>0ThenGoSubMyRoutineDebug.
PrintNumExitSub'使用Exit命令来避免错误发生.
MyRoutine:Num=Num/2'将数除以2.
Return'将控制返回GoSub之后的语句.
EndSub23、GoTo语句无条件地转移到过程中指定的行.
语法GoToline必要的line参数可以是任意的行标签或行号.
说明GoTo只能跳到它所在过程中的行.
注意太多的GoTo语句,会使程序代码不容易阅读及调试.
尽可能使用结构化控制语句(Do.
.
.
Loop、For.
.
.
Next、If.
.
.
Then.
.
.
Else、SelectCase).
GoTo语句示例本示例使用GoTo语句在一个过程内的不同程序段间作流程控制,不同程序段用不同的"程序标签"来区隔.
SubGotoStatementDemo()DimNumber,MyStringNumber=1'设置变量初始值.
'判断Number的值以决定要完成那一个程序区段(以"程序标签"来表式).
IfNumber=1ThenGoToLine1ElseGoToLine2Line1:MyString="Numberequals1"GoToLastLine'完成最后一行.
Line2:'下列的语句根本不会被完成.
MyString="Numberequals2"LastLine:Debug.
PrintMyString'将""Numberequals1""显示在"立即"窗口.
EndSub24、Input#语句从已打开的顺序文件中读出数据并将数据指定给变量.
语法Input#filenumber,varlistInput#语句的语法具有以下几个部分:部分描述filenumber必要.
任何有效的文件号.
varlist必要.
用逗号分界的变量列表,将文件中读出的值分配给这些变量;这些变量不可能是一个数组或对象变量.
但是,可以使用变量描述数组元素或用户定义类型的元素.
说明通常用Write#将Input#语句读出的数据写入文件.
该语句只能用于以Input或Binary方式打开的文件.
在读出数据时不经修改就可直接将标准的字符串或数值数据指定给变量.
下表说明如何处理其它输入数据:数据指定给变量的值分隔逗号或空白行Empty#NULL#Null#TRUE#or#FALSE#True或False#yyyy-mm-ddhh:mm:ss#用表达式表示的日期与/或时间#ERRORerrornumber#errornumber(此变量是一个Variant,用来标记错误)输入数据中的双引号符号("")将被忽略.
注意不能写入包含了内嵌引号的字符串,例如,用Input#语句写入"1,2""X":Input#会把这个字符串当作两个完全分开的字符串.
文件中数据项目的顺序必须与varlist中变量的顺序相同,而且与相同数据类型的变量匹配.
如果变量为数值类型而数据不是数值类型,则指定变量的值为零.
在输入数据项目时,如果已到达文件结尾,则会终止输入,并产生一个错误.
注意为了能够用Input#语句将文件的数据正确读入到变量中,在将数据写入文件时,要使用Write#语句而不使用Print#语句.
使用Write#语句可以确保将各个单独的数据域正确分隔开.
Input#语句示例本示例使用Input#语句将文件内的数据读入两个变量中.
本示例假设TESTFILE文件内含数行以Write#语句写入的数据;也就是说,每一行数据中的字符串部分都是用双引号括起来,而与数字用逗号隔开,例如,("Hello",234).
DimMyString,MyNumberOpen"TESTFILE"ForInputAs#1'打开输入文件.
DoWhileNotEOF(1)'循环至文件尾.
Input#1,MyString,MyNumber'将数据读入两个变量.
Debug.
PrintMyString,MyNumber'在立即窗口中显示数据.
LoopClose#1'关闭文件.
25、Let语句将表达式的值赋给变量或属性.
语法[Let]varname=expressionLet语句的语法包含下面部分:部分描述Let可选的.
显式使用Let关键字也是一种格式,但通常都省略该关键字.
varname必需的.
变量或属性的名称;遵循标准变量命名约定.
expression必需的.
赋给变量或属性的值.
说明只有当表达式是一种与变量兼容的数据类型时,该表达式的值才可以赋给变量或属性.
不能将字符串表达式的值赋给数值变量,也不能将数值表达式的值赋给字符串变量.
如果这样做,就会在编译时间出现错误.

可以用字符串或数值表达式赋值给Variant变量,但反过来不一定正确.
任何除Null之外的Variant都可以赋给字符串变量,但只有当Variant的值可以解释为某个数时才能赋给数值变量.
可以使用IsNumeric函数来确认Variant是否可以转换为一个数.
小心将一种数值类型的表达式赋给另一种数值类型的变量时,会强制将该表达式的值转换为结果变量的数值类型.
Let语句可以将一个记录类型的变量赋给属于同一用户定义类型的变量.
使用LSet语句可以给不同用户自定义类型的记录变量赋值.
使用Set语句可以将对象引用赋给变量.
Let语句示例该示例使用显式的Let语句将表达式的值赋给变量.
DimMyStr,MyInt'下面的变量赋值使用了Let语句.
LetMyStr="HelloWorld"LetMyInt=5下面是没有使用Let语句的相同赋值.
DimMyStr,MyIntMyStr="HelloWorld"MyInt=526、Load语句装载一对象但却不显示.
语法Loadobjectobject代表对象表达式,其值为"应用于"列表中的对象.
说明在装载对象时会先把它放入内存中,但却是不可见的.
必须用Show方法使对象可见.
在对象成为可见的之前,用户不能与之交互作用.
您可以在Initialize事件过程中用程序操控对象.
Load语句示例下列示例在UserForm1的Initialize事件期间加载UserForm2.
单击UserForm2就可将UserForm1显示出来.
'UserForm1的Initialize事件过程PrivateSubUserForm_Initialize()LoadUserForm2UserForm2.
ShowEndSub'UserForm2的Click事件PrivateSubUserForm_Click()UserForm2.
HideEndSub'UserForm1的Click事件PrivateSubUserForm_Click()UserForm2.
ShowEndSub27、Name语句重新命名一个文件、目录、或文件夹.
语法NameoldpathnameAsnewpathnameName语句的语法具有以下几个部分:部分描述oldpathname必要参数.
字符串表达式,指定已存在的文件名和位置,可以包含目录或文件夹、以及驱动器.
newpathname必要参数.
字符串表达式,指定新的文件名和位置,可以包含目录或文件夹、以及驱动器.
而由newpathname所指定的文件名不能存在.
说明Name语句重新命名文件并将其移动到一个不同的目录或文件夹中.
如有必要,Name可跨驱动器移动文件.
但当newpathname和oldpathname都在相同的驱动器中时,只能重新命名已经存在的目录或文件夹.
Name不能创建新文件、目录或文件夹.
在一个已打开的文件上使用Name,将会产生错误.
必须在改变名称之前,先关闭打开的文件.
Name参数不能包括多字符(*)和单字符()的统配符.
Name语句示例本示例使用Name语句来更改文件的名称.
示例中假设所有使用到的目录或文件夹都已存在.
在Macintosh中,默认驱动器名称是"HD"并且路径部分由冒号取代反斜线隔开.
DimOldName,NewNameOldName="OLDFILE":NewName="NEWFILE"'定义文件名.
NameOldNameAsNewName'更改文件名.
OldName="C:\MYDIR\OLDFILE":NewName="C:\YOURDIR\NEWFILE"NameOldNameAsNewName'更改文件名,并移动文件.
28、On.
.
.
GoSub、On.
.
.
GoTo语句根据表达式的值,转到特定行执行.
语法OnexpressionGoSubdestinationlistOnexpressionGoTodestinationlistOn.
.
.
GoSub和On.
.
.
GoTo语句的语法具有以下几个部分:部分描述expression必要参数.
数值表达式,其运算结果应该是一个界于0到255之间的整数,包含0和255.
如果expression的计算结果不是一个整数,则它会先四舍五入为一个整数.
destinationlist必要参数.
行号或行标签的列表,之间要以逗号隔开.
说明expression的值会决定转到destinationlist中的哪一行.
如果expression的值小于1或大于列表的项目个数,则会产生下面的结果之一:如果表达式的值则等于0控制权会转移到On.
.
.
GoSub或On.
.
.
GoTo之后的语句.
大于串的项目个数控制权会转移到On.
.
.
GoSub或On.
.
.
GoTo之后的语句.
负数会发生错误.
大于255会发生错误.
可以在同一个列表中混合使用行号和行标签.
在On.
.
.
GoSub和On.
.
.
GoTo中也可随意使用任意个行号和行标签.
但是,如果使用了太多的行标签或行号,以至于在一行中放不下,那么就必须在一行后使用续行符来衔接到下一行.
提示若要执行多重分支,SelectCase提供了一种结构化与适应性更强的方法.
On.
.
.
GoSub及On.
.
.
GoTo语句示例本示例使用On.
.
.
GoSub及On.
.
.
GoTo语句来完成不同的子程序或程序区段.
SubOnGosubGotoDemo()DimNumber,MyStringNumber=2'设置变量初值.
'BranchtoSub2.
OnNumberGoSubSub1,Sub2'在On.
.
.
GoSub退出後,程序会回到此处来继续完成.
OnNumberGoToLine1,Line2'完成Line2标记之区段.
'在On.
.
.
GoTo退出之后,程序不会回到此处来.
ExitSubSub1:MyString="InSub1":ReturnSub2:MyString="InSub2":ReturnLine1:MyString="InLine1"Line2:MyString="InLine2"EndSub29、Open语句能够对文件输入/输出(I/O).
语法OpenpathnameFormode[Accessaccess][lock]As[#]filenumber[Len=reclength]Open语句的语法具有以下几个部分:部分描述pathname必要.
字符串表达式,指定文件名,该文件名可能还包括目录、文件夹及驱动器.
mode必要.
关键字,指定文件方式,有Append、Binary、Input、Output、或Random方式.
如果未指定方式,则以Random访问方式打开文件.
access可选.
关键字,说明打开的文件可以进行的操作,有Read、Write、或ReadWrite操作.
lock可选.
关键字,说明限定于其它进程打开的文件的操作,有Shared、LockRead、LockWrite、和LockReadWrite操作.
filenumber必要.
一个有效的文件号,范围在1到511之间.
使用FreeFile函数可得到下一个可用的文件号.
reclength可选.
小于或等于32,767(字节)的一个数.
对于用随机访问方式打开的文件,该值就是记录长度.
对于顺序文件,该值就是缓冲字符数.
说明对文件做任何I/O操作之前都必须先打开文件.
Open语句分配一个缓冲区供文件进行I/O之用,并决定缓冲区所使用的访问方式.
如果pathname指定的文件不存在,那么,在用Append、Binary、Output、或Random方式打开文件时,可以建立这一文件.
如果文件已由其它进程打开,而且不允许指定的访问类型,则Open操作失败,而且会有错误发生.
如果mode是Binary方式,则Len子句会被忽略掉.
重要在Binary、Input和Random方式下可以用不同的文件号打开同一文件,而不必先将该文件关闭.
在Append和Output方式下,如果要用不同的文件号打开同一文件,则必须在打开文件之前先关闭该文件.
Open语句示例本示例示范Open语句的不同用法来做到文件的输出与输入.
下列代码以顺序输入模式打开TESTFILE文件.
Open"TESTFILE"ForInputAs#1'若要以其他方式打开文件,必需先关闭此文件.
Close#1下列代码以只允许写操作的二进制方式打开文件.
Open"TESTFILE"ForBinaryAccessWriteAs#1'若要以其他方式打开文件,必需先关闭此文件.
Close#1下列代码以随机方式打开文件,文件中含有用户自定义数据类型Record的记录.
TypeRecord'定义用户自定义数据类型.
IDAsIntegerNameAsString*20EndTypeDimMyRecordAsRecord'声明变量.
Open"TESTFILE"ForRandomAs#1Len=Len(MyRecord)'若要以其他方式打开文件,必需先关闭此文件.
Close#1下列代码以顺序输出方式打开文件;任何过程都可以读写该文件.
Open"TESTFILE"ForOutputSharedAs#1'若要以其他方式打开文件,必需先关闭此文件.
Close#1下列代码以只允许读的二进制方式打开文件;其他过程不可以读该文件.
Open"TESTFILE"ForBinaryAccessReadLockReadAs#130、Rem语句用来在程序中包含注释.
语法Remcomment也可以使用如下语法:'commentcomment参数是可选的,指要包括的任何注释文本.
在Rem关键字与comment之间要加一个空格.
说明如果使用行号或行标签,则可以从GoTo或GoSub语句转到一个Rem语句行.
程序会从该Rem语句下面的第一条可执行语句继续执行.
如果在其它语句行后使用Rem关键字,则必须使用冒号(:)与语句隔开.
可以用一个撇号(')来代替Rem关键字.
若使用撇号,则在其它语句行使用时不必加冒号.
Rem语句示例该示例说明用来在程序中包含注释的Rem语句的各种格式.
DimMyStr1,MyStr2MyStr1="Hello":Rem注释在语句之后要用冒号隔开.
MyStr2="Goodbye"'这也是一条注释;无需使用冒号.
31、Stop语句暂停执行.
语法Stop说明可以在过程中的任何地方放置Stop语句,使用Stop语句,就相当于在程序代码中设置断点.
Stop语句会暂停程序的执行,但是它不像End,因为Stop不会关闭任何文件,或清除变量,除非它是以编译后的可执行文件(.
EXE)方式来执行.
Stop语句示例本示例使用Stop语句来暂停For.
.
.
Next循环里的每一次完成.
DimIForI=1To10'开始For.
.
.
Next循环.
Debug.
PrintI'将I的值显示到"立即"窗口.
Stop'每一次的完成都会在此暂停.
NextI32、Time语句设置系统时间.
语法Time=time必要的time参数,可以是任何能够表示时刻的数值表达式、字符串表达式或它们的组合.
说明如果time是一字符串,则Time会试着根据系统指定的时间,利用时间分隔符将其转换成一个时间.
如果无法转换成一个有效的时间,则会导致错误发生.
Time语句示例本示例使用Time语句来设置系统时间.
DimMyTimeMyTime=#4:35:17PM#'指定一时间.
Time=MyTime'将系统时间设置为MyTime的内容.
33、While.
.
.
Wend语句只要指定的条件为True,则会重复执行一系列的语句.
语法Whilecondition[statements]WendWhile.
.
.
Wend语句的语法具有以下几个部分:部分描述condition必要参数.
数值表达式或字符串表达式,其计算结果为True或False.
如果condition为Null,则condition会视为False.
statements可选参数.
一条或多条语句,当条件为True时执行.
说明如果condition为True,则所有的statements都会执行,一直执行到Wend语句.
然后再回到While语句,并再一次检查condition,如果condition还是为True,则重复执行.
如果不为True,则程序会从Wend语句之后的语句继续执行.
While.
.
.
Wend循环也可以是多层的嵌套结构.
每个Wend匹配最近的While语句.
提示Do.
.
.
Loop语句提供了一种结构化与适应性更强的方法来执行循环.
While.
.
.
Wend语句示例本示例使用While.
.
.
Wend语句来增加计数变量的值.
如果条件判断值为True,则循环内的语句将一直执行下去.
DimCounterCounter=0'设置变量初值.
WhileCounter19时则循环终止.
Debug.
PrintCounter'在"立即"窗口中显示数字20.
(二)逻辑语句1、If.
.
.
Then.
.
.
Else语句根据条件的值,可使用If.
.
.
Then.
.
.
Else语句运行指定的语句或一个语句块.
If.
.
.
Then.
.
.
Else语句可根据需要嵌套多级.
然而,为了可读性可能会使用SelectCase语句而不使用多嵌套级的If.
.
.
Then.
.
.
Else语句.
如果条件为True则运行语句当条件为True时,若只要执行一个语句,则可以使用单行的If.
.
.
Then.
.
.
Else语法.
下列的示例显示了单行语法,省略了Else关键字:SubFixDate()myDate=#2/13/95#IfmyDate8Bonus=100CaseElseBonus=0EndSelectEndFunction3、使用For.
.
.
Next语句可以使用For.
.
.
Next语句去重复一个语句块,而它的次数的数字是指定的.
For循环使用一个计数变量,当重复每个循环时它的值会增加或减少.
下面的过程会让计算机发出哔声50次.
For语句会指定计数变量x的开始与结束值.
Next语句会将计数变量的值加1.
SubBeeps()Forx=1To50BeepNextxEndSub使用Step关键字,可以由所指定的值增加或减少计数变量.
在下面的示例中,计数变量j会在每次循环重复时加上2.
当循环完成时,total的值为2、4、6、8和10的总合.
SubTwosTotal()Forj=2To10Step2total=total+jNextjMsgBox"Thetotalis"&totalEndSub为了减少计数变量的值,可以使用负的Step值.
为了减少计数变量的值,必须指定一个小于开始值的结束值.
在下面的示例中,计数变量myNum会在每次循环重复时减去2.
当循环完成时,total的值为16、14、12、10、8、6、4和2的总合.
SubNewTotal()FormyNum=16To2Step-2total=total+myNumNextmyNumMsgBox"Thetotalis"&totalEndSub注意在Next语句后面不必包含计数变量的名称.
上述的示例中,因为要具有可读性才加上计数变量的名称.
可以在计数变量到达它的结束值之前,使用ExitFor语句来退出For.
.
.
Next语句.
例如,当错误发生时,可以使用在If.
.
.
Then.
.
.
Else语句或是SelectCase语句的True语句块中的ExitFor语句,它是专门用来检查此错误的.
如果没有错误发生,则If.
.
.
Then.
.
.
Else语句的值为False,循环会象预期那样的运行.
4、ForEach.
.
.
Next语句ForEach.
.
.
Next语句会重复一个语句块,而它是作用于集合中的每个对象或是数组中的每个元素.
当循环执行一次则VisualBasic会自动设置一个变量.
例如,下面的过程会关闭所有的窗体,除了窗体包含的过程正在运行以外.
SubCloseForms()ForEachfrmInApplication.
FormsIffrm.
CaptionScreen.
ActiveForm.
CaptionThenfrm.
CloseNextEndSub下面的代码会在数组的每个元素中循环,并且将每个值设置成它的索引变量I的值.
DimTestArray(10)AsInteger,IAsVariantForEachIInTestArrayTestArray(I)=INextI对某范围的单元格做循环可以使用ForEach.
.
.
Next循环对某范围的单元格做循环.
下面的过程会对于Sheet1中的A1:D10范围做循环,并将任何绝对值小于0.
01的号码设为0.
SubRoundToZero()ForEachmyObjectinmyCollectionIfAbs(myObject.
Value)10myNum=myNum-1counter=counter+1LoopMsgBox"Theloopmade"&counter&"repetitions.
"EndSubSubChkLastWhile()counter=0myNum=9DomyNum=myNum-1counter=counter+1LoopWhilemyNum>10MsgBox"Theloopmade"&counter&"repetitions.
"EndSub直到条件变成True才重复语句当使用Until关键字去检查Do.
.
.
Loop语句中的条件时,可以使用两种方法.
可以在进入循环之前检查条件(如同ChkFirstUntil过程所示),也可以在循环至少运行一次之后才检查条件(如同ChkLastUntil过程所示).
当条件仍然为False时,循环继续.
SubChkFirstUntil()counter=0myNum=20DoUntilmyNum=10myNum=myNum-1counter=counter+1LoopMsgBox"Theloopmade"&counter&"repetitions.
"EndSubSubChkLastUntil()counter=0myNum=1DomyNum=myNum+1counter=counter+1LoopUntilmyNum=10MsgBox"Theloopmade"&counter&"repetitions.
"EndSub从循环内退出Do.
.
.
Loop语句可以使用ExitDo语句来退出Do.
.
.
Loop语句.
例如,为了退出无穷循环,可以在If.
.
.
Then.
.
.
Else语句或是SelectCase语句的True语句块中使用ExitDo语句.
如果条件为False,则循环会象通常那样运行.
在下面的示例中,myNum被赋予一个会造成无穷循环的值.
而If.
.
.
Then.
.
.
Else语句会去检查这个情况然后退出,以避免无穷循环.
SubExitExample()counter=0myNum=9DoUntilmyNum=10myNum=myNum-1counter=counter+1IfmyNum=1Then'如果没有选中的内容,用上一次的列表项.
IfListBox1.
ListIndex=-1ThenListBox1.
ListIndex=_ListBox1.
ListCount-1EndIfListBox1.
RemoveItem(ListBox1.
ListIndex)EndIfEndSubPrivateSubUserForm_Initialize()EntryCount=0CommandButton1.
Caption="AddItem"CommandButton2.
Caption="RemoveItem"EndSub12、SpinDown和SpinUp事件用户单击数值调节钮的向下或向左箭头时发生SpinDown事件.
用户单击数值调节钮的向上或向右箭头时发生SpinUp事件.
语法PrivateSubobject_SpinDown()PrivateSubobject_SpinUp()SpinDown和SpinUp事件的语法包含以下成分:成分描述object必需.
一个有效的对象.
说明SpinDown事件减少Value属性.
SpinUp事件增加Value属性.
13、SpinDown、SpinUp事件和Delay属性示例下例中,演示当用户按下鼠标按钮来更改数值调节钮或滚动条的值时,连续的Change、SpinUp和SpinDown事件之间的时间间隔.
该示例中,用户选择延时设置,然后单击并按住数值调节钮的任一边.
当SpinUp和SpinDown事件初始化时,它们被记录在列表框中.
若要使用该示例,请将该示例代码复制到某窗体的声明变量部分.
请确保该窗体包含:名为SpinButton1的数值调节钮.
名为OptionButton1和OptionButton2的两个选项按钮控件.
名为ListBox1的列表框.
DimEventCountAsLongPrivateSubResetControl()ListBox1.
ClearEventCount=0SpinButton1.
Value=5000EndSubPrivateSubUserForm_Initialize()SpinButton1.
Min=0SpinButton1.
Max=10000ResetControlSpinButton1.
Delay=50OptionButton1.
Caption="50milliseconddelay"OptionButton2.
Caption="250milliseconddelay"OptionButton1.
Value=TrueEndSubPrivateSubOptionButton1_Click()SpinButton1.
Delay=50ResetControlEndSubPrivateSubOptionButton2_Click()SpinButton1.
Delay=250ResetControlEndSubPrivateSubSpinButton1_SpinDown()EventCount=EventCount+1ListBox1.
AddItemEventCountEndSubPrivateSubSpinButton1_SpinUp()EventCount=EventCount+1ListBox1.
AddItemEventCountEndSub14、组合框控件组合框将列表框和文本框的特性结合在一起.
用户可以像在文本框中那样输入新值,也可以像在列表框中那样选择已有的值.
说明如果将组合框连接到了数据源,那么组合框会将用户输入或选择的值插入到该数据源中.
如果连接的是多列组合框,那么BoundColumn属性将哪个值保存到连接的数据源中.
组合框中的列表由多行数据构成.
每行可有一列或多列,列标题是可有可无的.
有些应用程序不支持列标题,还有些只提供有限的支持.
组合框的默认属性是Value属性.
组合框的默认事件是Change事件.
注意如果希望在任何时候都将列表中的各行数据显示出来,那么可以使用列表框代替组合框.
如果希望在使用组合框时,只使用列表中列出的值,可设置组合框的Style属性,以使该控件看上去像下拉列表框.
组合框控件、AddItem方法、Picture和PicturePosition属性示例下例用组合框来显示控件的图片位置选项.
每次用户单击列表选项,命令按钮上的图片和题注都将被更新.
这个代码示例还使用了AddItem方法来固定组合框选项.
若要使用该示例,请将示例代码复制到某窗体的声明变量部分.
请确保该窗体包含:名为Label1的标签.
名为CommandButton1的命令按钮.
名为ComboBox1的组合框.
PrivateSubUserForm_Initialize()Label1.
Left=18Label1.
Top=12Label1.
Height=12Label1.
Width=190Label1.
Caption="Selectpictureplacement"_&"relativetothecaption.
"'把列表条目加入组合框.
每一'条目的值符合组合框中'对应的ListIndex的值.
ComboBox1.
AddItem"LeftTop"'ListIndex=0ComboBox1.
AddItem"LeftCenter"'ListIndex=1ComboBox1.
AddItem"LeftBottom"'ListIndex=2ComboBox1.
AddItem"RightTop"'ListIndex=3ComboBox1.
AddItem"RightCenter"'ListIndex=4ComboBox1.
AddItem"RightBottom"'ListIndex=5ComboBox1.
AddItem"AboveLeft"'ListIndex=6ComboBox1.
AddItem"AboveCenter"'ListIndex=7ComboBox1.
AddItem"AboveRight"'ListIndex=8ComboBox1.
AddItem"BelowLeft"'ListIndex=9ComboBox1.
AddItem"BelowCenter"'ListIndex=10ComboBox1.
AddItem"BelowRight"'ListIndex=11ComboBox1.
AddItem"Centered"'ListIndex=12'使用下拉列表ComboBox1.
Style=fmStyleDropDownList'组合框值是ListIndex值ComboBox1.
BoundColumn=0'把组合框设置为第一个条目ComboBox1.
ListIndex=0ComboBox1.
Left=18ComboBox1.
Top=36ComboBox1.
Width=90ComboBox1.
ListWidth=90'初始化CommandButton1CommandButton1.
Left=230CommandButton1.
Top=36CommandButton1.
Height=120CommandButton1.
Width=120'注意:确认引用的位图文件是'存在于系统中的,并在'文件名中包括路径CommandButton1.
Picture=_LoadPicture("c:\windows\argyle.
bmp")CommandButton1.
PicturePosition=ComboBox1.
ValueEndSubPrivateSubComboBox1_Click()SelectCaseComboBox1.
ValueCase0'上左CommandButton1.
Caption="LeftTop"CommandButton1.
PicturePosition=_fmPicturePositionLeftTopCase1'中左CommandButton1.
Caption="LeftCenter"CommandButton1.
PicturePosition=_fmPicturePositionLeftCenterCase2'下左CommandButton1.
Caption="LeftBottom"CommandButton1.
PicturePosition=_fmPicturePositionLeftBottomCase3'上右CommandButton1.
Caption="RightTop"CommandButton1.
PicturePosition=_fmPicturePositionRightTopCase4'中右CommandButton1.
Caption="RightCenter"CommandButton1.
PicturePosition=_fmPicturePositionRightCenterCase5'下右CommandButton1.
Caption="RightBottom"CommandButton1.
PicturePosition=_fmPicturePositionRightBottomCase6'左上CommandButton1.
Caption="AboveLeft"CommandButton1.
PicturePosition=_fmPicturePositionAboveLeftCase7'中上CommandButton1.
Caption="AboveCenter"CommandButton1.
PicturePosition=_fmPicturePositionAboveCenterCase8'右上CommandButton1.
Caption="AboveRight"CommandButton1.
PicturePosition=_fmPicturePositionAboveRightCase9'左下CommandButton1.
Caption="BelowLeft"CommandButton1.
PicturePosition=_fmPicturePositionBelowLeftCase10'中下CommandButton1.
Caption="BelowCenter"CommandButton1.
PicturePosition=_fmPicturePositionBelowCenterCase11'右下CommandButton1.
Caption="BelowRight"CommandButton1.
PicturePosition=_fmPicturePositionBelowRightCase12'中CommandButton1.
Caption="Centered"CommandButton1.
PicturePosition=_fmPicturePositionCenterEndSelectEndSub15、命令按钮控件启动、结束或中断一项操作或一系列操作.
说明为命令按钮的Click事件所指定的宏或事件过程决定了命令按钮可以完成什么操作.
例如,可以创建能够打开另一个窗体的命令按钮.
在命令按钮上可以显示文本或图片,或者二者同时显示.
命令按钮的默认属性是Value属性.
命令按钮的默认事件是Click事件.
Click事件、命令按钮控件、Accelerator和Caption属性示例每当用户用鼠标或加速键来单击按钮时,该示例都将改变一次命令按钮的Accelerator和Caption属性.
Click事件包含改变Accelerator和Caption属性的代码.
若要使用该示例,请将代码粘贴到包含名为CommandButton1的命令按钮的窗体的声明变量部分.
PrivateSubUserForm_Initialize()CommandButton1.
Accelerator="C"'将加速键设置为COMMAND+CEndSubPrivateSubCommandButton1_Click()IfCommandButton1.
Caption="OK"Then'检查题注,然后更改它.
CommandButton1.
Caption="Clicked"CommandButton1.
Accelerator="C"'将加速键设置为COMMAND+CElseCommandButton1.
Caption="OK"CommandButton1.
Accelerator="O"'将加速键设置为COMMAND+OEndIfEndSubPage对象、命令按钮、多页控件和ControlTipText属性示例下例中,为多页控件中的三个命令按钮控件和两个Page对象定义ControlTipText属性.
若要使用该示例,请将示例代码复制到某窗体的声明变量部分.
请确保该窗体包含:名为MultiPage1的多页控件.
名为CommandButton1到CommandButton3的三个命令按钮控件.
注意对于多页控件的单个页,当多页控件或者多页控件的当前页上的控件有焦点时,ControlTipText变为有效.
PrivateSubUserForm_Initialize()MultiPage1.
Page1.
ControlTipText="Hereinpage1"MultiPage1.
Page2.
ControlTipText="Nowinpage2"CommandButton1.
ControlTipText="Andnowhere's"CommandButton2.
ControlTipText="atipfrom"CommandButton3.
ControlTipText="yourcontrols!
"EndSub16、标签控件用于显示描述性文本.
说明窗体中的标签控件用于显示描述性文本,如标题、题注或简单的指导信息.
例如地址簿的标签可以包括姓名、街道或城市.
标签不能显示来自数据源或表达式的值;它总是非连接的,并且不会随着从一条记录移到另一条记录而改变.

标签的默认属性是Caption属性.
标签的默认事件是Click事件.
Style属性和标签控件示例下例用Style属性来指定多页控件和TabStrip的标签的外观.
这个示例还演示了使用标签的方法.
用户通过选择选项按钮来选取样式.
若要使用该示例,请将示例代码复制到某窗体的声明变量部分.
请确保该窗体包含:名为Label1的标签.
名为OptionButton1到OptionButton3的三个选项按钮控件.
名为MultiPage1的多页控件.
名为TabStrip1的TabStrip.
TabStrip之中的任意控件.
在多页控件的每一页中的任意控件.
PrivateSubOptionButton1_Click()MultiPage1.
Style=fmTabStyleTabsTabStrip1.
Style=fmTabStyleTabsEndSubPrivateSubOptionButton2_Click()'注意页面边界是看不见的MultiPage1.
Style=fmTabStyleButtonsTabStrip1.
Style=fmTabStyleButtonsEndSubPrivateSubOptionButton3_Click()'注意页面边界是看不见的'并且页正文开始于标签'正常出现处MultiPage1.
Style=fmTabStyleNoneTabStrip1.
Style=fmTabStyleNoneEndSubPrivateSubUserForm_Initialize()Label1.
Caption="Page/TabStyle"OptionButton1.
Caption="Tabs"OptionButton1.
Value=TrueMultiPage1.
Style=fmTabStyleTabsTabStrip1.
Style=fmTabStyleTabsOptionButton2.
Caption="Buttons"OptionButton3.
Caption="NoTabsorButtons"EndSub17、列表框控件、DataObject对象、MouseMove事件和StartDrag、SetText方法示例下例用DataObject来包含拖动文本,演示从一个列表框到另一个的拖放操作.
该代码示例在MouseMove事件中使用SetText和StartDrag方法来完成拖放操作.
若要使用该示例,请将示例代码复制到某窗体的声明变量部分.
请确保该窗体包含名为ListBox1和ListBox2的两个列表框控件.
还需在第二个列表框中添加选择.
PrivateSubListBox2_BeforeDragOver(ByValCancelAs_MSForms.
ReturnBoolean,ByValDataAs_MSForms.
DataObject,ByValXAsSingle,_ByValYAsSingle,ByValDragStateAsLong,_ByValEffectAsMSForms.
ReturnEffect,_ByValShiftAsInteger)Cancel=TrueEffect=1EndSubPrivateSubListBox2_BeforeDropOrPaste(ByVal_CancelAsMSForms.
ReturnBoolean,_ByValActionAsLong,ByValDataAs_MSForms.
DataObject,ByValXAsSingle,_ByValYAsSingle,ByValEffectAs_MSForms.
ReturnEffect,ByValShiftAsInteger)Cancel=TrueEffect=1ListBox2.
AddItemData.
GetTextEndSubPrivateSubListBox1_MouseMove(ByValButtonAs_Integer,ByValShiftAsInteger,ByValXAs_Single,ByValYAsSingle)DimMyDataObjectAsDataObjectIfButton=1ThenSetMyDataObject=NewDataObjectDimEffectAsIntegerMyDataObject.
SetTextListBox1.
ValueEffect=MyDataObject.
StartDragEndIfEndSubPrivateSubUserForm_Initialize()Fori=1To10ListBox1.
AddItem"Choice"_&(ListBox1.
ListCount+1)NextiEndSub18、多页控件用于将多屏信息作为单个集合给出.
multipagePages(pege)说明多页控件在处理可以划分为不同类别的大量信息时很有用.
例如,在人事管理应用程序中,可用多页控件显示雇员信息:一页用于显示个人信息,如姓名和地址;另一页列出工作经历;第三页列出参考信息.
利用多页控件能够将相关信息组织在一起显示出来,同时又能够随时访问整条记录.

新页被添加到当前所选页的右边,但不紧靠着它.
注意多页控件是Pages集合的容器,每个多页控件都保存了一个或多个Page对象.
多页控件的默认属性是Value属性,该属性返回多页控件的Pages集合中当前活动页面的索引编号.
多页控件的默认事件是Change事件.
Add、Cut、Paste方法,Page对象和多页控件示例下例用Add、Cut和Paste方法从多页控件的页中剪切和粘贴控件.
剪切和粘贴操作中涉及的控件,动态地被添加进窗体.
本示例假设用户将添加,然后剪切、粘贴新的控件.
若要使用该示例,请将示例代码复制到某窗体的声明变量部分.
请确保该窗体包含:名为从CommandButton1到CommandButton3的三个命令按钮控件.
名为Multipage1的多页控件.
DimMyTextBoxAsControlPrivateSubCommandButton1_Click()SetMyTextBox=MultiPage1.
Pages(MultiPage1.
Value).
Controls_.
Add("MSForms.
TextBox.
1","MyTextBox",Visible)CommandButton2.
Enabled=TrueCommandButton1.
Enabled=FalseEndSubPrivateSubCommandButton2_Click()MultiPage1.
Pages(MultiPage1.
Value).
Controls.
CutCommandButton3.
Enabled=TrueCommandButton2.
Enabled=FalseEndSubPrivateSubCommandButton3_Click()DimMyPageAsObjectSetMyPage=_MultiPage1.
Pages.
Item(MultiPage1.
Value)MyPage.
PasteCommandButton3.
Enabled=FalseEndSubPrivateSubUserForm_Initialize()CommandButton1.
Caption="Add"CommandButton2.
Caption="Cut"CommandButton3.
Caption="Paste"CommandButton1.
Enabled=TrueCommandButton2.
Enabled=FalseCommandButton3.
Enabled=FalseEndSub19、选项按钮控件用于显示群组选项中每一项的选中状态.
说明用选项按钮显示群组中的某一项是否被选中.
请注意框架中的各个选项按钮是互斥的.
如果将选项按钮连接到了数据源,则选项按钮能够用来显示该数据源的值,如Yes/No、True/False或On/Off中的值.
如果选中了选项按钮,则其当前设置为Yes、True或On;如果没有选中选项按钮,则其当前设置为No、False或Off.
例如,在库存情况跟踪程序中,可用选项按钮显示某种货物是否缺货.
如果将选项按钮连接到了数据源,那么改变选项按钮的设置将同时改变数据源中的值.
禁用的选项按钮会变暗,并且不显示值.

选项按钮可以具有null值,这与TripleState属性的值有关.
也可以在群组框中使用选项按钮,以选择一组相关项目中的一个或多个.
例如,可以创建一个包含可选项目清单的订单窗体,每个项目前有一个选项按钮.
用户可以通过选中相应的选项按钮来选择某个项目.

选项按钮默认属性是Value属性.
选项按钮默认事件是Click事件.
Item方法和选项按钮控件示例下例用Item方法访问Controls和Pages集合中的单个成员.
用户选择Controls集合的选项按钮,或者选择多页控件的选项按钮,然后单击命令按钮,则在标签中返回相应的控件名称.
若要使用该示例,请将示例代码复制到某窗体的声明变量部分.
请确保该窗体包含:名为CommandButton1的命令按钮.
名为Label1的标签.
名为OptionButton1和OptionButton2的选项按钮.
名为MultiPage1和多页控件.
DimMyControlAsObjectDimControlsIndexAsIntegerPrivateSubCommandButton1_Click()IfOptionButton1.
Value=TrueThen'处理用户窗体的Controls集合SetMyControl=Controls.
Item(ControlsIndex)Label1.
Caption=MyControl.
Name'为用户窗体上的下一个控件准备索引ControlsIndex=ControlsIndex+1IfControlsIndex>=Controls.
CountThenControlsIndex=0EndIfElseIfOptionButton2.
Value=TrueThen'处理Pages集合的当前页SetMyControl=MultiPage1.
Pages_.
Item(MultiPage1.
Value)Label1.
Caption=MyControl.
NameEndIfEndSubPrivateSubUserForm_Initialize()ControlsIndex=0OptionButton1.
Caption="ControlsCollection"OptionButton2.
Caption="PagesCollection"OptionButton1.
Value=TrueCommandButton1.
Caption="GetMemberName"EndSub20、文本框控件用于显示用户输入的或是组织好的一系列数据信息.
说明文本框是最常用的用于显示用户输入信息的控件.
同时也能显示一系列数据,例如数据库表、查询、工作表或计算结果.
如果将文本框连接到了数据源,则对文本框内容所作的修改也会改变它所连接的数据源中的值.

对文本框中任何一段文字进行的格式设置都将影响该控件中的所有文字.
例如,改变该控件中任何字符的字体或磅值大小,将对该控件中的所有字符产生影响.
文本框的默认属性是Value属性.
文本框的默认事件是Change事件.
AutoSize、MultiLine、WordWrap、ScrollBars属性和文本框控件示例下例在文本框上演示MultiLine、WordWrap和ScrollBars属性.
若要使用该示例,请将该示例代码复制到某窗体的声明变量部分.
请确保该窗体包含:名为TextBox1的文本框.
名为ToggleButton1到ToggleButton4的四个切换按钮控件.
若要浏览文本框中的整个文本,请单击切换按钮控件,将MultiLine和WordWrap设置为True.
当MultiLine为True时,按Shift+Enter组合键可以输入新的文本行.
手工改变文本框的内容时,会出现滚动条.
PrivateSubUserForm_Initialize()'InitializeTextBoxpropertiesandtogglebuttonsTextBox1.
Text="Typeyourtexthere.
"&"EnterSHIFT+ENTERtomovetoanewline.
"TextBox1.
AutoSize=FalseToggleButton1.
Caption="AutoSizeOff"ToggleButton1.
Value=FalseToggleButton1.
AutoSize=TrueTextBox1.
WordWrap=FalseToggleButton2.
Caption="WordWrapOff"ToggleButton2.
Value=FalseToggleButton2.
AutoSize=TrueTextBox1.
ScrollBars=0ToggleButton3.
Caption="ScrollBarsOff"ToggleButton3.
Value=FalseToggleButton3.
AutoSize=TrueTextBox1.
MultiLine=FalseToggleButton4.
Caption="SingleLine"ToggleButton4.
Value=FalseToggleButton4.
AutoSize=TrueEndSubPrivateSubToggleButton1_Click()'SetAutoSizepropertyandassociatedToggleButtonIfToggleButton1.
Value=TrueThenTextBox1.
AutoSize=TrueToggleButton1.
Caption="AutoSizeOn"ElseTextBox1.
AutoSize=FalseToggleButton1.
Caption="AutoSizeOff"EndIfEndSubPrivateSubToggleButton2_Click()'设置WordWrap属性和相关的ToggleButtonIfToggleButton2.
Value=TrueThenTextBox1.
WordWrap=TrueToggleButton2.
Caption="WordWrapOn"ElseTextBox1.
WordWrap=FalseToggleButton2.
Caption="WordWrapOff"EndIfEndSubPrivateSubToggleButton3_Click()'设置ScrollBars属性和相关的ToggleButtonIfToggleButton3.
Value=TrueThenTextBox1.
ScrollBars=3ToggleButton3.
Caption="ScrollBarsOn"ElseTextBox1.
ScrollBars=0ToggleButton3.
Caption="ScrollBarsOff"EndIfEndSubPrivateSubToggleButton4_Click()'设置MultiLine属性和相关的ToggleButtonIfToggleButton4.
Value=TrueThenTextBox1.
MultiLine=TrueToggleButton4.
Caption="MultipleLines"ElseTextBox1.
MultiLine=FalseToggleButton4.
Caption="SingleLine"EndIfEndSubCut、Paste方法和文本框控件示例下例用Cut和Paste方法从一个文本框中剪切文本,并将其粘贴到另一个文本框中.
若要使用该示例,请将示例代码复制到某窗体的声明变量部分.
请确保该窗体包含:名为TextBox1和TextBox2的两个文本框控件.
名为CommandButton1的命令按钮.
PrivateSubUserForm_Initialize()TextBox1.
Text="FromTextBox1!
"TextBox2.
Text="Hello"CommandButton1.
Caption="CutandPaste"CommandButton1.
AutoSize=TrueEndSubPrivateSubCommandButton1_Click()TextBox2.
SelStart=0TextBox2.
SelLength=TextBox2.
TextLengthTextBox2.
CutTextBox1.
SetFocusTextBox1.
SelStart=0TextBox1.
PasteTextBox2.
SelStart=0EndSub21、切换按钮控件显示项目的选中状态.
说明用切换按钮显示某个项目是否被选中.
如果将切换按钮连接到了数据源,则切换按钮会将该数据源的值显示为Yes/No、True/False、On/Off的其中之一.
如果选中了切换按钮,则当前设置为Yes、True或On;如果未选中切换按钮,则设置为No、False或Off.
如果将切换按钮连接到了数据源,则改变切换按钮设置将同时改变数据源中的值.
禁用的切换按钮能够显示值,但会变暗,并且不能通过用户界面进行修改.
也可在框架中使用切换按钮,以在一组相关项目中选择一个或多个项目.
例如,可以创建一个包含可选项目清单的订单窗体,每个项目前有一个切换按钮.
用户可以通过选择相应的切换按钮来选择某个项目.

数脉科技香港自营,10Mbps CN2物理机420元/月

数脉科技怎么样?数脉科技品牌创办于2019,由一家从2012年开始从事idc行业的商家创办,目前主营产品是香港服务器,线路有阿里云线路和自营CN2线路,均为中国大陆直连带宽,适合建站及运行各种负载较高的项目,同时支持人民币、台币、美元等结算,提供支付宝、微信、PayPal付款方式。本次数脉科技给发来了新的7月促销活动,CN2+BGP线路的香港服务器,带宽10m起,配置E3-16G-30M-3IP,...

香港2GB内存DIYVM2核(¥50月)香港沙田CN2云服务器

DiyVM 香港沙田机房,也是采用的CN2优化线路,目前也有入手且在使用中,我个人感觉如果中文业务需要用到的话虽然日本机房也是CN2,但是线路的稳定性不如香港机房,所以我们在这篇文章中亲测看看香港机房,然后对比之前看到的日本机房。香港机房的配置信息。CPU内存 硬盘带宽IP价格购买地址2核2G50G2M1¥50/月选择方案4核4G60G3M1¥100/月选择方案4核8G70G3M4¥200/月选择...

UCloud云服务器低至年59元

最近我们是不是在讨论较多的是关于K12教育的问题,培训机构由于资本的介入确实让家长更为焦虑,对于这样的整改我们还是很支持的。实际上,在云服务器市场中,我们也看到内卷和资本的力量,各大云服务商竞争也是相当激烈,更不用说个人和小公司服务商日子确实不好过。今天有看到UCloud发布的夏季促销活动,直接提前和双十一保价挂钩。这就是说,人家直接在暑假的时候就上线双十一的活动。早年的双十一活动会提前一周到十天...

无法定位程序输入点于动态链接库为你推荐
人人时光机现在世界上有时光机吗深圳公交车路线深圳公交线路真正免费的网络电话有没有真正免费的网络电话?而且是好用的?邮箱打不开怎么办163邮箱突然打不开了怎么办吴晓波频道买粉看吴晓波频道的心得qq空间装扮QQ空间装扮godaddyGodaddy域名怎么接受mate8价格手机华为mat8售价多少linux虚拟机怎么样在Linux下安装虚拟机srv记录如何验证是否为域控制器创建了 SRV DNS 记录
域名注册信息查询 播放vps上的视频 紫田 密码泄露 万网优惠券 debian6 工信部icp备案号 200g硬盘 可外链相册 免费dns解析 支付宝扫码领红包 优酷黄金会员账号共享 google台湾 登陆空间 空间登陆首页 中国电信测速器 net空间 畅行云 购买空间 国内空间 更多