ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1244|回复: 4

[分享] VB6应该知道的知识

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-8 09:46 | 显示全部楼层 |阅读模式
本帖最后由 weiyingde 于 2019-10-8 09:52 编辑

1、VB大小写问题
利用UCase函数将字符串转换为大写,用LCase函数将字符串转换为小写
如:Private Sub Command1_Click()
    Text1.Text=UCase(Text1)
  End Sub
2、如何判断字符串是否为空Null
不可以使用“If 变量=Null Then”语句,因为Null在任何表达式中返回结果都为Null,要用IsNull函数进行判断。例如:
Private Sub Command1_Click()
  Dim i
  i=Null
  If IsNull(i)=True Then
     MsgBox “为空NULL”
  Else
     MsgBox “不为空”
  End If
End Sub
3、End语句的使用技巧
End语句会重置所有模块级别变量和所有静态局部变量。End语句不调用Unload、QueryUnload、Terminate事件或任何其他Visual Bisic 6.0代码,只是生硬的终止代码执行,类模块创建的对象被破坏,由Open语句打开的文件被关闭,并且释放程序所占用的内存。其他程序的对象引用无效。
End语句提供了一种强迫终止程序的方法。Visual Basic 6.0 程序正常结束时,应该卸载所有窗体。只要没有其他程序引用该程序公共类模块创建的对象,就并无代码执行,程序将立即关闭。如本例,执行End语句后打开的所有窗口将全部被关闭。
Private Sub Command1_Click()
    End   ’关闭所有窗口
End Sub
Private Sub Form_Load()
    Command1.Caption=”关闭”
Form2.Show
End Sub
4、VB中#1是什么意思
Open myfile1 For Input As #1
Open myfile2 For Output As #2
具体解释一下
解释:第一行是打开myfile1文件并且给它编号为#1,
第二行是打开myfile2文件并且给它编号为#2,
以后在调用这2个文件时直接调用其编号即可,比如在关闭myfile2文件时可以这样:
close #2
5、请问vb中的 !id = Text1.Text 中的“!”叹号什么意思
完整的应该是:
表!字段名=xxx 或 记录集!字段名=xxx
叹号表示引用某个表或记录集下的某个字段(这里是字段ID)
6、数组学习
A、静态数组用Dim语句来声明:Public|Private|Dim 数组名(下标)[AS 数据类型]
Public: 用于声明可在工程中所有模块的任何过程中使用的数组;
Private:用于声明只能在包含该声明的模块中使用的数组;
Dim:用于模块或过程级别的数组
如:Dim a(3) As String       ‘声明String型数组a,包含4个数组元素即a(0),a(1),a(2),a(3)
Dim b(6)               ‘声明Variant型数组b,包含7个数组元素即b(0)~b(6)
Dim c(2 To 7) As Integer  ‘声明Integer型数组c,包含6个数组元素即c(2)~c(7)

B、动态数组使用ReDim(在过程级别中使用的语句)声明:
ReDim [Preserve] 数组名(下标) [As 数据类型]
Preserve:可选的关键字,当改变原有数组最末维的大小时,使用此关键字可以保持数组中原来的数据。
如 :ReDim a(10) As Long
动态数组还可以用Dim语句声明,只要将下标定义为空,并在需要改变这个数组大小时,使用ReDim语句重新声明这个数组的下标。如: Dim a()------然后用ReDim Preserve a(10)
C、二维数组的声明
ReDim a(3,2) As Long               ‘声明动态二维数组
Dim b(3,4) As String               ‘声明静态二维数组
Dim c(5,9)                         ‘声明默认Variant数据类型静态二维数组
Dim d(1 To 9,1 To 9)               ‘声明数组下标从1到9的二维数组
7、VB中的常量
常量是一个在程序运行时不会被改变的数值或字符串。通过声明和使用常量的标识符,代替一个在程序执行时不会被改变的值,在程序维护时只要修改这个常量的值,即可改变程序中所有以这个常量命名的值,从而使程序的维护变得简单。
以下是局部常量的声明:
Const Tod As Date=#8/20/2008#       '日期型常量
Const Bol As Boolean =True
Const Inte As Integer=100
Const A As Integer=100,B As String="101"
可以通过使用类型声明符代替As关键字声明常量
Const Inte%=100
Const Dou#=32.574887
Const A%=100+12

8、变量声明方式
   通过语句定义的声明方式称为显式声明,也可以不声明而直接使用,这种方式称为隐式声明。如果程序中出现了变量名拼写错误,那么程序会将其认为是一个新的变量,从而导致应用程序出现严重错误。因而在使用变量前最好还是声明比变量。如果希望不允许程序使用未声明的变量,可以使用Option Explicit语句来强制声明变量,Option Explicit是在模块级中使用的语句。
9、局部变量
   局部变量通过Dim或者Static语句声明变量,通过Dim语句声明的变量在每次调用该过程时,程序将重新为这个变量赋一个初始值,其值在过程结束后被释放;而用Static声明的变量在每次调用该过程时,不会被程序重新赋一个初始值,其值在过程结束后将被保留,下次再调用该过程时,变量的初始值是上次调用结束时被保留的值。使用Static语句声明的变量称为静态变量。
   使用Static语句声明的静态变量,可以计算用户单击按钮的次数,然而Dim语句定义的变量在每次单击按钮时,其值将仍为初始化默认值。
10、Like运算符
       Like运算符比较两个字符串是否匹配,如果匹配则返回True,否则返回False,但当两个字符串中有一个是Null时,则返回Null。
       语法:result=string Like pattern
       例如,Like运算表达式在pattern参数中参加入通配符进行运算
       Dim Bo As Boolean
       ‘?可以代替任何一个单一字符,*可以代替任何个数的字符
       Bo=”BAT4156Hdrg” Like “B?T*”  ‘返回True
       Bo=”CAT4156Hdrg” Like “B?T*”  ‘返回False
       ‘#可以代替0~9任何数字
       Bo=”a8a” Like “a#a”             ‘返回True
       ‘[A-Z]的字符代替原字符
       Bo=”D” Like “[A-Z]”            ‘返回True
       ‘不在[!A-Z]的字符代替原字符
       Bo=”D” Like “[!A-Z]”            ‘返回False
       Bo=”aO54b” Like “a[L-P]##[!c-e]”  ‘返回True


Pattern中可以参与运算的通配符
通配符                     说明
   ?                 任何单一字符
   *                  任何个数的字符(包括空子符)
   #                  任何一个数字(0-9)
   []                  []中的任何单一字符
   [!]               不在[!]中的任何单一字符
11、程序编写规范
●单行分成多行语句,用续行符号(“_”)来将一条语句分成多行,如:
Private Sub Command1_Click()
       Label1.Caption=”明日科技有限公司是一家诉讼咖啡色看到返回山三方可撒复” &_
       “三代粉红色地脚螺丝定界符滤色镜福连锁店节流阀司机带来极大三六九等” &_
       “sdfsdfsdfsdfsdfsdfsddsf。”
End Sub
说明:”_”符号是用来连接代码的,,所以在连接字符串的时候需要在”_”符号前加入字符串连接符”&”
●     一行多条语句
一行多条语句通过使用”:”将一行中的多条语句隔开,从而将一些短小而有联系的语句写在同一行,如:Dim a As Long:a=2205
●添加多行代码注释块:选中要注释的代码------〉单击“编辑”工具栏中的“设置注释块”工具栏按钮,单击“解除注释块”按钮清除代码前的“'”.
●If…Then和要执行的语句写在同一行,就可以省掉End If 语句
12、IIF语句
    IIF(<表达式>,<值或表达式1>,<值或表达式2>),如果表达式为True,则返回值或表达式1,否则返回值或表达式2。
    如:Print IIF(15>16,15,16) ‘输出结果为16
13、Is,To等关键字在Select Case语句中的使用
    Is ,To语句用在Case之后,用来限定值的范围,Is关键字可以与关系运算符连用,表示取值的一个条件;To关键字指定取值的范围,如A~Z之间可以写成A To Z,如下:
    Private Sub Command1_Click()
        If IsNumeric(Text1.text) Then
         Select Case CLng(Text1.Text)
          Case Is=0
            MsgBox “等于0”,vbOKOnly,”结果”
          Case Is<0
            MsgBox “小于0”,vbOKOnly,”结果”
          Case Is>0
            MsgBox “大于0”,vbOKOnly,”结果”
         End Select
        End If
    End Sub

Private Sub Command1_Click()
  Select Case Text1.Text
        Case 0 To 9
          MsgBox “输入的是数字”,vbOKOnly,”提示”
        Case “a” To “z”
          MsgBox “输入的是小写字母”,vbOKOnly,”提示”
        Case “A” To “Z”
          MsgBox “输入的是大写字母”,vbOKOnly,”提示”
  End Select
End Sub
14、如何让vb众多窗体中的一个成为主窗体?
答:如何让vb中很多个窗体中的一个作为程序运行时第一个跳出来的窗体,一般工程默认的是第一个创建的窗体,但如果要修改可以按照如下方法:project菜单---properties----general选项卡中的“Startup Object”在其中选择一个要作为主窗体的窗体,然后点击“ok”即可。
15、vb点击“X”按钮关闭窗体响应的函数是?
利用Unload语句或者窗体控制菜单中的CLose命令关闭窗体时,可以出发Unload事件,在窗体被卸载时,可以使用Unload事件过程来确认窗体是否应被卸载或者用来指定想要发生的操作,语法:
Private Sub object_Unload(Cancel as Integer)
其中Cancel是一个整数,用来确定窗体是否从屏幕中删除。如果Cancel为0,则窗体被删除,如果Cancel为任何一个非零的值可防止窗体被删除。如下:
Private Sub Form_Unload(Cancel As Integer)
    Dim c
    c=MsgBox("确认要关闭窗体吗",33,"提示信息")
     if c=vbOK Then
         End
     Else
         Cancel=1
     End If
End Sub
QueryUnload(Cancel As Integer, UnloadMode As Integer)事件在一个窗体关闭之前发生,并且窗体的QueryUnload事件先于该窗体的Unload事件发生。因此可以模仿上边Form_Unload的程序,在窗体点击了关闭按钮时跳出询问提示框,问是否要关闭窗体,是则退出窗体,否则把Cancel设为一个非零值。
16、vb模态对话框和非模态对话框
如果是模态对话框,则必须处理了这个对话框其他对话框才可以进行操作,非模态对话框不需要处理就可以其他对话框,比如:Log.Show 1 'Log为登陆窗体,show参数为1时,即显示模态对话框,如果不登陆则无法对后边
                                         '的窗体进行操作
                      Log.Show    '默认参数为0 ,创建非模态对话框,不需要登陆都可以对后边的窗体进行操作
17、如何让vb窗体上的最大化最小化按钮不可用,关闭按钮不可见?
如果只让最大化或最小化按钮不可用只要让窗体属性中的MaxButton=False或MinButton=False,如果两个都设置为False,则这两个按钮不可见,如果将窗体属性中的ControlBox设置为False,怎最大化、最小化和关闭按钮都不可见。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-8 09:50 | 显示全部楼层
18、在Print方法中使用符号“;”可以使接下来输出的内容不换行
例如如下输出三角形*的例子:
Option Explicit
Private Sub Command1_Click()
       Dim a As Long, b As Long
       Form1.Cls
       While a <= 9
          a = a + 1
          For b = 1 To 23 - a
             Print " ";
          Next b
          For b = 1 To 2 * a - 1
              Print "*";
           Next b
        Print
    Wend
  End Sub
19、数组的删除操作
如下程序,删除数组中a(2)的值,后边的数据一次往前移
Dim a() as Long
Private Sub Form_Load()
  ReDim a(1 To 4) as Long
  a(1)=1:a(2)=2:a(3)=3:a(4)=4
  Dim i as Long
  For i=2 To 3
     a(i)=a(1+1)
  Next i
ReDim Preserve a(1 To 3)
For i=1 To 3
   Debug.Print "a(" & CStr(i) &")=" & CStr(a(i)),
Next i
End Sub
20、vb中的Button如何加载图片?
一、在属性中加载图片:DisabledPicture   该控件无效时显示在控件中的图片
                                       DownPicture        控件被单击并处于按下状态时显示的图片
                                       Picture                 控件正常状态下显示的图片
       注意:属性中设置图片时,控件的Style属性要设置为1-Graphical,否则图片不会显示出来,当加载图片和改变按钮颜色时,必须将Style属性设置为1.
二、代码实现控件加载图片,Form_Load中写Command1.Picture=LoadPicture(App.Path & "1.jpg")

21、Vb参数传递方式判别与解题应用
*  按值传递与按地址传递的内涵:按值传递参数实质上是将实参的值复制一份给形参,因此形参获得的是实参的副本,当过程执行中对形参进行改变,并不会影响实参本事;按地址传递参数,实质上是将实参变量的地址传递给形参,因此形参与实参指向同一内存单元,当过程执行中形参发生改变时,对应实参也将跟着改变。
*  不同传递方式对参数类型的要求:若参数按地址传递,则VB要求实参的参数的数据类型与形参的数据类型完全一致;若参数值传递,则实参数据类型不要求与形参完全一致,但必须能够由VB默认转化。
*  例题讲解
题一:在应用程序中用”Private Function Fun(X as Integer,Y  As Single)”定义了函数Fun。调用函数Fun的过程中的变量I,J均定义为Integer型,能够正确引用函数Fun的是()
A Fun(I,J)  B Call Fun(I,3.65)  C  Fun(3.14,231)   D  Fun(“125”,“52.3”)
答案:B C D
讲解:由于实参I与形参X匹配,由于形参X不是数组,并无ByVal修饰,而实参I为变量,不是值或表达式,因此该参数将按照地址传递;同理可以推断实参J与形参Y也将按照地址传递,根据VB要求,按照地址传递的实参和形参数据类型必须完全一致,而根据题意,因为J为Integer,Y为Single,因此A不正确;对于B Call Fun(I,3.65),I与X按照地址传递;而实参3.65为值,与形参Y匹配时,将按值传递,因此B正确;对于C Fun(3.14,231)虽然实参3.14对行的形参X为Integer,实参231对应的形参为Single,但由于他们都是按照值传递,因此可以将3.14转化为3,而231可以直接赋值给Y,因此C正确;对于D Fun(“125”,“52.3”),由于实参“125”和“52.3”均为字符串值,因此其与对应形参XY按照值传递,而数字字符串是可以转化为数值类型的,因此D正确。
对于该题,由于要求是“能正确引用函数Fun的是”因此CD虽带括号,并且无Call引导,但却可以通过诸如:Print Fun(3.14,231)加以引用,若改为“能正确调用函数Fun的语句是”则此时CD不对,只能选择B

题二:调用由语句Private Sub Convent(Y As Integer)定义的Sub过程时,以下不是按值传递的语句是(D)
A. Call Convent((X)) B. Call Convent(X*1)  C. Convent(X)  D. Convent X
分析:对于AB选项,实参分别为(X)和X*1,均为表达式,因此AB选项中的实参是按照值传递的,对于D选项,实参X未用括号引导,此时不可加Call,因此语句正确,同时,实参X与形参Y必须按照地址传递。因此答案为D。
现在考虑C选项语句Convent(X)带括号,但却无Call引导,因此直觉上似乎不能正确执行,但若我们在VB代码编辑器中输入该句,回车后,该语句自动调整为:Convent (X),注意此时Convent和(X)之间有一个空格,因此该语句的括号是用于X,而不是用于Convent。所以尽管无Call引导但其却能够执行,此时实参为(X),因此参数将按照值传递。所以对于Call Convent(X)和Convent (X),虽然都能执行,并非由于Convent (X)前可以省略Call,而在于他们的实参分别是X和(X),其参数传递方式自然就不同。
22、VB操作Access数据库中的问题

我在VB中执行strSQL = "Select * From User" 语句,结果总说From子句错误,明明数据库中的表名就是User,他却说不对,换成数据库中别的表名又对了,看来是表名的问题,问过高手才知道“User”是Access中的关键字,所以不对,如果把那个SQL语句换成strSQL = "Select * From [User]"就可以了,关键字加上方括号就不当关键字了,这就对了,欧耶!

TA的精华主题

TA的得分主题

发表于 2019-10-8 12:07 | 显示全部楼层
本帖最后由 microyip 于 2019-10-8 12:16 编辑

数组定义
dim 数组名称([下标 To ] 上标)  [As 数据类型]
其中,[下标 To],可选填,不填,默认为“0 To”
[As 数据类型],可选填,不填,默认为“As Variant”


ReDim [Preserve] 数组名称([新上标 To] 新下标)  [As 数据类型]
其中,[新下标 To],可选填,不填,默认为“0 To”
[Preserve],可选填,不填,为新定义数组;填了,为重定义数组上下标,不能改变数组本身类型,这时候,后面 [As 数据类型]无需写。
注意:假如Preserve重定义数组,只能改变最后一个维数的标号,不能改改变前面几个维数的标号

没有说你原来写的错误,但从理解上,其实跟实际是有那么一丢丢差异的

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-8 13:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
microyip 发表于 2019-10-8 12:07
数组定义
dim 数组名称([下标 To ] 上标)  [As 数据类型]
其中,[下标 To],可选填,不填,默认为“0 To ...

谢谢补充,谢谢指教。这个是我从别的帖子上复过来的,没有仔细甄别。

TA的精华主题

TA的得分主题

发表于 2019-10-8 13:32 | 显示全部楼层
楼主你也不用在其它地方见到感觉有用的帖子就往这里搬吧,你今天都搬了不少了。
还有这论坛分享的内容一般都是楼主自己写的或者辛苦整理的,想你这样直接搬,我感觉意义不大。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 09:51 , Processed in 0.056380 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表