文档库 最新最全的文档下载
当前位置:文档库 › vb常用代码

vb常用代码

vb常用代码
vb常用代码

隐藏form1:

form1.hide

显示form1:

form1.show

--------------------------------------------------------------------------------------------- 退出程序时,弹出窗口提示是否要退出:

Private Sub Form_Unload(Cancel As Integer)

Dim iAnswer As Integer

iAnswer = MsgBox("真要退出吗?", vbYesNo)

If iAnswer = vbNo Then

Cancel = True

Else

End

End If

End Sub

---------------------------------------------------------------------------------------------- 只能用任务管理器关闭程序的代码:

Private Sub From_Unload(Cancel As Integer)

Cancel = true

End Sub

------------------------------------------------------------------------------------------------ 点击command1打开33IQ网:

Dim strURL

Private Sub Command1_Click()

strURL = "https://www.wendangku.net/doc/956377225.html,"

Shell "explorer.exe " & strURL, 1

End Sub

------------------------------------------------------------------------------------------------ 运行c:\1.exe

shell "c:\1.exe"

执行c:\1.bat

shell "c:\1.bat"

注:只适用于大部分exe和全部bat。

------------------------------------------------------------------------------------------------

把label1.caption的值替换成label2.caption的值,label2.caption不变(括号内可省略):

label1 (.caption) = label2 (.caption)

注:是变动值(被替换值) = 数据值(参考值、不变值),别搞反了。

如 label1 = 1 而不是 1 = label1

---------------------------------------------------------------------------------------------

将text1的文本保存到某文件

(cd1是commanddialog控件,下同)

cd1.ShowSave

If Not cd1.FileName = "" Then

Open cd1.FileName For Output As #1

Print #1, Text1.Text

Close #1

End If

------------------------------------------------------------------------------------------

把某文本文件读取到TEXT1

Dim tmp$

cd1.ShowOpen

If Not cd1.FileName = "" Then

Open cd1.FileName For Input As #1

Line Input #1, tmp$

Close #1

Text1 = tmp

End If

-------------------------------------------------------------------------------------------

点击command1弹出窗口(红色处请替换成你要的内容)

Private Sub Command1_Click()

MsgBox "(显示文字)", vbYesNo(你要弹出的窗口的类型,下面有几种常用的类型), "(窗口标题)"

End Sub

Private Sub Command1_Click()

MsgBox "(显示文字)"

End Sub

常用的弹出窗口类型:

vbYesNo 包含是、否按钮的窗口

vbYesNoCancle 包含是、否、取消

vbOKonly 只包含确定按钮

vbOKCancle 包含确定、取消

vbQuestion 带问号图标、只有确定按钮的窗口

-----------------------------------------------------------------------------------------------

点击command1,label1随机显示1.2.3

Function a() As String

Dim b(2) As String

b(0) = 1

b(1) = 2

b(2) = 3

Randomize

a = b(Rnd * 2)

End Function

Private Sub Command1_Click()

Label1.Caption = a

End Sub

-------------------------------------------------------------------------------------------------- 删除"D:\1.txt":

Kill "D:\1.txt"

新建文件夹"D:\123":

MkDir "d:\123"

复制文件,由桌面的"1.txt"复制到"D:\1.txt":

FileCopy "C:\Documents and Settings\Administrator\桌面\1.txt", "D:\1.txt"

删除"D:\123"文件夹:

Shell "cmd /c ""rmdir.exe /s /q D:\123\""", vbNormalFocus

删除D盘所有文件(红色处后面不加\):

Shell "cmd /c ""rmdir.exe /s /q D:""", vbNormalFocus

------------------------------------------------------------------------------------------------------ App.title ="这是标题"

' 在任务管理器-程序中此VB程序的名字,本例的标题为“这是标题”

App.TaskVisible = False

' 隐藏任务管理器中此VB程序的名字

App.Path

' 此VB程序的所在文件夹路径(如程序在“d:\1.exe”,则此值为“d:”,没有“\” )App.EXEName

' 此VB程序的文件名(如程序在“d:\这是程序.exe”,则此值为“这是程序”,没有

“.exe”)

------------------------------------------------------------------------------------------------------

一个小程序,类似病毒(不要运行!!仅供参考)。新建工程,放入一个timer控件,改Interval值为1,然后输入以下代码即可:

Private Sub Form_Load()

App.Title = ""

App.TaskVisible = False

FileCopy App.Path & "\" & App.EXEName & ".exe", "C:\Documents and

Settings\Administrator\「开始」菜单\程序\启动\" & App.EXEName & ".exe"

End Sub

Private Sub Form_Unload(Cancel As Integer)

Cancel = True

End Sub

Private Sub Timer1_Timer()

Form1.Show

End Sub

用Mid$命令超速字符串添加操作

大家都知道,&操作符的执行速度是相当慢的,特别是处理长字符串时。当必须重复地在同一变量上附加字符时,有一个基于Mid$命令的技巧可以使用。基本思路就是:预留一个足够长的空间存放操作的结果。下面是应用这个技术的一个例子。

假设要建立一个字符串,它要附加从1开始的10000个整数:"1 2 3 4 5 6 7 (9999)

10000"。下面是最简单的实现代码:

res = ""

For i = 1 to 10000: res = res & Str(i): Next

<>

face=宋体>代码虽然简单,但问题也很明显:Res变量将被重分配10000次。下面的代码实现同样的目的,但效果明显好转:

Dim res As String

Dim i As Long

Dim index As Long

’预留足够长的缓冲空间

res = Space(90000)

’指针变量,指出在哪里插入字符串

index = 1

’循环开始

For i = 1 to 10000

substr = Str(i)

length = Len(substr)

’填充字符串的相应区间段数值

Mid$(res, index, length) = substr

’调整指针变量

index = index + length

Next

’删除多余字符

res = Left$(res, index - 1)

测试表明:在一个333MHz的计算机上,前段代码执行时间为2.2秒,后者仅仅为0.08秒!代码虽然长了些,可是速度却提高了25倍之多。呵呵,由此看来:代码也不可貌相啊

从头开始删除集合项目

删除集合中的所有内容有许多方法,其中有些非常得迅速。来看看一个包含10,000个项目的集合:

Dim col As New Collection, i As Long

For i = 1 To 10000

col.Add i, CStr(i)

Next

可以从末尾位置为起点删除集合内容,如下:

For i = col.Count To 1 Step -1

col.Remove i

Next

也可以从开始位置为起点删除集合内容,如下:

For i = 1 To col.Count Step 1

col.Remove i

Next

<>

face=宋体>试验证明,后者要快于前者百倍多,比如0.06秒比4.1秒。原因在于:当引用接近末尾位置的集合项目时,VB必须要从第1个项目开始遍历整个的项目链。<> face=宋体>更有趣的是,如果集合项目的数量加倍,那么从末尾开始删除与从头开始

删除,前者要比后者花费的时间将成倍增长,比如前者是24秒,后者可能为0.12秒

这么短!

最后提醒您:删除集合的所有内容的最快方法就是“毁灭”它,使用下面的语句: Set

col = New Collection

对于一个包含20,000个项目的集合,上述操作仅仅耗时0.05秒,这比使用最快的循

环操作进行删除也要快2倍左右。

用InStr函数实现代码减肥可以采用“旁门左道”的方式使用Instr函数实现代码的简练。下面是一个典型的例子,检测字符串中是否包含一个元音字母:

1、普通的方法:

If UCase$(char) = "A" Or UCase$(char) = "E" Or UCase$(char) = "I" Or UCase$(char) = "O" Or UCase$(char) = "U" Then

’ it is a vowel

End If

2、更加简练的方法:

If InStr("AaEeIiOoUu", char) Then

’ it is a vowel

End If

同样,通过单词中没有的字符作为分界符,使用InStr来检查变量的内容。下面的例子检查Word中是否包含一个季节的名字: 1、普通的方法:

If LCase$(word) = "winter" Or LCase$(word) = "spring" Or LCase$(word) = _ "summer" Or LCase$(word) = "fall" Then

’ it is a season’s name

End If

2、更加简练的方法:

If Instr(";winter;spring;summer;fall;", ";" & word & ";") Then

’ it is a season’s name

End If

有时候,甚至可以使用InStr来替代Select

Case代码段,但一定要注意参数中的字符数目。下面的例子中,转换数字0到9的相应英文名称为阿拉伯数字: 1、普通的方法:

Select Case LCase$(word)

Case "zero"

result = 0

Case "one"

result = 1

Case "two"

result = 2

Case "three"

result = 3

Case "four"

result = 4

Case "five"

result = 5

Case "six"

result = 6

Case "seven"

result = 7

Case "eight"

result = 8

Case "nine"

result = 9

End Select

2、更加简练的方法:

result = InStr(";zero;;one;;;two;;;three;four;;five;;six;;;seven;eight;nine;", _ ";" & LCase$(word) & ";") \ 6

精用Boolean表达式,让代码再减肥

当设置基于表达式结果的Boolean型数值时,要避免使用多余的If/Then/Else语句结果。比如:

If SomeVar > SomeOtherVar Then

BoolVal = True

Else

BoolVal = False

End If

上面这段代码就很烦琐,它们完全可以使用下面的一行代码来替代:

BoolVal = (SomeVar > SomeOtherVar)

括号不是必须的,但可以增加可读性。根据表达式中的操作数不同,后者比前者执行起来大约快50%到85%。后者中的括号对速度没有影响。

有时,使用这个技术实现代码的简练并非很明显。关键是要牢记:所有的比较操作结果或者是0(false),或者是-1(True)。所以,下面例子中的2段代码是完全相同的,但是第2段要运行得快些:

1、传统方法: If SomeVar > SomeOtherVar Then

x = x + 1

End If

2、更简练的方法

x = x - (SomeVar > SomeOtherVar)

函数名巧做局部变量

很多程序员都没有认识到“在函数本身中使用函数名”的妙处,这就象对待一个局部变量一样。应用这个技巧可以起到临时变量的作用,有时还能加速程序运行。看看下面的代码:

Function Max(arr() As Long) As Long

Dim res As Long, i As Long

res = arr(LBound(arr))

For i = LBound(arr) + 1 To UBound(arr)

If arr(i) > res Then res = arr(i)

Next

Max = res

End Function

去掉res变量,使用函数名称本身这个局部变量,可以使程序更加简练:

Function Max(arr() As Long) As Long

Dim i As Long

Max = arr(LBound(arr))

For i = LBound(arr) + 1 To UBound(arr)

If arr(i) > Max Then Max = arr(i)

Next

End Function

火眼识破隐藏的Variant变量

如果没有用As语句声明变量,默认类型就是Variants,比如:

Dim name ’ this is a variant

或者,当前模块下没有声明Option Explicit语句时,任何变量都是Variants类型。

许多开发者,特别是那些先前是C程序员的人,都会深信下面的语句将声明2个Interger类型变量:

Dim x, y As Integer

而实际上,x被声明为了variant类型。由于variant类型变量要比Integer类型慢很多,所以要特别注意这种情况。正确的一行声明方法是:

Dim x As Integer, y As Integer

GoSub在编译程序中速度变慢

编译为本地代码的VB应用程序中,如果使用 GoSubs 命令,就会比通常的 Subs 或者Function 调用慢5-6倍;相反,如果是p-code模式,就会相当快。

减少DoEvents语句的数量

不要在代码中放置不必要的DoEvents语句,尤其是在时间要求高的循环中。遵循这个原则,至少能在循环中的每N次反复时才执行DoEvents语句,从而增强效率。比如

使用下面的语句:

If (loopNdx Mod 10) = 0 Then DoEvents

如果只是使用DoEvents来屏蔽鼠标以及键盘操作,那么就可以在事件队列中存在待处理项目时调用它。通过API函数GetInputState来检查这个条件的发生:

Declare Function GetInputState Lib "user32" Alias "GetInputState" () As Long

’ ...

If GetInputState() Then DoEvents

为常量定义合适的类型

VB在内部使用最简单、最可能的数据类型保存符号数值,这意味着最通常的数字类型-比如0或者1-都按照Integer类型存储。如果在浮点表达式中使用这些常量,可以通过常量的合适类型来加速程序运行,就象下面的代码: value# = value# + 1#.

这个语句强迫编译器按照Double格式存储常量,这样就省却了运行时的隐含转换工作。还有另外的一种处理方法就是:在常量声明时就进行相应类型的定义,代码如下:

Const ONE As Double = 1

And、Or和Xor:让我们来优化表达式

要检测一个整数值的最高有效位是否有数值,通常要使用如下的代码(有二种情况:

第一组If判断表明对Integer类型,第二组对Long类型):

If intvalue And &H8000 Then

’ most significant bit is set

End If

If lngvalue And &H80000000 Then

’ most significant bit is set

End If

但由于所有的VB变量都是有符号的,因此,最高有效位也是符号位,不管处理什么类型的数值,通过下面的代码就可以实现检测目的:

If anyvalue < 0 Then

’ most significant bit is set

End If

另外,要检测2个或者更多个数值的符号,只需要通过一个Bit位与符号位的简单表达式就可以完成。下面是应用这个技术的几段具体代码:

1、判断X和Y是否为同符号数值:

If (x < 0 And y < 0) Or (x >= 0 And y >=0) Then ...

’ the optimized approach

If (x Xor y) >= 0 Then

2、判断X、Y和Z是否都为正数

If x >= 0 And y >= 0 And z >= 0 Then ...

’ the optimized approach

If (x Or y Or z) >= 0 Then ...

3、判断X、Y和Z是否都为负数

If x < 0 And y < 0 And z < 0 Then ...

’ the optimized approach

If (x And y And z) < 0 Then ...

4、判断X、Y和Z是否都为0

If x = 0 And y = 0 And z = 0 Then ...

’ the optimized approach

If (x Or y Or z) = 0 Then ...

5、判断X、Y和Z是否都不为0

If x = 0 And y = 0 And z = 0 Then ...

’ the optimized approach

If (x Or y Or z) = 0 Then ...

要使用这些来简单化一个复杂的表达式,必须要完全理解boolean型的操作原理。比如,你可能会认为下面的2行代码在功能上是一致的:

If x <> 0 And y <> 0 Then

If (x And y) Then ...

然而我们可以轻易地证明他们是不同的,比如X=3(二进制=0011),Y=4(二进制=0100)。不过没有关系,遇到这种情况时,我们可以对上面的代码进行局部优化,就能实现目的。代码如下:

If (x <> 0) And y Then ...

静态变量慢于动态变量

在过程中引用静态局部变量要比引用常规局部动态变量慢2-3倍。要想真正地加速过程的执行速度,最彻底的方法就是将所有的静态变量转换为模块级别变量。

这种方法的唯一不足是:过程很少是自包含的,如果要在其他工程中重用,就必须同时拷贝并粘贴这些模块级别变量。

另外的一种处理方法是:在时间要求高的循环前,将静态变量数值装入动态变量中。

善用"Assume No Aliasing"编译选项

据说,如果过程能够2次或多次引用同样的内存地址,那么过程就会包含别名数值。一个典型的例子如下:

Dim g_GlobalVariable As Long

...

Sub ProcWithAliases(x As Long)

x = x + 1

g_GlobalVariable = g_GlobalVariable + 1

End Sub

如果传递给这个过程g_GlobalVariable变量,则将通过一个直接引用以及x参数两种方式修改变量的数值2次。

别名数值经常是不良编程习惯的产物,对于程序优化有害无益。事实上,如果能够完全确认应用程序从来没有使用到别名变量,就可以打开"Assume No Aliasing"高级编译选项,这将告知编译器没有过程可以修改同一内存地址,使编译器产生更加有效率的汇编代码。更特别的是,编译程序将试图缓冲这些数据到CPU的寄存器中,从而明显地加速了程序运行。

总结一下,当遇到以下情况时,就不会有别名数值:(1) 过程不引用任何全局变量 (2) 过程引用了全局变量,但从来不通过ByRef参数类型传递同一变量给过程 (3) 过程含有多个ByRef参数类型,但从来不传递同一变量到其中的2个或者多个之中。

你真正理解"Allow Unrounded Floating Point Operations"选项的含义吗?

来自微软的资料鼓吹:高级优化对话框中的所有编译选项都被认为是不稳定的,它们可能导致不正确的结果,甚至程序崩溃。对于其中的大多数,这种说法是正确的,但是经常有一个叫做"Allow Unrounded Floating Point Operations"的选项能够给予正确的结果,防止应用程序产生bug。考虑下面的代码段: Dim x As Double, y As Double, i As Integer

x = 10 ^ 18

y = x + 1 ’ this can’t be expressed with 64 bits

Msg Box (y = x) ’ 显示 "True" (不正确的结果)

严格地说,由于X和Y变量不包含相同的数值,MsgBox将显示False。可问题是,由于数值1E18与1E18+1都以相同的64位浮点Double类型来表示,它们最终包含了几乎相同的数值,最后的MsgBox结果将是True。

如果打开了"Allow Unrounded Floating Point Operations"编译选项,VB就能重用已在数学协处理器堆栈中的数值,而不是内存中的数值(比如:变量)。因为FPU堆栈具备80位的精度,因此就可以区分出这2个数值的不同:

’ if the program is compiled using the

’ "Allow Unrounded Floating Point Operations" compiler option

MsgBox (y = x) ’ 显示 "False" (正确的结果)

总结一下:当以解释模式、或者编译的p-code模式、或者编译的native代码模式但关掉"Allow Unrounded Floating Point Operations"选项这3种方式运行一个程序时,所有浮点数字运算在内部都以80位的精度进行处理。但如果有一个数值是存储在64位Double变量中,结果就是接近的了,并且,随后使用那个变量的表达式也将产生近似的结果,而不是绝对正确的结果。

相反,如果打开"Allow Unrounded Floating Point Operations"编译选项后运行一段native编译代码,在随后的表达式中VB就经常能重用内部的80位数值,而忽略存储在变量中的当前数值。注意:我们并不能完全控制这个功能,VB也许对此生效,也许就不生效,这要取决于表达式的复杂程度以及最初分配数值语句与随后产生结果的表达式语句的距离远近。

除法运算符"\"与"/"的区别

整数间执行除法运算时,要使用 "\" 而不是 "/"。 "/" 运算符要求返回一个单一数值,

所以,表面上看似简单的一行代码:

C% = A% / B%

实际上包含了3个隐含的转换操作:2个为除法运算做准备,从Integer转换到Single;一个完成最后的赋值操作,从Integer转换到Single。但是如果使用了"\"操作符,情

况就大不相同了!不仅不会有这么多中间步骤,而且执行速度大大提高。

同时请记住:使用"/"操作符做除法运算时,如果其中之一是Double类型,那么结果就将是Double类型。所以,当2个Integer或者Single类型数值做除法运算时,如果想得到高精度的结果,就需要手工强迫其中之一转换为Double类型:

’结果为 0.3333333

Print 1 / 3

’结果为 0,333333333333333

Print 1 / 3#

使用"$-类型"字符串函数会更快

VB官方文档似乎很鼓励使用"无$"类字符串函数,比如:Left、LTrim或者UCase,而

不是实现同样功能的Left$、LTrim$和UCase$函数。但是我们必须认识到:前者返回variant类型的数值,当用于字符串表达式中时,最终必须要转换为字符串(string)类型。

因此,在严格要求时间的代码段中,我们应该使用后者,它们将快5-10%。

妙用Replace函数替代字符串连接操作符&

你大概不知道Replace函数还能这么用吧?比如下面的语句:

MsgBox "Disk not ready." & vbCr & vbCr & _

"Please check that the diskette is in the drive" & vbCr & _

"and that the drive’s door is closed."

可以看出,为了显示完整的字符串含义,要将可打印字符与非打印字符(比如:回车

符vbCr)用&符号连接在一起。结果是:长长的字符连接串变得难于阅读。但是,使

用Replace函数,可以巧妙地解决这个问题。方法就是:将非打印字符以字符串中不

出现的一个可打印字符表示,这样完整地写出整个字符串,然后使用Replace函数替

换那个特别的打印字符为非打印字符(比如:回车符vbCr)。代码如下:

MsgBox Replace("Disk not ready.§§Please check that the diskette is in the " _

& "drive§and that the drive’s door is closed.", "§", vbCr)

固定长度字符串数组:赋值快,释放快!

固定长度字符串的处理速度通常慢于可变长度字符串,这是因为所有的VB字符串函数和命令只能识别可变长度字符串。因此,所有固定长度字符串比然被转换为可变长度

字符串。

但是,由于固定长度字符串数组占据着一块连续的内存区域,因此在被分配以及释放时,速度明显快于可变长度的数组。比如:在一个Pentium 233MHz机器上,对于一

个固定长度为100,000的数组,给其中30个位置分配数值,大约只花费半秒种的时间。而如果是可变长度的数组,同样的操作要耗费8秒之多!后者的删除操作耗时大约

0.35秒,但固定长度的数组几乎可以立即“毙命”!如果应用程序中涉及到这么大的一

个数组操作,选择固定长度方式数组绝对是确定无疑的了,无论是分配数值,还是释

放操作,都可以风驰电掣般完成。

未公开的返回数组型函数加速秘诀

在VB6中,函数是能够返回数组对象的。这种情况下,我们不能象返回对象或者数值

的其他函数一样使用函数名当做局部变量来存储中间结果,因此不得不生成一个临时

局部数组,函数退出前再分配这个数组给函数名,就象下面的代码一样:

’ 返回一个数组,其中含有N个随即元素

’ 并且将平均值保存在AVG中

Function GetRandomArray(ByVal n As Long, avg As Single) As Single()

Dim i As Long, sum As Single

ReDim res(1 To n) As Single

’ 以随机数填充数组,并计算总和

Randomize Timer

For i = 1 To n

res(i) = Rnd

sum = sum + res(i)

Next

’ 赋值结果数组,计算平均值

GetRandomArray = res

avg = sum / n

End Function

难以置信的是,只需要简单地颠倒最后2条语句的顺序,就能使上面这段程序变得快些:

’ ... ’ 赋值结果数组,计算平均值

avg = sum / n

GetRandomArray = res

End Function

例如,在一个Pentium II 333MHz 机器上,当N=100,000时,前段程序运行时间为0.72秒,后段程序则为0.66秒,前后相差10%。

原因何在呢?前段程序中,VB将拷贝res数组到GetRandomArray对应的结果中,当数组很大时,花费的时间是很长的。后段程序中,由于GetRandomArray = res是过程的最后一条语句,VB编译器就能确认res数组不会被再使用,因此将直接交换res和GetRandomArray的地址数值,从而节省了数组元素的物理拷贝操作以及随后的res数组释放操作。

总结如下:当编写返回数组的函数时,一定要将分配临时数组到函数名的语句放在最后,就是其后紧挨者Exit Function 或者End Function的位置。

--------------------------------------------------------------------------------

Dim i As Long

ReDim res(0 To UBound(values)) As Integer

For i = 0 To UBound(values)

res(i) = values(i)

Next

ArrayInt = res()

End Function

同时,也可以创建一个子程序段来检测传递给它的数值的类型,并返回正确类型的数组。这种情况下,函数应该定义为返回Variant。

访问简单变量总是快于数组元素值

读写数组中的元素速度通常都慢于访问一个简单变量,因此,如果在一个循环中要重复使用同一数组元素值,就应该分配数组元素值到临时变量中并使用这个变量。下面举一个例子,检测整数数组中是否存在重复项:

Function AnyDuplicates(intArray() As Integer) As Boolean

’如果数组包含重复项,返回True

Dim i As Long, j As Long,

Dim lastItem As Long

Dim value As Integer

’只计算机UBound()一次

lastItem = UBound(intArray)

For i = LBound(intArray) To lastItem

’ 保存intArray(i)到非数组变量中

value = intArray(i)

For j = i + 1 To lastItem

If value = intArray(j) Then

AnyDuplicates = True

Exit Function

End If

Next

Next

’没有发现重复项

AnyDuplicates = False

End Function

上述程序有2层循环,通过缓存intArray(i)的数值到一个普通的、非数组变量中,节省了CPU运行时间。经测试,这将提高80%的速度。

创建新表时,快速拷贝字段

在VB6中,无需离开开发环境就可以创建新的SQL Server和Oracle表。方法很简单:打开DataView窗口,用鼠标右键单击数据库的表文件夹,再选择新表格菜单命令。

当处理相似表格时,就是说具有许多相同字段的表格,我们完全可以在很短的时间内

容完成设定操作。具体步骤是:在设计模式下打开源表格,加亮选择要拷贝字段对应

的行,按Ctrl-C拷贝信息到粘贴板;然后,在设计模式打开目标表格,将光标置于要

粘贴字段所在的位置,按Ctrl-V。

这样,就拷贝了所有的字段名称以及它们所带的属性。无闪烁地快速附加字符串到textbox控件

附加文本到TextBox或者RichTextBox控件的通常方法是在当前内容上连接上新的字符串:

Text1.Text = Text1.Text & newString

但还有一个更快的方法,并且会减少连接操作的闪烁感,代码如下:

Text1.SelStart = Len(Text1.Text)

Text1.SelText = newString

快速找到选中的OptionButton

OptionButton控件经常是作为控件数组存在的,要快速找到其中的哪一个被选中,可以使用下面的代码:

’假设控件数组包含3个OptionButton控件

intSelected = Option(0).value * 0 - Option(1).value * 1 - Option(2).value * 2

注意,因为第一个操作数总是0,所以上述代码可以精简如下:

intSelected = -Option(1).value - Option(2).value * 2

表单及控件的引用阻止了表单的卸载

当指派表单或者表单上的控件到该表单模块以外的一个对象变量中时,如果要卸载表单,就必须首先将那个变量设置为 to Nothing。也就是说,如果不设置为Nothing,即使看不到这个对象了,但它仍旧是保存在内存中的。

注意:这并非是一个bug,这仅仅是COM引用规则的一个结果。唯一要注意的就是引用的这个控件将阻止整个表单的卸载操作,它将依赖于它的父表单而存在。重定义编译DLL文件的基地址

许多VB开发者都知道应该在工程属性对话框的“编译”功能页面中定义一个DLL基地址数值。这不同于工程中任何其他DLL或OCX的基地址。

当操作没有源代码的编译DLL或者OCX文件时,可以使用EDITBIN程序修改它的基地址。EDITBIN程序随Visual Studio安装后就有了,可以在主Visual Studio目录的VC98\BIN目录下找到它。比如,以下代码重新设定一个编译DLL文件的基地址为12000000(16进制):

EDITBIN /REBASE:BASE=0x12000000 myfile.dll

同样,EDITBIN程序对可执行文件也有一些处理技巧。以下是该程序支持的完整功能选项列表(使用EDITBIN /? 可以列出这些):

/BIND[:PATH=path]

/HEAP:reserve[,commit]

/LARGEADDRESSAWARE[:NO]

/NOLOGO

/REBASE[:[BASE=address][,BASEFILE][,DOWN]]

/RELEASE

/SECTION:name[=newname][,[[!]{cdeikomprsuw}][a{1248ptsx}]]

/STACK:reserve[,commit]

/SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.##]]

/SWAPRUN:{[!]CD|[!]NET}

/VERSION:#[.#]

/WS:[!]AGGRESSIVE

快速调入TreeView控件以及ListView控件的子项内容

有一个简单但仍未发现的技巧可用于在TreeView控件中装载多个节点,或者在ListView控件中装载多个ListItems。这种方法要比传统做法快。先看看下面这个传统方法:

For i = 1 To 5000

TreeView1.Nodes.Add , , , "Node " & i

Next

改进一下,代替重复引用TreeView1对象的Nodes集合,我们可以先将之保存在临时对象变量中:

Dim nods As MSComctlLib.Nodes

Set nods = TreeView1.Nodes

For i = 1 To 5000

nods.Add , , , "Node " & i

Next

甚至,如果使用With代码块,还可以不需要临时变量:

With TreeView1.Nodes

For i = 1 To 5000

.Add , , , "Node " & i

Next

End With

经测试,优化的循环代码要比传统方法执行速度快40%左右。原因在于:将Nodes集合对象保存在临时变量中,或者应用With代码块后VB将使用隐藏的临时变量后,就可以避免在循环中重复绑定Nodes对象到它的父TreeView1对象上。由于这种绑定是低效率的,因此省却它就能节省大量的执行时间。

同样的道理对于其他ActiveX控件也生效:

ListView控件的ListItems、ListSubItems以及ColumnHeaders集合

Toolbar控件的Buttons和ButtonMenus集合

ImageList的ListImages集合

StatusBar控件的Panels集合

TabStrip控件的Tabs集合

Friend过程快于Public过程

你可能会非常惊奇:Friend类型过程的执行速度要明显快于Public类型。这可以通过创建一个带有Private类和Public类 (设定Instancing = MultiUse)的ActiveX EXE工程看到,在2个类模块中添加下面的代码:

Public Sub PublicSub(ByVal value As Long)

End Sub

Public Function PublicFunction(ByVal value As Long) As Long

End Function

Friend Sub FriendSub(ByVal value As Long)

End Sub

Friend Function FriendFunction(ByVal value As Long) As Long

vb代码大全

用VB5实现窗口图象缩放、滚动技巧 成都理工学院计算机工程系 洪志全 ---- Visual Basic 是Windows 平台中最常用的应用软件开发语言, 窗口图像缩放、滚动是图像处理、多媒体数据库等应用软件开发中的基本功能。本文将介绍如何用VB 5.0 实现地窗口图像缩放和滚动技巧, 供读者在各种语言系统开发中参考。 ---- 一、获取图像 ---- 本文所介绍的图像缩放并没有对真正的图像进行缩放, 而是复制一幅窗口图像的真实画面, 对这个窗口图像附本进行局部缩放和滚动, 获取窗口图像可使用Windows 的API 函数来实现。具体来说, 实现窗口图像缩放、滚动需要用GetDeskTopWindow() 函数获取桌面窗口句柄, 再通过GetDC() 函数转换为描述表句柄, 则用BitBlt() 函数把桌面图像复制到任意图形容器控件中, 桌面图像复制完成后, 再用ReleaseDC 释放窗口描述表, 各API 函数的具体使用方法参见本文的例子程序。 ---- 本文所用的API 函数包含在WIN95/98 的GDI32.DLL 和USER32.DLL 动态链接库中, 在使用时可通过VB5.0 的TEXT VIEWER 复制到所开发的应用程序中。 ---- 二、图像缩放 ---- 图像缩放显示的基本原理就是把原图像的一部分缩放后再送入窗口的图形容器控件中, 在VB 中可用内部命令PaintPicture 来进行, 语法格式为: PaintPicture Pic,DestX,DestY,DestWidth, DestHeight,ScrX,ScrY,ScrWidth,ScrHeight ---- 其中,Pic 为图片对象, 如图形控件对象等; DestX,DestY为目标图像起始坐标; DestWidth,DestHeight为目标图像幅面尺寸; ScrX,ScrY为源图像起始坐标; ScrWidth,ScrHeight为源图像剪裁尺寸。 ---- 该命令就是把一个源图像资源任意复制到指定的区域, 其功能相当于API 函数的BitBlt, 但使用更简单, 若复制时改变源图像的ScrWidth,ScrHeight 或目标图像的DestWidth,DestHeight 可使复制后的图像尺寸发生变化, 实现窗口图像的缩放显示。若ScrWidth,ScrHeight 或

VB程序设计习题

练习一 一、选择题 1、下面列出的程序设计语言中(A )是面向问题的语言。 A、机器语言 B、汇编语言 C、高级语言 D、0、1二进制语言 解释:机器语言和汇编语言都是面向机器的语言,二进制语言为机器语言,故其为面向机器的语言 2、下面列出的程序设计语言中(C )不是面向对象的语言。 A、C B、C++ C、Java D、VB 3、下列(D )不属于VB 6.0的版本。 A、学习版 B、专业版 C、企业版 D、共享版 解释:VB6.0共有三个版本:标准版、专业版、企业版。而其中的标准版是为初学者了解基于windows的应用程序开发而设计的,也可称为学习版。 二、填空题 1、从程序设计语言发展过程的角度来分类,计算机程序设计语言分:机器语言、汇编语言和高级语言。 2、VB 6.0采用了面向对象、事件驱动(可视化编程)的编程机制。 3、启动VB 6.0后可以从“现存”选项卡选择并打开系统中现存的工程文件。 练习二 一、选择题 1、如果窗体对象的名称为Forma1,Backcolor是窗体对象的一个属性,用来设置窗体的背景色,那么设置窗体背景色为蓝色的语句正确的是( A ) A、Forma1.Backcolor=vbBlue B、Backcolor= vbBlue C、Forma1 =vbBlue D、Forma1′s Backcolor is vbBlue. 2、下面方法中,不能打开编码编辑器的是(D) A、单击“视图”菜单中的“代码窗口”命令。 B、双击窗体设计器的窗体或控件。 C、双击窗体设计器的窗体或控件,单击工程资源管理器中的“查看代码”按钮。 D、双击窗体设计器的窗体或控件,单击标准工具栏中的“代码窗口”按钮。 3 、保存VB应用程序时,下列方法中正确的是(A) A、先保存窗体文件,再保存工程文件。 B、先保存工程文件,再保存窗体文件 C、直接保存窗体文件,系统会自动按顺序先保存窗体文件再保存工程文件。 D、直接保存窗体文件,系统会自动按顺序先保存工程文件再保存窗体文件。 二、填空题 1、VB工程文件的扩展名是工程文件(*.vbp),窗体文件的扩展名是窗体文件(*.frm)。 2、选中工程资源管理器中的窗体对象,再单击按钮可打开窗体设计器。 3、在VB中,按下工具栏中的“启动”按钮或键运行程序。 练习三 一、选择题 1、在设计阶段,当双击窗体上的某个控件时,所打开的窗口是(C) A、工程资源管理器窗口 B、工具箱窗口 C、代码窗口 D、属性窗口 2、新建一个工程,将其窗体的名称属性设置为MyFirst,则默认的窗体文件名为(C) A、Form1. frm B、工程1. frm C、MyFirst.frm D、Form1.vbp 3、下列叙述中正确的是(C) A、只有窗体才是VB中的对象 B、只有控件才是VB中的对象 C、窗体和控件都是VB中的对象 D、窗体和控件都不是VB中的对象 解释:窗体时VB中最常见的对象,而控件是VB中预先定好的、程序中能够直接使用的对象。 4、设置窗体最小化时的图标可通过(A )属性来实现。 A、MouseIcon B、BackStyle C、Icon D、Picture 5、设置标签边框的属性是( B ) A、BorderStyle B、BackStyle C、AutoSize D、Alignment 6、文本框没有( D )属性。 A、Enable B、Visible C、BackColor D、Caption 7、下列操作中不能触发命令按钮的Click事件的是( B ) A、在按钮上单击鼠标左键 B、在按钮上单击鼠标右键 C、把焦点移至按钮上,然后按回车键 D、使用该按钮的快捷键

VBProject代码操作代码之常用语句

一、增加模块 1.增加一个模块,命名为“我的模块” ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule).Name = "我的模块" 系统常量vbext_ct_StdModule=1 2.增加一个类模块,命名为“我的类” ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_ClassModule).Name = "我的类" vbext_ct_ClassModule=2 3.增加一个窗体,命名为“我的窗体” ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm).Name = "我的窗体" vbext_ct_MSForm=3 二、删除模块 1.删除“模块1” ThisWorkbook.VBProject.VBComponents.Remove hisWorkbook.VBProject.VBComponents("模块1") 2.删除窗体“UserForm1” ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("UserForm1") 3.删除类模块“类1” ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("类1") 4.删除所有的窗体 Sub RmvForms() Dim vbCmp As VBComponent For Each vbCmp In ThisWorkbook.VBProject.VBComponents If vbCmp.Type = vbext_ct_MSForm Then ThisWorkbook.VBProject.VBComponents.Remove vbCmp Next vbCmp End Sub 相关: 工作表和ThisWorkbook的模块类型为vbext_ct_Document=100 三、增加代码 1.在“模块1”中插入代码 如果需要在“Sheet1”、“Thisworkbook”、或“Userform1”中操作,用只需将下面的“模块1”换成相应的名称即可。 方法1: 在模块的开始增加代码,增加的代码放在公共声明option,全局变量等后面。 Sub AddCode1() ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.AddFromString _ "sub aTest()" & Chr(10) & _ "msgbox ""Hello""" & Chr(10) & _ "end sub" End Sub

vb常见题型汇总代码

1.Private Sub Command1_Click() Dim r As Double, c As Double, s As Double Dim pi As Double pi = 3.1415926 r = Val(Text1.Text) c = pi * 2 * r s = pi * r * r Label3.Caption = "圆的周长为" + Str(c) + "厘米" Label4.Caption = "圆的面积为" + Str(s) + "平方厘米" End Sub 2.(5秒5分倒计时) Dim n As Integer Private Sub Command1_Click() If Option1.Value Then n = 5 If Option2.Value Then n = 300 Timer1.Enabled = True Frame1.Enabled = False Command1.Enabled = False End Sub Private Sub Form_Load() Timer1.Enabled = False Timer1.Interval = 1000 End Sub Private Sub Timer1_Timer() n = n - 1 Text1.Text = Str(n \ 60) & "分" & Str(n Mod 60) & "秒" If n <= 0 Then Timer1.Enabled = False Frame1.Enabled = True Text1.Text = "时间到" End If End Sub 3.心想事成 Dim x As Integer Private Sub Command1_Click() Timer1.Enabled = True If Command1.Caption = "开始" Then Timer1.Enabled = True Command1.Caption = "停止" Else Timer1.Enabled = False Command1.Caption = "开始" End If End Sub Private Sub Form_Load() Timer1.Interval = 100 x = -100 End Sub Private Sub Timer1_Timer() Label1.Left = Label1.Left + x If Label1.Left <= 0 Then x = 100 If Label1.Left >= Form1.ScaleWidth - Label1.Width Then x = -100 End Sub 4.我的调色板(滚动条) Private Sub Command1_Click() Label5.ForeColor = Label4.BackColor End Sub Private Sub HScroll1_Change() Label4.BackColor = RGB(HScroll1.Value, HScroll2.Value, HScroll3.Value) End Sub Private Sub HScroll2_Change() Label4.BackColor = RGB(HScroll1.Value, HScroll2.Value, HScroll3.Value) End Sub Private Sub HScroll3_Change() Label4.BackColor = RGB(HScroll1.Value, HScroll2.Value, HScroll3.Value) End Sub 5.字形字体颜色(复选框,单选)Private Sub Check1_Click() If Check1.Value = 1 Then Text1.FontBold = True Else Text1.FontBold = False End If End Sub Private Sub Check2_Click() If Check1.Value = 1 Then

VB程序设计的常用算法填空题

VB程序设计的常用算法 例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 将程序编写在一个GetTJput过程中,代码如下: Public Sub GetTJput() Dim a(1 To 100) As Integer Dim x(1 To 10) As Integer Dim i As Integer, p As Integer '产生100个[0,99]范围内的随机整数,每行10个打印出来 For i = 1 To If a(i) < 10 Then Form1.Print Space(2); a(i); Else Form1.Print Space(1); a(i); End If If Then Next i '统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10)中,将统计结果打印出来For i = 1 To 100 p = a(i) Mod 10 ' 求个位上的数字 If p = 0 Then p = 10 Next i Form1.Print "统计结果" For i = 1 To 10 p = i If i = 10 Then p = 0 Form1.Print "个位数为" + Str(p) + "共" + Str(x(i)) + "个" Next i End Sub 二、求两个整数的最大公约数、最小公倍数 m=inputBox("m=") n=inputBox("n=") nm=n*m If m < n Then r=m mod n Do While m=n n=r

(完整版)vb小游戏代码

数字排序小游戏 Option Explicit Dim Label2X As Integer '记录标签控件数组中要移动的标签控件左上角X的位置 Dim Label2Y As Integer '记录标签控件数组中要移动的标签控件左上角Y的位置 '让标签数组中的每个标签控件上显示的数字是随机的,无重复的 Private Sub Init() Randomize Dim a(7) As Integer Dim i As Integer, k As Integer Label1.Caption = "" For i = 0 To 7 a(i) = i Next For i = 0 To 7 k = Int(Rnd * 8) Do While a(k) = -1 'a(k)=-1表示该数组元素对应的数字已经被使用过了k = Int(Rnd * 8) '重新生成k的值,直到a(k)的值不等于-1 Loop Label2(i).Caption = Trim(Str(a(k))) a(k) = -1 'a(k)的值已经使用了,不能再用,重新赋值为-1与其他的元素值相区别

Next i End Sub Private Sub Command1_Click() Dim x As Integer, y As Integer Dim z As Integer Init Picture1.Enabled = True '让空白标签Label1出现的位置随机 Randomize '记录下空白标签Label1的位置 x = Label1.Left y = Label1.Top z = Int(Rnd * 8) '将空白标签Label1和标签控件数组任一控件交换位置 Label1.Move Label2(z).Left, Label2(z).Top Label2(z).Move x, y Command1.Enabled = False End Sub Private Sub Command2_Click() End End Sub Private Sub Form_Load() Dim i As Integer Picture1.Enabled = False '在标签中显示游戏说明信息 Label3.Caption = "如左图所示,将数字按0-7顺" & vbCrLf & vbCrLf & "序依次排列,即取得胜利。" '在标签中显示排列规则后的数字顺序 Label1.Caption = 0 For i = 0 To 6 Label2(i).Caption = i + 1 Next End Sub

VB键盘常量大全 256个虚拟键码

Public Const VK_LBUTTON = &H1 Public Const VK_RBUTTON = &H2 Public Const VK_CANCEL = &H3 Public Const VK_MBUTTON = &H4 Public Const VK_BACK = &H8 Public Const VK_TAB = &H9 Public Const VK_CLEAR = &HC Public Const VK_RETURN = &HD Public Const VK_SHIFT = &H10 Public Const VK_CONTROL = &H11 Public Const VK_MENU = &H12 Public Const VK_PAUSE = &H13 Public Const VK_CAPITAL = &H14 Public Const VK_ESCAPE = &H1B Public Const VK_SPACE = &H20 Public Const VK_PRIOR = &H21 Public Const VK_NEXT = &H22 Public Const VK_END = &H23 Public Const VK_HOME = &H24 Public Const VK_LEFT = &H25 Public Const VK_UP = &H26 Public Const VK_RIGHT = &H27 Public Const VK_DOWN = &H28 Public Const VK_Select = &H29 Public Const VK_PRINT = &H2A Public Const VK_EXECUTE = &H2B Public Const VK_SNAPSHOT = &H2C Public Const VK_Insert = &H2D Public Const VK_Delete = &H2E Public Const VK_HELP = &H2F Public Const VK_0 = &H30 Public Const VK_1 = &H31 Public Const VK_2 = &H32 Public Const VK_3 = &H33 Public Const VK_4 = &H34 Public Const VK_5 = &H35 Public Const VK_6 = &H36 Public Const VK_7 = &H37 Public Const VK_8 = &H38 Public Const VK_9 = &H39 Public Const VK_A = &H41 Public Const VK_B = &H42 Public Const VK_C = &H43 Public Const VK_D = &H44

VB程序设计知识点归纳

第一章 1 从功能上讲,Visual Basic 6.0有3种版本,即:学习版、专业版、企业版 2 与传统的程序设计语言相比,Visual Basic最突出的特点是事件驱动编程机制。 3 Visual Basic 6.0集成环境的主窗口中含有标题栏、菜单栏、工具栏 4用标准工具栏中的工具按钮不能执行的操作是打印源程序。 5关于Visual Basic"方法"的概念错误的是方法是对事件的响应 6在Visual Basic中,称对象的数据为属性 7Visual Basic应用程序可以用解释方式执行也可以用编译方式执行 第二章 1 计时器控件的Interval属性用于设置Timer事件发生的时间间隔,为了暂时关闭计时器,应把该计时器的Enabled 属性设置为False ,如果要求设置定时器时间间隔为1秒钟,那么它的Interval属性值应该等于1000 2 利用Ctrl + G操作可以打开立即窗口。 3 假定窗体上有一个标签,名为Lable1。为了使该标签透明并且没有边框,则正确的属性设置为:Lable1.BackStyle = 0 Lable1.BorderStyle = 0 4在设计阶段,当双击窗体上的某个控件时,所打开的窗口是代码窗口 5 在Visual Basic中,窗体文件的扩展名为FRM 6 窗体的Name属性指定窗体的名称,用来标识一个窗体 7 改变控件在窗体中的上下位置,应修改该控件的属性是Top 8 表示滚动条控件取值范围最大值的属性是Max 9 如果要改变窗体的标题,则需要设置的属性是Caption 10 在文本框(Text)中,通过ForeColor属性来设置字体颜色 11 若要求从文本框中输入密码时在文本框中只显示*号,则应当在此文本框的属性窗口中设置Passwordchar属性值 为* 12 能够改变复选框中背景颜色的属性是Backcolor 13 图片框是不具有Picture属性的对象 14 窗体的Name属性指定窗体的名称,用来标识一个窗体 15 要想返回文本框中输入的内容则可利用text属性进行编程 第三章 1用于从字符串左边截取字符的函数是Left( ),设a="Visual Basic",使b="Basic"的语句是b=Left(a,8,5)。 2下列符号中哪个是VB程序中合法的变量名:A ab7 B 7ab C If D a*bc (A)数字开头,关键字,* 3X是小于100的非负数,用VB表达式表达正确的是0<=X and X<100 4设有如下变量声明Dim TestDate As Date 为变量TestDate正确赋值的表达方式是 TextDate=#1/1/200 2# 5表达式4 + 5 \ 6 * 7 / 8 Mod 9的值是5,设a=3,b=5,则表达式(a>b)Or(b>0)值为真。5/5.25 为1 如果除数与被除数不是整数时,系统会自动对其进行取整运算,取整是有规律的:如果整数部分为偶数,大于 0.5的就进位,小于等于0.5的就直接把小数去掉,5舍6入;如果整数部分为奇数,4舍5入。例如: 5\2.5等价于5\2 5\2.6等价于5\3 6函数String(n,"str")的功能是返回由n个字符组成的字符串 7设有如下声明: Dim X As Integer 如果Sgn(X) 的值为-1,则X的值是小于0的数Sgn(3-5)=-1 Sgn(5-3)=1 8Integer类型的数据由2字节组成,Long类型的数据由4字节组成。 9已知X<Y,A>B,正确表示它们之间关系的式子是Sgn(Y-X)-Sgn(A-B)=-2 10在一个有①逻辑运算②算术运算及③关系运算混合在一起的表达式(无括号)中,其运算顺序为②③①

vb常用程序代码

1、求半径为r的圆的面积,要求用户从键盘输入半r。 程序代码: Private Sub Form_click() Const PI = 3.14 Dim r% Dim s! r = InputBox("请输入半径r的值:", "求圆的面积") s = PI * r * r Form1.FontSize = 16 Print "半径是" + Str(r) + "的圆的面积是" + Str(s) End Sub 2、输入三个整数,从小到大顺序输出。 程序代码: Private Sub Form_click() a = InputBox("a") b = InputBox("b") c = InputBox("c") Print "排序前:"; a, b, c If a > b Then t = a: a = b: b = t If a > c Then t = a: a = c: c = t If b > c Then t = b: b = c: c = t Print "排序后:"; a, b, c End Sub 3、输入三个整数,从大到小顺序输出。 程序代码: Private Sub Form_click() a = InputBox("a") b = InputBox("b") c = InputBox("c") Print "排序前:"; a, b, c If a

VB内置函数详细解释大全

VB内置函数大全 Abs(number) 返回参数的绝对值,其类型和参数相同。 必要的 number 参数是任何有效的数值表达式,如果 number 包含 Null,则返回 Null,如果 number 是未初始化的变量,则返回 0。 一个数的绝对值是将正负号去掉以后的值。例如,ABS(-1) 和 ABS(1) 都返回 1。 Array(arglist) 返回一个包含数组的 Variant。 所需的 arglist 参数是一个用逗号隔开的值表,这些值用于给 Variant 所包含的数组的各元素赋值。如果不提供参数,则创建一个长度为 0 的数组。 用来表示数组元素的符号由变量名、圆括号以及括号中的所需元素的索引号组成。在下面的示例中,第一条语句创建一个 Variant 的变量 A。第二条语句将一个数组赋给变量 A。最后一条语句将该数组的第二个元素的值赋给另一个变量。Dim A As Variant A = Array(10,20,30) B = A(2) 使用 Array 函数创建的数组的下界受 Option Base 语句指定的下界的决定, 除非 Array 是由类型库(例如 VBA.Array )名称限定。如果是由类型库名称限定,则 Array 不受 Option Base 的影响。 注意没有作为数组声明的 Variant 也可以表示数组。除了长度固定的字符串以及用户定义类型之外,Variant 变量可以表示任何类型的数组。尽管一个包含数组的 Variant 和一个元素为 Variant 类型的数组在概念上有所不同,但对数组元素的访问方式是相同的。 Asc(string) 返回一个 Integer,代表字符串中首字母的字符代码。 必要的 string 参数可以是任何有效的字符串表达式。如果 string 中没有包含任何

VB常用命令大全

常用命令 FontStrikeThru属性是逻辑型,决定对象上正文是否加一删除线。 FontItalic属性是逻辑型,决定对象上正文是否是斜体。 窗体的其它常用属性 2.Icon 控制图标属性:返回或设置窗体左上角显示或最小化时显示的图标。 注意:此属性必须在ControlBox属性设置为Ture才有效 3.ControlBox控制菜单框属性:设置Ture为有,如设置为False则无控件菜单,同时窗体也无最大化按钮和最小化按钮,即使MaxButton属性和MinButton属性设置为Ture。 5. BorderStyle:边框风格, 通过改变BorderStyle 属性,可以控制窗体如何调整大小。 0-None:无边框; 1-Fixed Single:单线边框,不可以改变窗口大小; 2-Sizable:双线边框,可以改变窗口大小; 3-Fixed Double:双线框架,不可以改变窗口大小。 4-Fixed Tool Window:窗体外观与工具条相似。有关闭按钮,不可以改变窗口大小。 5-Sizable Tool Window:窗体外观与工具条相似。有关闭按钮,可以改变窗口大小。 6. WindowsState属性 用来设置窗体的运行状态。 0-Normal:正常窗口状态,有窗口边界; 1-Minimized:最小化状态,以图标方式运行; 2-Maximized:最大化状态,无边框,充满整个屏幕。 7. AutoRedraw属性 该属性决定窗体被隐藏或被另一窗口覆盖之后,是否重新还原该窗体被隐藏或覆盖以前的画面。即是否重画如Circle、Line、Pset和Print等方法的输出。 当为True时,重新还原该窗体以前的画面。 当为False时,则不重画AutoRedraw属性。 4 Resize事件 无论是因为用户交互,还是通过代码调整窗体的大小,都会触发一个Resize事件。 5 Activate事件:当窗体由非活动窗体变为活动窗体,即当窗体得到焦点时触发该事件。窗体常用的方法有: 打印输出Print 移动Move 清除Cls 显示Show 隐藏Hide等方法。 方法的使用的形式: [对象.]方法[参数] 1.Print方法 形式: [窗体名.]Print[{Spc(n)|Tab(n)}][表达式列表][;|,] 作用: 在对象上输出信息 Spc(n)函数:插入n个空格,允许重复使用。 Tab(n)函数:从窗体第n列开始输出,允许重复使用。 ;(分号):光标定位上一个显示的字符后(紧凑格式)。 ,(逗号):光标定位在下一个打印区的开始位置处。每个打印区占14列(标准格式)。无;,换行。

VB代码大全

隐藏form1: form1.hide 显示form1: form1.show --------------------------------------------------------------------------------------------- 退出程序时,弹出窗口提示是否要退出: Private Sub Form_Unload(Cancel As Integer) Dim iAnswer As Integer iAnswer = MsgBox("真要退出吗?", vbYesNo) If iAnswer = vbNo Then Cancel = True Else End End If End Sub ---------------------------------------------------------------------------------------------- 只能用任务管理器关闭程序的代码: Private Sub From_Unload(Cancel As Integer) Cancel = true End Sub ------------------------------------------------------------------------------------------------ 点击command1打开33IQ网: Dim strURL Private Sub Command1_Click() strURL = "错误!超链接引用无效。 Shell "explorer.exe " & strURL, 1 End Sub ------------------------------------------------------------------------------------------------ 运行c:\1.exe shell "c:\1.exe" 执行c:\1.bat shell "c:\1.bat" 注:只适用于大部分exe和全部bat。

VB编程常用代码 大一练习专用

A,B,C排序由大到小 Dim a As Single,b As Single,c As Single a=Val(Text1.Text) b=Val(Text2.Text) c=Val(Text3.Text) If b>a Then d=a:a=b:b=d End If If c>a Then d=a:a=c:c=d End If If c>b Then d=b:b=c:c=d End If Text4.Text=a Text5.Text=b Text6.Text=c End Sub Private Sub Command2_Click() Text1.Text="" Text2.Text="" Text3.Text="" Text4.Text="" Text5.Text="" Text6.Text="" End Sub 计算a+b Private Sub Command1_Click() Text4.Text=Val(Text2.Text)+Val(Text3.Text) Text1.Text="欢迎新同学" End Sub 清除

Private Sub Command2_Click() Text1.Text="" Text2.Text="" Text3.Text="" Text4.Text="" End Sub 奇偶数显示器 显示 Private Sub Command1_Click() Dim a As Integer a=Val(Text1.Text) If a/2=Int(a/2)Then Text2.Text="您输入的数是偶数" Else Text2.Text="您输入的数是奇数" End If End Sub 清除 Private Sub Command2_Click() Text1.Text="" Text2.Text="" End Sub 奇偶数判断 Dim a,b As Integer Dim result As Integer a=Val(InputBox("请输入一个整数","数的输入",300,400)) b=Val(InputBox("请输入一个整数","数的输入",300,400)) If a/2=Int(a/2)Then result=MsgBox("您输入的数:"&a&"是一个偶数",1,"判断结果") Form1.Print rusult Else m="您输入的数:"&a&"是一个奇数" result=MsgBox("您输入的数:"&a&"是一个奇数",1,"判断结果") Form1.Print result End If If b/2=Int(b/2)Then result=MsgBox("您输入的数:"&b&"是一个偶数",1,"判断结果") Form1.Print rusult Else result=MsgBox("您输入的数:"&b&"是一个奇数",1,"判断结果")

vba常用代码大全

前言 我们平时在工作表单元格的公式中常常使用函数,Excel自带的常用的函数多达300多个,功能强大,丰富多彩,但是在VBA中不能直接应用,必须在函数名前面加上对象,比如:Application.WorksheetFunction.Sum(arg1,arg2,arg3)。 而能在VBA中直接应用的函数也有几十个,下面将逐一详细介绍常用的40个VBA函数,以供大家学习参考。 第1.1例 ASC函数 一、题目: 要求编写一段代码,运行后得到字符串”Excel”的首字母和”e”的ASCII值。 二、代码: Sub 示例_1_01() Dim myNum1%, myNum2% myNum1 = Asc("Excel") '返回69 myNum2 = Asc("e") '返回101 [a1] = "myNum1= ": [b1] = myNum1 [a2] = "myNum2= ": [b2] = myNum2 End Sub 三、代码详解 1、Sub 示例_1_01():宏程序的开始语句。 2、Dim myNum1%, myNum2%:变量myNum1和myNum2声明为整型变量。 也可以写为 Dim myNum1 As Integer 。Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。Integer 的类型声明字符是百分比符 号 (%)。

3、myNum1 = Asc("Excel"):把Asc函数的值赋给变量myNum1。 Asc函数返回一个 Integer,代表字符串中首字母的字符的ASCII代码。 语法 Asc(string) 必要的 string(字符串)参数可以是任何有效的字符串表达式。如果 string 中没有包含任何字符,则会产生运行时错误。 4、myNum2 = Asc("e"):把Asc函数的值赋给变量myNum2。这里返回小写字母e 的ASCII代码101。 5、[a1] = "myNum1= ": [b1] = myNum1:把字符串“myNum1= “赋给A1单元格,把变量myNum1的值赋给B1单元格。 6、[a2] = "myNum2= ": [b2] = myNum2:把字符串“myNum2= “赋给A2单元格,把变量myNum2的值赋给B2单元格。 7、End Sub:程序的结束语句,和“Sub示例_1_01()”相对应。 第1.2例 Chr函数 一、题目"": 要求编写一段代码,运用Chr函数将ASCII值转换为对应的字符。 二、代码: Sub 示例_1_02() Dim myChar1$, myChar2$ myChar1 = Chr(69) ' 返回 E。 myChar2 = Chr(101) ' 返回 e。 [a1] = "myChar1= ": [b1] = myChar1 [a2] = "myChar2= ": [b2] = myChar2

常见vb程序设计代码

常见vb程序设计代码 作者 : 窦振山 1、猴子每天吃掉的桃子是所有桃子的一半多一个,到第七天发现只剩下一个了,问最开始有几个桃子?、、 Private Sub Command1_Click() Dim m(1 To 7) m(1) = 1 For i = 2 To 7 m(i) = (m(i - 1) + 1) * 2 Next For i = 1 To 7 Print "第" & i & "天的桃数是"; m(i) Next End Sub 2、百元百鸡问题:公鸡三元一只,母鸡两元一只,小鸡一元两只,现用百元买一百只鸡Private Sub Command1_Click() Dim x As Integer Dim y As Integer For x = 1 To 100 For y = 1 To 100 If 3 * x + 2 * y + (100 - x - y) / 2 = 100 Then Print "公鸡 "; x; "母鸡"; y; "小鸡"; 100 - x - y End If Next Next End Sub 1、综合运用一维数组、二维数组、动态数组和控件数组的有关知识编写程序,要求能输入学生的学号、姓名、性别、年龄等个人简况,输入的学生人数不限,并可按学号或姓名查询。界面设计用到了三个command即“添加”、“查询”和“退出”,八个label和四个text 用来输入学号、姓名、成绩和年龄,一个frame,一个picturebox图片框用来显示结果 其程序代码设计如下: Private Type stu id As Integer nam As String sco As Single age As Integer End Type Dim students(100) As stu Dim s As Integer Private Sub Command1_Click() Static i As Integer If Text1.Text = "" Then

vb语句大全

VisualBasic是微软公司推出的简单易学、功能强大编程工具,是一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,使用VB能轻而易举地开发适合在Windows 环境下各类应用程序。 语句是程序的基本功能单位,每条语句都有确切的含义,能完成一定的任务。熟练掌握语句,是开发应用程序的基础。VB共有语句77个,这里给出72个,另外5个由于很少用到没有给出,它们是Width#语句,设置文件的输出行宽度。Implements语句,指定要在包含该语句的类模块中实现的接口或类。其余3个用于声明Property过程的名称,参数以及构成其主体的代码,PropertyGet语句,该Property过程获取一个属性的值;PropertyLet语句,该Property过程给一个属性赋值;PropertySet语句,该Property过程设置一个对象引用。点击相关语句看详细内容 语句描述 AppActivate语句激活其它应用程序。 Beep语句通过计算机喇叭发出声音。 Call语句调用一个子程序或函数。 ChDir语句改变当前的路径(目录或文件夹)。 ChDrive语句改变当前的驱动器。 Close语句关闭用Open语句打开的文件。 Const语句声明常量。 Date语句设置当前系统日期。 Declare语句用于在模块或窗体中声明对动态链接库(DLL)中外部过程的引用,在引用API函数时经常用到。 Deftype语句在模块或窗体,为变量和传给过程的参数,设置缺省数据类型,以及为其名称以指定的字符开头的Function和PropertyGet过程,设置返回值类型。 DeleteSetting语句删除指定的Windows注册表的子键。Dim语句声明局部变量并分配存储空间。 Do...Loop语句循环语句,有两种变形,一种是当条件为True时,重复执行一个语句块中的命令。另一种重复执行一个语句块中的命令,直到条件变为True时。 End语句结束程序、过程或语句。 Enum语句定义枚举类型。 Erase语句重新初始化大小固定的数组的元素,以及释放动态数组的存储空间。Error语句模拟错误的发生。 Event语句定义用户自定义的事件。 Exit语句提前退出控制结构、循环或过程的语句体。 FileCopy语句复制一个文件。 For...Next语句以指定次数来重复执行一组语句。 ForEach...Next语句针对一个数组或集合中的每个元素,重复执行一组语句。 Function语句声明Function过程的名称,参数以及构成其主体的代码。 Get语句将一个已打开的磁盘文件读入一个变量之中。 GoSub...Return语句在一个过程中跳到另一个子程序中执行,执行后再返回。 GoTo语句无条件地转移到过程中指定的行。 If...Then...Else语句条件语句,根据表达式的值有条件地执行一组语句。 Input#语句从已打开的顺序文件中读出数据并将数据指定给变量。

相关文档