发布新日志

  • 【资料】err.number的代码表

    2009-05-19 16:36:00

    错误代码   信息    
      5   无效的过程调用或参数    
      6   溢出    
      7   内存不够    
      9   下标越界    
      10   数组长度固定或临时锁定    
      11   被零除    
      13   类型不匹配    
      14   字符串空间溢出    
      28   堆栈空间溢出    
      35   Sub   或   Function   未定义    
      48   加载   DLL   时出错    
      51   内部错误    
      53   文件未找到    
      57   设备   I/O   错误    
      58   文件已存在    
      61   磁盘已满    
      67   文件太多    
      70   没有权限    
      75   路径/文件访问错误    
      76   路径未找到    
      91   未设置对象变量或   With   块变量    
      92   未初始化   For   循环    
      94   无效的   Null   使用    
      322   无法创建必要的临时文件    
      424   要求使用对象    
      429   ActiveX   部件无法创建对象    
      430   类不支持   Automation    
      432   Automation   操作过程中,未找到文件名或类名    
      438   对象不支持此属性或方法    
      440   Automation   错误    
      445   对象不支持此操作    
      446   对象不支持命名的参数    
      447   对象不支持当前区域设置    
      448   未找到命名参数    
      449   此参数必选    
      450   参数个数错误或无效的属性赋值    
      451   对象不是集合    
      453   未找到指定的   DLL   函数    
      455   代码资源锁定错误    
      457   此键已和集合中的元素关联    
      458   VBScript.   中不支持使用   Automation   类型的变量    
      500   变量未定义    
      501   非法赋值    
      502   用此对象进行   Script.   编程会出错    
      503   对象不能安全初始化    
      1001   内存不够    
      1002   语法错误    
      1003   缺少“:”    
      1004   缺少“;”    
      1005   缺少“(”    
      1006   缺少“)”    
      1007   缺少“]”    
      1008   缺少“{”    
      1009   缺少“}”    
      1010   缺少标识符    
      1011   缺少“=”    
      1012   缺少“If”    
      1013   缺少“To”    
      1014   缺少“End”    
      1015   缺少“Function”    
      1016   缺少“Sub”    
      1017   缺少“Then”    
      1018   缺少“Wend”    
      1019   缺少“Loop”    
      1020   缺少“Next”    
      1021   缺少“Case”    
      1022   缺少“Select”    
      1023   缺少表达式    
      1024   缺少语句    
      1025   语句未结束    
      1026   缺少整型常数    
      1027   缺少“While”或“Until”    
      1028   缺少“While”、“Until”或语句结尾    
      1029   局部变量或参数过多    
      1030   标识符过长    
      1031   无效的编号    
      1032   无效的字符    
      1033   未终止字符串常数    
      1034   未终止注释    
      1035   嵌套的注释    
      1037   “Me”关键字使用无效    
      1038   “Loop”缺少“Do”    
      1039   无效的“Exit”语句    
      1040   无效的“For”循环控制变量    
      1041   名称被重定义    
      1042   必须是行中的第一个语句    
      1043   无法为非   ByVal   参数赋值    
      1044   调用   Sub   时不能使用括号    
      1045   缺少字母常数    
      1046   缺少“In”    
      32766   True    
      32767   False    
      32811   未找到元素    
  • [资料]Byval和ByRef的区别

    2007-07-03 13:22:20

     

    实例:

    Public Class Form1
           Inherits System.Windows.Forms.Form
           Dim m = 10
           Dim n = 20
           Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
               MsgBox("m 的值为:" & m)     '显示 m 的值为 10
               MsgBox("n 的值为:" & n)      '显示 n 的值为     20
               Num1(m)
               Num2(n)
               MsgBox("m 的值变为:" & m)       '显示 m 的值为     11
               MsgBox("n 的值变为" & n)         '显示 n 的值为      20
           End Sub
           Public Sub Num1(ByRef f As Integer)
               f = f + 1
           End Sub
           Public Sub Num2(ByVal v As Integer)
               v = v + 1
           End Sub
    End Class

    ByVal是传递值 源数据不会被修改
    你可以把这个值当作自己的局部变量来使用

    ByRef是传递地址 , 源数据可能被修改
    你对这个变量的操作将对你传入的那个变量产生影响,

  • [转载]VB编程的8个小技巧

    2006-12-28 18:04:07

     
    VB编程的8个小技巧
        1、"&"替换"+"
       在很多人的编程语言中,用“+”来连接字符串,这样容易导致歧义。良好的习惯是用“&”来连接字符串.
       
       不正确:
       Dim sMessage As String
       sMessage = "1" + "2"
       
       正确:
       Dim sMessage As String
       sMessage = "1" & "2"
       
       注意:"&"的后面有个空格
       
       2、变量命名大小写,语句错落有秩,源代码维护方面
       
       下面大家比较一下以下两段代码:
       
       读懂难度很大的代码:
       
       Dim SNAME As String
       Dim NTURN As Integer
       
       If NTURN = 0 Then
       If SNAME = "vbeden" Then
       Do While NTURN < 4
       NTURN = NTURN + 1
       Loop
       End If
       End If
       
       容易读懂的代码:
       
       Dim sName As String
       Dim nTurn As Integer
       
       If nTurn = 0 Then
         If sName = "vbeden" Then
          Do While nTurn < 4
            nTurn = nTurn + 1
          Loop
         End If
       End If
       
       3请养成以下的“对象命名约定”良好习惯
       
       推荐使用的控件前缀
       
       控件类型 前缀 例子
       3D Panel pnl pnlGroup
       ADO Data ado adoBiblio
       Animated button ani aniMailBox
       Check box chk chkReadOnly
       Combo box, drop-down list box cbo cboEnglish
       Command button cmd cmdExit
       Common dialog dlg dlgFileOpen
       Communications com comFax
       Control (当特定类型未知时,在过程中所使用的) ctr ctrCurrent
       Data dat datBiblio
       Data-bound combo box dbcbo dbcboLanguage
       Data-bound grid dbgrd dbgrdQueryResult
       Data-bound list box dblst dblstJobType
       Data combo dbc dbcAuthor
       Data grid dgd dgdTitles
       Data list dbl dblPublisher
       Data repeater drp drpLocation
       Date picker dtp dtpPublished
       Directory list box dir dirSource
       Drive list box drv drvTarget
       File list box fil filSource
       Flat scroll bar fsb fsbMove
       Form frm frmEntry
       Frame fra fraLanguage
       Gauge gau gauStatus
       Graph gra graRevenue
       Grid grd grdPrices
       Hierarchical flexgrid flex flexOrders
       Horizontal scroll bar hsb hsbVolume
       Image img imgIcon
       Image combo imgcbo imgcboProduct
       ImageList ils ilsAllIcons
       Label lbl lblHelpMessage
       Lightweight check box lwchk lwchkArchive
       Lightweight combo box lwcbo lwcboGerman
       Lightweight command button lwcmd lwcmdRemove
       Lightweight frame lwfra lwfraSaveOptions
       Lightweight horizontal scroll bar lwhsb lwhsbVolume
       Lightweight list box lwlst lwlstCostCenters
       Lightweight option button lwopt lwoptIncomeLevel
       Lightweight text box lwtxt lwoptStreet
       Lightweight vertical scroll bar lwvsb lwvsbYear
       Line lin linVertical
       List box lst lstPolicyCodes
       ListView lvw lvwHeadings
       MAPI message mpm mpmSentMessage
       MAPI session mps mpsSession
       MCI mci mciVideo
       Menu mnu mnuFileOpen
       Month view mvw mvwPeriod
       MS Chart ch chSalesbyRegion
       MS Flex grid msg msgClients
       MS Tab mst mstFirst
       OLE container ole oleWorksheet
       Option button opt optGender
       Picture box pic picVGA
       Picture clip clp clpToolbar
       ProgressBar prg prgLoadFile
       Remote Data rd rdTitles
       RichTextBox rtf rtfReport
       Shape shp shpCircle
       Slider sld sldScale
       Spin spn spnPages
       StatusBar sta staDateTime
       SysInfo sys sysMonitor
       TabStrip tab tabOptions
       Text box txt txtLastName
       Timer tmr tmrAlarm
       Toolbar tlb tlbActions
       TreeView tre treOrganization
       UpDown upd updDirection
       Vertical scroll bar vsb vsbRate
       
       --------------------------------------------------------------------------------
       推荐使用的数据访问对象 (DAO) 的前缀
       用下列前缀来指示数据访问对象
       数据库对象 前缀 例子
       Container con conReports
       Database db dbAccounts
       DBEngine dbe dbeJet
       Document doc docSalesReport
       Field fld fldAddress
       Group grp grpFinance
       Index ix idxAge
       Parameter prm prmJobCode
       QueryDef qry qrySalesByRegion
       Recordset rec recForecast
       Relation rel relEmployeeDept
       TableDef tbd tbdCustomers
       User usr usrNew
       Workspace wsp wspMine
       
       --------------------------------------------------------------------------------
       
       应用程序频繁使用许多菜单控件,对于这些控件具备一组唯一的命名约定很实用。除了最前面 "mnu" 标记以外,菜单控件的前缀应该被扩展:对每一级嵌套增加一个附加前缀,将最终的菜单的标题放在名称字符串的最后。下表列出了一些例子。
       
       推荐使用的菜单前缀
       菜单标题序列 菜单处理器名称
       File Open mnuFileOpen
       File Send Email mnuFileSendEmail
       File Send Fax mnuFileSendFax
       Format Character mnuFormatCharacter
       Help Contents mnuHelpContents
       
       当使用这种命名约定时,一个特定的菜单组的所有成员一个接一个地列在 Visual Basic 的“属性”窗口中。而且,菜单控件的名字清楚地表示出它们所属的菜单项。
       
       为其它控件选择前缀
       
       对于上面没有列出的控件,应该用唯一的由两个或三个字符组成的前缀使它们标准化,以保持一致性。只有当需要澄清时,才使用多于三个字符的前缀。
       
       常量和变量命名约定
       除了对象之外,常量和变量也需要良好格式的命名约定。本节列出了 Visual Basic 支持的常量和变量的推荐约定。并且讨论标识数据类型和范围的问题。
       
       变量应该总是被定义在尽可能小的范围内。全局 (Public) 变量可以导致极其复杂的状态机构,并且使一个应用程序的逻辑非常难于理解。全局变量也使代码的重用和维护更加困难。
       
       Visual Basic 中的变量可以有下列范围
       
       范围 声明位置 可见位置
       过程级 过程,子过程或函数过程中的 ‘Private’ 在声明它的过程中
       模块级 窗体或代码模块(.frm、.bas )的声明部分中的 ‘Private’ 窗体或代码模块中的每一个过程
       全局 代码模块(.bas)的声明部分中的 ‘Public’ 应用程序中的每一处
       
       在 Visual Basic 的应用程序中,只有当没有其它方便途径在窗体之间共享数据时才使用全局变量。当必须使用全局变量时,在一个单一模块中声明它们,并按功能分组。给这个模块取一个有意义的名称,以指明它的作用,如 Public.bas。
       
       较好的编码习惯是尽可能写模块化的代码。例如,如果应用程序显示一个对话框,就把要完成这一对话任务所需要的所有控件和代码放在单一的窗体中。这有助于将应用程序的代码组织在有用的组件中,并减小它运行时的开销。
       
       除了全局变量(应该是不被传递的),过程和函数应该仅对传递给它们的对象操作。在过程中使用的全局变量应该在过程起始处的声明部分中标识出来。此外,应该用 ByVal 将参数传递给 Sub 过程及 function 过程,除非明显地需要改变已传递的参数值。
       
       随着工程大小的增长,划分变量范围的工作也迅速增加。在类型前缀的前面放置单字母范围前缀标明了这种增长,但变量名的长度并没有增加很多。
       
       变量范围前缀
       
       范围 前缀 例子
       全局 g gstrUserName
       模块级 m mblnCalcInProgress
       本地到过程 无 dblVelocity
       
       如果一个变量在标准模块或窗体模块中被声明为 Public,那么该变量具有全局范围。如果一个变量在标准模块或窗体模块中被分别声明为 Private,那么该变量有模块级范围。
       
       注意: 一致性是卓有成效地使用这种技术的关键;Visual Basic 中的语法检查器不会捕捉以 "p." 开头的模块级变量。
       
       常量
       常量名的主体是大小写混合的,每个单词的首字母大写。尽管标准 Visual Basic 常量不包含数据类型和范围信息,但是象 i、s、g 和 m 这样的前缀对于理解一个常量的值和范围还是很有用的。对于常量名,应遵循与变量相同的规则。例如:
       
       mintUserListMax  ''对用户列表的最大限制
                ''(整数值,本地到模块)
       gstrNewLine    ''新行字符
                ''(字符串,应用程序全局使用)
       
       变量
       声明所有的变量将会节省编程时间,因为键入操作引起的错误减少了(例如,究竟是 aUserNameTmp,还是 sUserNameTmp,还是 sUserNameTemp)。在“选项”对话框的“编辑器”标签中,复选“要求变量声明”选项。Option Explicit 语句要求在 Visual Basic 程序中声明所有的变量。
       
       应该给变量加前缀来指明它们的数据类型。而且前缀可以被扩展,用来指明变量范围,特别是对大型程序。
       
       用下列前缀来指明一个变量的数据类型。
       
       变量数据类型
       
       数据类型 前缀 例子
       String (字符串类型) str strFName
       Integer (短整数类型) int intQuantity
       Long (长整数类型) lng lngDistance
       Single (单精度浮点数类型) sng sngAverage
       Double (双精度浮点数类型) dbl dblTolerance
       Boolean (布尔类型) bln blnFound
       Byte (字节类型) byt bytRasterData
       Date (日期类型) dte dteNow
       Currency (货币计算与定点计算类型) cur curRevenue
       Object (对象类型) obj objCurrent
       Variant (变体类型) vnt vntCheckSum
       
       描述变量和过程名
       
       变量或过程名的主体应该使用大小写混合形式,并且应该足够长以描述它的作用。而且,函数名应该以一个动词起首,如 InitNameArray 或 CloseDialog。
       
       对于频繁使用的或长的项,推荐使用标准缩略语以使名称的长度合理化。一般来说,超过 32 个字符的变量名在 VGA 显示器上读起来就困难了。
       
       当使用缩略语时,要确保它们在整个应用程序中的一致性。在一个工程中,如果一会儿使用 Cnt, 一会儿使用 Count,将导致不必要的混淆。
       
       用户定义的类型
       在一项有许多用户定义类型的大工程中,常常有必要给每种类型一个它自己的三个字符的前缀。如果这些前缀是以 "u" 开始的,那么当用一个用户定义类型来工作时,快速识别这些类型是很容易的。例如,ucli 可以被用来作为一个用户定义的客户类型变量的前缀。
       
       4在简单的选择条件情况下,使用IIf()函数
       
       罗索的代码:
       If nNum = 0 Then
        sName = "sancy"
       Else
        sName = "Xu"
       End If
       
       简单的代码:
       sName=IIf(nNum=0,"sancy","Xu")
       
       5、尽量使用Debug.Print进行调试
       
       在很多初学者的调试中,用MsgBox来跟踪变量值.其实用Debug.Print不仅可以达到同样的功效,而且在程序最后编译过程中,会被忽略.而MsgBox必须手动注释或删除.
       
       通常:
       MsgBox nName
       
       应该:
       Debug.Print nName
       
       6、在重复对某一对象的属性进行修改时,尽量使用With....End With
       
       通常:
       Form1.Height = 5000
       Form1.Width = 6000
       Form1.Caption = "This is MyLabel"
       
       应该:
       With Form1
        .Height = 5000
        .Width = 6000
        .Caption = "This is MyLabel"
       End With
       这种结构程序执行效率比较高,特别在循环语句里。
       
       7、MsgBox中尽量使用消息图标,这样程序比较有规范
       
       一般来说
       
       vbInformation 用来提示确认或成功操作的消息
       
       vbExclamation 用来提示警告的消息
       
       vbCritical 用来提示危机情况的消息
       
       vbQuestion 用来提示询问的消息
       
       8、在可能的情况下使用枚举
       
       枚举的格式为
       [Public | Private] Enum name
       membername [= constantexpression]
       membername [= constantexpression]
       ....
       End Enum
       
       Enum 语句包含下面部分:
       
       部分 描述
       Public 可选的。表示该 Enum 类型在整个工程中都是可见的。Enum 类型的缺省情况是 Public。
       Private 可选的。表示该 Enum 类型只在所声明的模块中是可见的。
       name 必需的。该 Enum 类型的名称。name 必须是一个合法的 Visual Basic 标识符,在定义该 Enum 类型的变量或参数时用该名称来指定类型。
       membername 必需的。用于指定该 Enum 类型的组成元素名称的合法 Visual Basic 标识符。
       constantexpression 可选的。元素的值(为 Long 类型)。可以是别的 Enum 类型。如果没有指定 constantexpression,则所赋给的值或者是 0(如果该元素是第一个 membername),或者比其直接前驱的值大 1。
       
       说明
       所谓枚举变量,就是指用 Enum 类型定义的变量。变量和参数都可以定义为 Enum 类型。Enum 类型中的元素被初始化为 Enum 语句中指定的常数值。所赋给的值可以包括正数和负数,且在运行时不能改变。例如:
       
       Enum SecurityLevel IllegalEntry = -1 SecurityLevel1 = 0 SecurityLevel2 = 1 End Enum
       
       Enum 语句只能在模块级别中出现。定义 Enum 类型后,就可以用它来定义变量,参数或返回该类型的过程。不能用模块名来限定 Enum 类型。类模块中的 Public Enum 类型并不是该类的成员;只不过它们也被写入到类型库中。在标准模块中定义的 Enum 类型则不写到类型库中。具有相同名字的 Public Enum 类型不能既在标准模块中定义,又在类模块中定义,因为它们共享相同的命名空间。若不同的类型库中有两个 Enum 类型的名字相同,但成员不同,则对这种类型的变量的引用,将取决于哪一个类型库具有更高的引用优先级。
       
       不能在 With 块中使用 Enum 类型作为目标。
       
       Enum 语句示例
       下面的示例演示用 Enum 语句定义一个命名常数的集合。在本例中是一些可以选择的颜色常数用于设计数据库的数据输入窗体。
       
       Public Enum InterfaceColors
       icMistyRose = &HE1E4FF&
       icSlateGray = &H908070&
       icDodgerBlue = &HFF901E&
       icDeepSkyBlue = &HFFBF00&
       icSpringGreen = &H7FFF00&
       icForestGreen = &H228B22&
       icGoldenrod = &H20A5DA&
       icFirebrick = &H2222B2&
       End Enum
       
       好处是加快编程速度
       9写代码的时候,可以用中文写变量,写完后再用英文替换。这样写代码的时候思路比较清晰,而且方便调试,嘿嘿。
       
Open Toolbar