VBS基础知识

  该章我们将讲解vbs的基础知识,主要内容如下:

一、变量

[html]  view plain copy
 
  1. Option Explicit   
  2. Dim num_a  
  3. num_a = "Hello " & vbNewLine & "world!"   
  4. MsgBox "Hello World!", 65, "MsgBox Example"   
  5. MsgBox num_a & vbCr & "num_a 类型为:" & TypeName(num_a) & vbLf &_  
  6.        "num_a 类型的符号数:" & VarType(num_a)  


           备注
            1、Option Explicit :表示之后的变量必须显示声明,否则程序将报错
            2、变量的定义与声明必须分开说明
            3、vbcr:回车符; vblf:换行符 ; vbcrlf:回车与换行符 ; vbNewLine:新行字符
            4、_:表示分行的数据为同一行数据 <单行拆分>

            5、:表示通过“:”可将多行的数据写在一行上<多行合并>
 
二、常数

[html]  view plain copy
 
  1. Const Con_NUM_1="China"  
  2. MsgBox "常数值为:" & Con_NUM_1  

        

        备注
        1、常数在声明和赋值必须一步完成
        2、常数在程序运行期间,不能被重新赋值,否则,报错
 
三、数组
    1、固定长度数组

[html]  view plain copy
 
  1. Dim arr_a(2)  
  2. arr_a(0)=0  
  3. arr_a(1)="a"  
  4. arr_a(2)="2"  
  5. MsgBox "数组 arr_a的最大下标为:" & UBound(arr_a)  
  6. MsgBox "数组 arr_a的数组元素分别为:"  
  7.   
  8.   
  9. For i=0 To UBound(arr_a)  
  10.       MsgBox "第" & i & "个元素为:" & arr_a(i)  
  11. Next  


 
    
2、动态数组

[html]  view plain copy
 
  1. Dim arr_b()  
  2. Dim j  
  3.   
  4. ReDim arr_b(0)  
  5. arr_b(0)=0  
  6.   
  7. ReDim Preserve arr_b(1)  
  8. arr_b(1)=1  
  9.   
  10. For j=0 To UBound(arr_b)  
  11.      MsgBox "第" & j & "个元素为:" & arr_b(j)  
  12. Next  


        备注
        1、要定义动态数组,首次定义时,数组长度不指定
        2、Preserve:表示重新调整数组长度时,保留数组之前的内容,同时数组长度的调整次数无限制
    
四、运算符

[html]  view plain copy
 
  1. MsgBox "幂 2^4="   & 2^4  
  2. MsgBox "除 5.1/4="   & 5.1/4   
  3. MsgBox "整除 2\4=" & 2\4   
  4. MsgBox "求余 (5)mod(3)=" & (5)mod(3)   
  5. MsgBox "不等于 3<>2: " & (3<>2)  
  6. MsgBox "逻辑与 0 and 2: " & (0 and 2)   
  7. MsgBox "逻辑或 0 or 2: " & (0 or 2)   
  8. MsgBox "逻辑非 not 2: " & (Not 2)   
  9. MsgBox "逻辑异或 1 xor 1: " & (1 Xor 1)   
  10. MsgBox "逻辑等价 1 eqv 2: " & (1 eqv 2)   
  11. MsgBox "逻辑隐含 1 imp 2: " & (1 imp 2)   


 
五、控制结构
        1、 if..then..else
   

[html]  view plain copy
 
  1. Dim num_c,num_d,MyVar  
  2. num_c = 3  
  3. num_d = 2  
  4.   
  5. If num_c > num_d Then  
  6.      yVar = MsgBox("pass",65,"result")  
  7. Else  
  8.      MyVar = MsgBox("fail",65,"result")  
  9. End If  



 2、 select..case

[html]  view plain copy
 
  1. Dim num_e  
  2. num_e = 7  
  3. Select  Case num_e  
  4.    Case 1  
  5.       MsgBox "1"  
  6.    Case 3  
  7.       MsgBox "3"  
  8.   Case Else  
  9.       MsgBox "default"  
  10. End Select  


 
 3、 do..loop

[vb]  view plain copy
 
  1. Dim num_f  
  2. num_f = 10  
  3. Do While num_f > 8  
  4.     num_f = num_f -1  
  5.     MsgBox num_f  
  6. Loop  
[vb]  view plain copy
 
  1. Do   
  2.   num_f = num_f -1  
  3.   MsgBox num_f  
  4. Loop While num_f > 3  



 
 4、 while..wend

[vb]  view plain copy
 
  1. Dim num_g  
  2. num_g = 4  
  3. While num_g > 1  
  4.     MsgBox num_g  
  5.     num_g = num_g - 1  
  6. Wend  




 
5、 for..next

[html]  view plain copy
 
  1. Dim num_h  
  2. For num_h=0 To 3  
  3.   MsgBox num_h  
  4. Next  


   
 6、 退出循环或过程的方法

[html]  view plain copy
 
  1. 'Exit Do  
  2. 'Exit For  
  3. 'Exit Function  
  4. 'Exit Property  
  5. 'Exit Sub  

 

VBS错误处理机制

如果在运行时发现一个错误,脚本会自动停止运行,可以在脚本开头添加

On Error Resume Next

表示,发送错误语句时,跳过,并接着执行下面的语句,,该语句把相关错误信息压入错误堆栈中。

VBS提供了一个err对象,它有两个方法clear,raise,五个属性:description,helpcontext,helpfile,number,source,err对象不用引用实例,可以直接使用,例如:

On Error Resume Next
a=5
b=0
c=a/b
if err.number <> 0 Then
WScript.echo err.number&"/"err.description&"/"err.source
end if

 

 


六、过程和函数
    1、函数

[html]  view plain copy
 
  1. Function fun(a,b)  
  2.     fun = a+b  
  3. End Function  
  4. MsgBox fun(1,3)  


    2、过程  

[html]  view plain copy
 
  1. Sub su(a,b)  
  2.          MsgBox a+b  
  3. End Sub  
  4. su 1,2  


    
 
   3、备注
           function,sub均可带参数,同时function可有返回值,sub不能带返回值
    
七、常用函数
    1、转换函数

[html]  view plain copy
 
  1. 'asc:返回与字符串的第一个字母对应的 ANSI 字符代码  
  2.  MsgBox Asc("ABC") '65  
  3.    
  4.  'chr:返回与指定的 ANSI 字符代码相对应的字符  
  5.  MsgBox Chr(65)  'A  
  6.    
  7.  'strComp:返回字符串比较的结果,-1:小于 0:等于 1:大于  
  8.  MsgBox StrComp("a","b")  
  9.    
  10.  'StrReverse:返回字符串,此字符串与指定字符串顺序相反  
  11.  MsgBox StrReverse("ABCDE")  
  12.    
  13.  'cstr:将指定表达式转换为字符串  
  14.  MsgBox TypeName(CStr(111))  
  15.   
  16.  'cint:将指定的表达式转换为数字  
  17.  MsgBox TypeName(CInt("123"))  


 
    
2、判断函数

[html]  view plain copy
 
  1. 'isarray:返回指定变量是否为数组  
  2.  Dim arr_1(3)  
  3.  MsgBox IsArray(arr_1)  
  4.    
  5.  'isdate:返回指定变量是否为日期内容  
  6.  MsgBox IsDate("2011-7-7")  
  7.    
  8.  'isempty:返回 Boolean 值,指明变量是否已初始化,未初始化返回True,初始化返回False  
  9.  Dim bool  
  10.  MsgBox IsEmpty(bool) 'True 未初始化  
  11.  bool=1  
  12.  MsgBox IsEmpty(bool) 'false 已初始化  
  13.    
  14.  bool=Null  
  15.  MsgBox IsEmpty(bool) 'false 已初始化  
  16.    
  17.  bool=Empty  
  18.  MsgBox IsEmpty(bool) 'true 未初始化  
  19.    
  20.  'IsNumeric:返回boolean值,指明变量是否为数字  
  21.  MsgBox IsNumeric(3)  
  22.    
  23.  'isnull:指明表达式是否不包含任何有效数据,含有返回True,未含有返回False  
  24.  Dim isn  
  25.  MsgBox IsNull(isn)  
  26.    
  27.  'isobject:返回指定变量是否是对象,是对象返回True,不是对象返回False  
  28.  Dim obj  
  29.  Set obj = CreateObject("Wscript.shell")  
  30.  MsgBox IsObject(obj)   


 
    
3、时间函数

[html]  view plain copy
 
  1. '根据计算机系统设定的日期和时间返回当前的日期和时间值  
  2.  MsgBox Now()  
  3.    
  4.  '返回当前年月日,还有year(),month(),day()  
  5.  MsgBox Date()  
  6.    
  7.  '返回当前时分秒,还有hour(),minute(),second()  
  8.  MsgBox Time()  
  9.    
  10.  '返回星期数,日-六 分别为1-7  
  11.  Dim mydate  
  12.  mydate = #2011-7-7#  
  13.  MsgBox Weekday(mydate) '返回5,代表星期四  
  14.    
  15.  '返回系统日期与指定日期相减后的日期  
  16.  MsgBox DateAdd("yyyy",1,Date())  '返回系统日期一年后的日期  
  17.   '备注:yyyy--代表年  q--代表季度  m d--代表月 日  
  18.   'y--代表一年的日数  w--代表一周的日数  h n s --代表时分秒  
  19.  '返回两个日期的间隔日期  
  20.  MsgBox DateDiff("m","2011-7-1","2012-9-3") '返回14,代表相差14个月  


 
    4、其他函数

[html]  view plain copy
 
  1. '将指定字符串转换为大小写  
  2.  MsgBox UCase("AaA")  
  3.  MsgBox LCase("AaA")   
  4.    
  5.  '返回字符串的长度  
  6.  MsgBox "china长度为:" & Len("china")  
  7.    
  8.  '截取字符串  
  9.  MsgBox "china 前3个字符为:" & Left("china",3)  
  10.  MsgBox "china 后3个字符为:" & Right("china",3)  
  11.  MsgBox "china 从第2个字符开始,后3个字符为:" & mid("china",2,3)  
  12.    
  13.  '返回某字符串在另一字符串中第一次出现的位置  
  14.  MsgBox "n在china的第" & InStr(2,"china","n",1) & "个位置"   
  15.  '备注: 2--表示从第2个字符开始搜索,1--表示文本比较  
  16.    


 
八、类

[html]  view plain copy
 
  1. '定义类  
  2.     Class Stu  
  3.           '定义带参数的函数,并有返回值  
  4.             Function output_fun(fir,sec)  
  5.               output_fun = fir & sec  
  6.           End Function  
  7.        
  8.          '定义带参数的过程  
  9.            Sub output_sub(fir)  
  10.              Const con = "Mary,"  
  11.              MsgBox con & fir  
  12.          End Sub  
  13.    End Class  
  14.   
  15.    '实例化变量  
  16.     Set s = New Stu  
  17.       
  18.    '调用类中的函数,并给出实参  
  19.     MsgBox s.output_fun("Hello"," world") => Hello world  
  20.     MsgBox s.output_fun(1,2)              => 12  
  21.       
  22.    '调用类中的过程,并给出实参  
  23.     s.output_sub("How are you?")          => Mary,How are you?  



 九、综合应用

[vb]  view plain copy
 
  1. '例1:将数组中的元素由小到大进行排序  
  2.  Function sort()   
  3.    Dim arr_sort,i,j  
  4.    arr_sort = Array(1,3,5,7,9,2,4,6,8,10,-1,100)  
  5.     
  6.    For i=0 To UBound(arr_sort)-1  
  7.        For j=0 To UBound(arr_sort)-1-i  
  8.            temp=0  
  9.            If arr_sort(j) > arr_sort(j+1) Then  
  10.                temp = arr_sort(j)  
  11.                arr_sort(j) = arr_sort(j+1)  
  12.                arr_sort(j+1) = temp  
  13.            End if  
  14.        next  
  15.    next  
  16.     
  17.   For i=0 To ubound(arr_sort)  
  18.       MsgBox arr_sort(i)  
  19.   Next  
  20. End Function   
  21. sort()  
           
[vb]  view plain copy
 
  1. '例2:双色球摇奖机  
  2. Function DoubleColourBall  
  3.     Dim  red_ball(6)            
  4.     Dim  red_ball_temp(6)  
  5.     Dim  array_split  
  6.     Dim  input_value  
  7.       
  8.     input_value = InputBox ("请选择,是否显示摇奖过程: " & vbcr & vbcr & "Y or N (不区分大小写)","用户输入框","N")  
  9.       
  10.     Randomize  
  11.     '摇红色球,并去除重复号码  
  12.     For i=0 To 5  
  13.         Randomize   
  14.         Do  
  15.             Randomize   
  16.             red_ball_temp(i) = Int(32 * Rnd + 1)  
  17.   
  18.             If i>=1 Then  
  19.                 array_split = array_split  & " " & red_ball_temp(i-1) & " "  
  20.             End If  
  21.   
  22.             if CBool(InStr(1,array_split,CStr(red_ball_temp(i)))) = False then  
  23.                 red_ball(i) = red_ball_temp(i)  
  24.                 Exit  Do   
  25.             end if  
  26.         Loop  
  27.           
  28.         If UCase(input_value) = "Y" Then  
  29.             MsgBox "    *红色球*" & vbcr & vbcr & "第" & i+1 & "个中奖号码为:" & red_ball(i),1,"开奖号码"  
  30.         End If  
  31.     Next  
  32.       
  33.     '摇蓝色球  
  34.     Randomize  
  35.     Dim blue_ball  
  36.     blue_ball = Int(12 * Rnd + 1)  
  37.       
  38.     If UCase(input_value) = "Y" Then  
  39.             MsgBox "  *蓝色球*" & vbCr & vbCr  & "中奖号码为:" & blue_ball ,1,"开奖号码"  
  40.     End If  
  41.       
  42.     '对号码进行排序  
  43.     For i=0 To 4  
  44.         For j=0 To 4-i  
  45.             Dim temp  
  46.             If red_ball(j) > red_ball(j+1) Then  
  47.                 temp = red_ball(j)  
  48.                 red_ball(j) = red_ball(j+1)  
  49.                 red_ball(j+1) = temp  
  50.             End if   
  51.         next  
  52.     Next  
  53.       
  54.     '显示最后结果  
  55.     Dim award_number  
  56.     award_number = Join(red_ball)  
  57.     MsgBox "   本期双色球中奖号码" & vbCr & vbCr & "红色球: " & award_number & vbcr & "蓝色球: " &  blue_ball ,1,"开奖结果"  
  58. End Function  
  59.   
  60. Call DoubleColourBall()  

 

显示结果:

VBS基础知识

 

 

[vb]  view plain copy
 
  1. '例3:将文件中的指定位置的#号以特定字符替换  
  2. Function write_txt(txt_path)    
  3.    Const ForReading =1,ForWriting = 2,ForAppand = 8    
  4.    Dim fso,file    
  5.    Set fso = CreateObject("Scripting.fileSystemObject")    
  6.    Set file = fso.OpenTextFile(txt_path,ForWriting,True)    
  7.      
  8.    '写入366个#    
  9.    For i=0 To 365  
  10.         file.Write("#")   
  11.    next  
  12.    Set file = Nothing  
  13.   
  14.    Dim input_date,str,input_month,input_day,mouth_day,total_day  
  15.    input_date = InputBox("请输入日期,格式为月日,中间以空格隔开")  
  16.      
  17.    split_date = Split(input_date," ",-1,1)                 
  18.    input_month = CInt(split_date(0))            '输入的月份  
  19.    input_day = CInt(split_date(1))              '输入的日数  
  20.      
  21.    '判断输入的日期是否正确  
  22.    If input_month < 1 Or  input_month >12 Then  
  23.         MsgBox "月份错误,退出!"  
  24.         Exit function  
  25.    End If  
  26.      
  27.    Select  Case input_month    
  28.     Case 1,3,5,7,8,10,12  
  29.         max_day=31   
  30.     Case 4,6,9,11    
  31.         max_day=30    
  32.     Case Else    
  33.         max_day=28  
  34.    End Select   
  35.       
  36.    If input_day < 1 or input_day > max_day Then  
  37.         MsgBox "日数错误,退出!"  
  38.         Exit function  
  39.    End if  
  40.      
  41.    str = InputBox("请输入找到对应的日期后,用以替换#号的符号")   
  42.    mouth_day = Array(31,28,31,30,31,30,31,31,30,31,30,31) '每月的最大天数,不考虑闰年  
  43.      
  44.    '计算天数  
  45.     total_day = 0  
  46.     If input_month>1 then  
  47.         For i=0 To input_month-2  
  48.             total_day = total_day + mouth_day(i)  
  49.         Next  
  50.         total_day = total_day + input_day  
  51.     Else  
  52.         total_day = input_day  
  53.     End If  
  54.       
  55.     'MsgBox "输入的天数在第" & total_day & "个位置"  
  56.   
  57.   
  58.     '将对应位置的#号,用输入的字符将其替换  
  59.     If fso.FileExists(txt_path) Then    
  60.         Set file = fso.OpenTextFile(txt_path,ForReading)    
  61.         Do While (Not file.AtEndOfLine)    
  62.            msg = file.ReadLine    
  63.         Loop    
  64.     Else    
  65.         MsgBox txt_path & " is't exists!"    
  66.     End If    
  67.       
  68.     split_after_str = Replace(msg,"#",str,total_day,1)  
  69.     Set file = Nothing  
  70.       
  71.     '将修改的后字符,重写入文件  
  72.     fso.DeleteFile(txt_path)  
  73.     fso.CreateTextFile(txt_path)  
  74.     Set file = fso.OpenTextFile(txt_path,ForAppand,True)    
  75.   
  76.     For i=0 To total_day-2  
  77.         file.Write("#")   
  78.     Next  
  79.     file.Write(split_after_str)  
  80.       
  81.     Set file = nothing   
  82.     Set fso = Nothing    
  83.    
  84. End function     
  85.   
  86. Call write_txt("c:\aaa.txt")  
  87. 参考:http://blog.csdn.net/xibuzhihun/article/details/6801990

 

 

VB自定义class,就一早默认有Initialize和Terminate,相当于初始化和结束

class test
private Sub Class_Initialize  '初始化
dim t 
...........
end sub 

private Sub Class_Terminate '退出类
 set t = nothing
end sub

 

 

你可能感兴趣的:(vbs)