首页 VBS教程

VBS教程

举报
开通vip

VBS教程什么是VBscrīpt呢? VBscrīpt的全称是:Microsoft Visual Basic scrīpt Editon.(微软公司可视化BASIC脚本版). 正如其字面所透露的信息, VBS(VBscrīpt的进一步简写)是基于Visual Basic的脚本语言. 我进一步解释一下, Microsoft Visual Basic是微软公司出品的一套可视化编程工具, 语法基于Basic. 脚本语言, 就是不编译成二进制文件, 直接由宿主(host)解释源代码并执行, 简单点说就是你写的程序不需要编译成.exe...

VBS教程
什么是VBscrīpt呢? VBscrīpt的全称是:Microsoft Visual Basic scrīpt Editon.(微软公司可视化BASIC脚本版). 正如其字面所透露的信息, VBS(VBscrīpt的进一步简写)是基于Visual Basic的脚本语言. 我进一步解释一下, Microsoft Visual Basic是微软公司出品的一套可视化编程工具, 语法基于Basic. 脚本语言, 就是不编译成二进制文件, 直接由宿主(host)解释源代码并执行, 简单点说就是你写的程序不需要编译成.exe, 而是直接给用户发送.vbs的源程序, 用户就能执行了. v m9|#R b ^ y#jF0  我知道菜鸟现在最关心的就是用什么工具来开发VBS程序了, 答案 八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案 是:记事本(Notepad).我不是开玩笑, 其实任何一种文本编辑器都可以用来开发VBS开发, 只不过记事本是由系统自带的, 比较好找而已. 尽管如此, 我还是建议你去下载一个专业的文本编辑器, 因为这些工具可以提供 "语法高亮"等功能, 更加方便开发, 用哪一个随你喜好, 我比较喜欢Edit Plus (2.10). | E W \ H$K ~ [0  OK, 我们先来写一个VBscrīpt程序热热身. K S,s,f A F&Q2L3N q y0REM 输入并回显你的名字 0r7w l a3u'{ N0'使用InputBox和Msgbox函数 爱好者博墅 J ~2F a!Y u(A-g Dim name,msg 5h | M4H w(J \0msg="请输入你的名字:" 爱好者博墅 d)x'd h P v'] name=Inputbox(msg,"名称") 爱好者博墅8s"b4z A p#\ Y Msgbox(name) 爱好者博墅2C G |-{ n t9f q [   把上面的程序清单输入到记事本里面, 然后保存为以.vbs为扩展名的文件("保存类型"里面选择"所有文件").然后双击运行, 观察运行结果. 注意:请自己输入程序清单, 不要复制->粘贴! B R Y J!R3b0  我来解释一下这个程序, 第一行和第二行的开头分别是"REM"语句和" ' ", 这两个东西的作用是相同的, 表示本行是注释行, 就是说这两行什么也不干,只是用来说明这段程序的功能, 版权信息等等. 注释行是程序最重要的部分之一, 尽管它不是必需的, 但对于其他人阅读源代码, 以及自己分析源代码是很有好处的. 好的习惯是在必要的地方加上清晰, 简洁的注释. 爱好者博墅-{.U k {7y Y @   Dim用来声明一个变量, 在VBS中, 变量类型并不是那么重要, 就是说VBS会帮你自动识别变量类型, 而且变量在使用前不一定要先声明, 程序会动态分配变量空间. 在VBS中你不用考虑name储存的是一个整数还是一个小数(学名叫"浮点数"), 也不用考虑是不是字符串(一串字符, 比如:"Hello World"), VBS会自动帮你搞定. 所以第三行语句可以删除, 效果不会变, 但我强烈反对这么做, 一个变量的基本原则就是:先声明,后使用.变量名用字母开头,可以使用下划线,数字, 但不能使用vbs已经定义的字, 比如dim, 也不能是纯数字. 爱好者博墅"X | B g b ?4B0^   下一行被称之为"赋值", "="是赋值符号, 并不是数学中的等于号, 尽管看起来一样.这是正统的理解, 你要理解成等于也没有什么不可. 赋值号的左边是一个变量, 右边是要赋给变量的值, 经过赋值以后, msg这个变量在程序中等同于"请输入你的名字:"这个字符串,但当msg被再次复制的时候, 原值就会消失. 不光字符串, 其他任何变量都这样被赋值, 例如: a=2, b=12.222等等. ,zO l p8b l l0  再往下,Inputbox和Msgbox是VBS内建的函数, 一个函数就相当于一个"黑箱", 有输入(参数)和输出(返回值), 你可以不用了解函数是怎么运作的, 只要了解这个函数能干什么就行了, 我们也可以定义自己的函数, 不过那要等到以后再讲. 现在我们只要了解, 一个函数可以有返回值也可以没有, 可以有参数也可以没有. 例如Inputbox就是有返回值的函数, 我们用赋值号左边的变量来"接"住InputBox的返回值--就是你输入的内容. 在inputbox右边的括号里是参数列表, 每个参数用","分隔开, 每个参数有不同的功效, 比如第一个参数会显示在提示里, 我们把msg这个变量作为第一个参数传给了Inputbox 函数, 而msg="请输入你的名字:", 所以我们在对话框的提示栏就会看到"请输入你的名字:" 第二个参数是对话框的标 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 , 我们用直接量(学名叫"常量", 这里是"字符串常量")传递给函数, 当然你也可以传递变量. Inputbox还有很多参数, 比如你在"名称"后面再加一个","然后输入随便一串字符(字符串,用双引号""包裹起来的一串字符叫做字符串)然后运行, 看看结果. 你会发现用于输入的文本框有了默认的值, 这就是第三个参数的作用. +`.K p T.L-i-P0Msgbox函数是用来输出的函数, 在VBS中没有专门的输出函数(BASIC中的print,C中的printf), 所以我们只能用对话框来观察输出结果, Msgbox的必要参数只有一个, 就是要输出的内容, 在这种情况下, 我们不需要理会msgbox的返回值. 关于Msgbox和Inputbox我们以后还会在讨论, 今天只是热热身, 到此为止. 7x&H3w z R4N0爱好者博墅 B }3d A9P N v z 要点: "C y2` h:k0a r*@5@01) 注释(以REM或'开头)行在程序中不起作用, 但能让别人更容易读懂你的程序. 爱好者博墅2_ s M*S!H i T%c.b 2) 变量好像一个盒子, 或一个代号, 可以代表你想代表的东西. 变量赋值使用"=" 爱好者博墅 X F M;i y9^.^ K$v 3) 以""包裹起来的字符称之为"字符串" U*i ] U5A5K W O q04) 函数像一个"黑箱", 有参数和返回值, 用"="左边的变量可以接住返回值 爱好者博墅 r T _ l ye"`'W 5) Inputbox函数弹出一个输入对话框,Msgbox则用于输出 7I1\3[ z ~'Q q0爱好者博墅 R U"D ?+O d"~ |3q 作业: 爱好者博墅 o7H a C e#M ? ~ 1) 试验Inputbox的第三个参数 $a X#W _ S sB:m)l _ H3|02) 写一段程序输出你的年龄 u$x q F U*g&^ ~-l03) 写一段程序进行3次输入, 分别输入你和你父母的姓名(要求显示提示), 并分3次输出 爱好者博墅 { L F6o3|"d @0A4[ 第二篇: 爱好者博墅N } T#I O T g*P 我真没想到, 第一次的作业竟然有人不会. 爱好者博墅 N w ~ | T#] G   看来要讲的非常非常细致才行, 嗯, 今天讲各种"量"和基本运算 'V T'~ W8Y)I4a F |0  先说常量, 这个比较简单. Y ] p&I.i0  什么是常量呢, 常量就是其值不可变化的量. 爱好者博墅1M M0n+V \3Q%J   常量分为两种:第一种, 自然常量. 这叫是因为它们本身就是常量, 你怎么更改21的值呢? 他永远都是21, 不可能变成46 爱好者博墅 ~+Y l*G4e Dn x 如果你在程序中使用"21=46", 这样的语句将会引发一个错误. 同样的, 字符串也是常量 (还记得字符串吗? 就是包裹在""之间的一串字符), "Hello World"就是一个例子, 如果你使用"Hello World"="Bye"这样的语句同样会引发一个错误. 你能举出自然常量的更多例子吗? $c1h O r o5^+?,j G0  第二种, 是我们自己定义的常量,这种量也使用代号, 他们也被赋值, 但和变量的不同点在于, 他们在定义的时候被赋值,以后就不能改变了,如果企图改变将会引发一个错误. 定义一个变量,我们使用"const"这个关键字(关键字的意思是系统定义了有特殊功能的字, 不能作为变量名或常量名使用),格式是:const 常量名=常量值. b d A K @ S H0例如: #B;V |~ y+h a;y0^9z'{ F0const PI=3.1415926 z C:? l L5^ X3o-{ S0const NAME="记忆碎片" ;x Z u2r z W%x h G A B0  这样我们就定义了两个常量, PI和NAME, 一般说来, 常量名全部使用大写, 但也可以不用, 随你喜好. 将一些在程序中不需要改变的值定义为常量是个好习惯, 这样能防止不必要的意外. 另外, 使用自定义常量也可以减少你的工作量. 比如: !X5t E!?"u I2x y0msgbox("Hello World") 爱好者博墅 @9e I8F | V T msgbox("Hello World") 1Z B q y ]/z3n,E3S0msgbox("Hello World") 爱好者博墅;j.b ]4C ]^ B^ msgbox("Hello World") 爱好者博墅 o2Y&W II msgbox("Hello World") 爱好者博墅:X f ],i/A"S S e+j9C [6f   这个程序输出五次Hello World, 如果你想要改变输出为Bye-Bye, 就必须修改全部程序, 当然你可以手动修改5次, 但如果你要输出1000次呢? 常量就可以替我们解决这个问题: !C/L N J i \ m5b+d&m0const hw="Hello World" 爱好者博墅 } U({ ~ \ c F | t6| x msgbox(hw) I3d { [ u!\4m)P0msgbox(hw) 爱好者博墅 m L0I `$K/u/c%Z msgbox(hw) 爱好者博墅 n,Y&A C8W l msgbox(hw) 爱好者博墅 l!@;h [ q B2` msgbox(hw) S;?5O N w5P1n Z u F0  这样当你要修改输出的时候只要修改hw的值就行了. 爱好者博墅 S i v;F L l P k6j U ]   好了, 现在我们来看看编程的第一块重要"基石":变量. 解释变量最好的办法我觉得是"盒子", 一个变量好像一个盒子, 里面只能装一个东西, 当你要装进去别的东西的时候必须把原有的东西拿出来. 这个"盒子"是有名称的, 当你在程序中使用变量的时候, 系统会打开盒子取出里面的东西, 让这些东西参与处理, 而不是盒子. 有些语言是很依赖"盒子"里面装些什么东西, 这样才能找到合适的"盒子"(比如C语言), 但VBS给我提供的是能够自动伸缩的"魔术盒", 我们不用关心装进去的是什么东西,  爱好者博墅 n X3J s I VBS会自动调整盒子的大小. 例如: 爱好者博墅2N o(\ L D"D8b Dim a1,a2,a3 9e [ ?1^-s t0a1=14 爱好者博墅6^ d E o7^ i p%` j a2=12.23 爱好者博墅!t q:_4F'h h a3="Hello" D f i d&S H2I { F(G f0而不用像C语言那样麻烦: 或者是VB的正规声明(VB可以声明也可以不用)那样: 爱好者博墅8q$K.j b S S.U([ int a1; Dim a1 as integer 爱好者博墅#a A Q l k L W8H5E'\ float a2; Dim a2 as Double ~ u:_ R B w+m_ J N0char* a3; Dim a3 as strnig y%O a9J L V h3o U q0a1=14; a1=14 爱好者博墅 ? I2N,i,T5^ e#[ N,J.q ] a2=12.23; a2=12.23 爱好者博墅 Q"E F [/z+r+g [ M,w a3="Hello"; a3="Hello" { h K;u J&s!_0嗯……扯远了…… m%v o%d a-?0  变量有什么用呢? 哇, 那用处可大了. 最简单, 你并不能确定程序运行时变量的值, 比如前一节课我们编的输入姓名的程序, 你不能确定InputBox返回的是什么(还记得Inputbox的返回值吗? 就是你输入的内容), 所以你就没有办法应对各种情况, 但我们用name这个"盒子"把用户的名字装起来, 到用的时候我们只要知道name这个盒子的名字就行了, 系统会自己打开他并把里面的内容拿出来用. 再举个例子, 我们编写一个程序计算一个矩形的面积, 比如这个程序要发给 小学 小学生如何制作手抄报课件柳垭小学关于三违自查自纠报告小学英语获奖优质说课课件小学足球课教案全集小学语文新课程标准测试题 生使用: ,I S _ g*l0Q U x-?0dim a,b,s !Q1Z V&r G)T*Z0a=15 爱好者博墅 I P2l!L$r G)d%N(n b=12 m y ?2}6c&[ xs0s=a*b 爱好者博墅 U P;K"r N J/x msgbox(s) 爱好者博墅 f1k O;X a#S#?   这样就可以求出长为15,宽为12的矩形的面积了, 是不是很简单? 当然, 这个程序也可以这样写: 1A%\ e j7i,g X0dim s 爱好者博墅4q a ^ `7u'u M F9G s=15*12 爱好者博墅 ~7E h w1t C:X p msgbox(s) L q'E G5e0g d h0  这样看起来程序短了许多, 也节约内存, 但并不是鼓励的做法, 为什么? 请看下面. 爱好者博墅#_#D*R x.v h m   现在, 我们的程序要变得像点样子才行, 谁的程序写出来还要别人修改源代码才能用啊? 爱好者博墅7a9x m o q'~ e u"m   所以, 我们要接受用户的输入, 还记得吗? InputBox函数. (w6B ])y s ^ H6W0  修改后程序如下: ` a t3y"m V ? T0dim a,b,s Z'| H Z1k a A R d0a=inputbox("请输入矩形的长:") 爱好者博墅 K t @ O u { Y X V ^ b=inputbox("请输入矩形的宽:") ~ P#b V H X$p*c O Y R0s=a*b 爱好者博墅 a x d!s i7J9e3} I msgbox(s) l d q&u-~4Z0  ok, 这么一修改, 无论用户输入怎样的数据, 我们都能计算出矩形的面积了. 如果你用s=15*12能改嘛? 当然不行. 爱好者博墅&z/` V K9Y5?;? n   我想你已经发现了, vbs中的数学计算和真正的算术没有什么不同, +,-,*,/,(),[],{}都是一样的用法, 比如: 爱好者博墅7} Q6b |7n/s dim ans ~(p-y7B"s:f l7s |:J0ans=12+32/4+[(23-10)*2] 4H X6X4y I O6n(\0msgbox(ans) 'Y(r2_ q,c2L c x m0  四则运算的法则在编程中同样生效, 你可以在编程中重新获得小学时候的乐趣(你恨数学?那就别学电脑了). K*O(Z9Hz!A4R0  在编程中有一个有趣的运算符是"mod", 这个运算符叫做"取余运算符", 就是取得一次除法的余数, 例如 爱好者博墅'F S%_ {4g*O dim a 爱好者博墅 K g-_3X P s"u)A+F#c a=16 mod 5 v:C,t'O7g ] v5t0  你知道a等于几吗? Bingo! 没错, 就是1. 因为16 / 5 =3....1, 所以mod计算的结果就是1. 爱好者博墅0A X%r x U }   还有一个运算符是"^"(就是键盘"6"上面的小箭头), 他表示"乘幂"(或者是"方") 比如: 爱好者博墅 Y w(I3J N;q-L*Y dim a,b,c g i,g(v$z0a=2 爱好者博墅 e%z N.] S @-N b=a^2 l r:^0K7S a u/G9v O(r M0c=a^3 ;p H:f-n+x | t I0msgbox(a) 7y5k N Fq d T J)d,B0msgbox(c) 'iG C$b:t V,o0  则b=a*a=4, c=a*a*a=8 爱好者博墅 z&R { g O2M(T ~   我们一次不要讲太多, 这次就讲到这里, 现在总结一下. 爱好者博墅*d:k$d X ^ 要点: &y;e g$K+z k d d01) 常量分为自然常量和自定义常量, 常量的值不可修改 {-F E7~*n:fd%|%j5a s Y02) 变量就像盒子, 我们不在乎盒子里装的是什么, 但一定要知道盒子的名字 爱好者博墅 {)f Yt/J _ ] 3) 四则运算在编程中没有任何不同 0b b4{&J,g04) MOD是取余运算 爱好者博墅&} U9g5r X j 爱好者博墅%R ] I|*M @ |9L p M#@;Y%l 作业: | b @*] }(j \ `9K01) 编一个程序, 计算圆形的面积, 半径由用户给出 (使用Inputbox) PI取值3.14159 6] P,c6v+I02) 编一个程序取得20 / 3 的余数 爱好者博墅 X/H N y8@ f 爱好者博墅:g y2P7j E o m'Y 第三篇(共六篇): 爱好者博墅,^"m X"A,h _ o l6p 爱好者博墅 _ O-X @ ? 首先, 我来解决一下上次课程的几个疑问 @ I c a {,o o(|n0第一, 那个余数问题, 16 / 5 = 3...1, 是因为我改过前面的部分, 后面的忘了改了, 不好意思.   ^'Q U J y0第二, 请看一下程序清单: 爱好者博墅 } y A2T h 1) 爱好者博墅7e a"w ^ h F X A Dim a,b,c 爱好者博墅4R:a.c:{-I ` w a=inputbox("a是:","输入半径") 爱好者博墅*G&[ C n k4s'T(z b=Inputbox("b是:","输入半径") (z"t O [ e | H B0c=a*2+b*2 p Z {1h0_ X0Msgbox(c) 爱好者博墅 ^ M s X9C w |#c 这个 输入1、2时是6 9?)x n `)[02) 爱好者博墅,k K7y Z+Q p {#N+a2F y Dim a,b,c 爱好者博墅 Fb:Y M9` ^ N6V a=inputbox("a是:","输入半径") 9} i.~ F v g k0b=Inputbox("b是:","输入半径") S!L G*Y |0c=(a+b)*2 Q b w&v%j H o [,l0Msgbox(c) 爱好者博墅,w h,Y K3sl 这个输入1、2时是24 "| \ s8j i+?!n$Q!f0  为什么会不一样呢? 在数学上c=(a+b)*2 和 c=a*2+b*2是等价的, 在VBS中也是如此. 问题出在"+"上, 在VBS中, +不仅仅是加号的意思还表示把两个字符串连接起来, 例如"Hello"+"World"="HelloWorld" have you understood? 你还记得InoutBox函数的返回值吗? 是字符串! 这就看出问题了吧, 在编程中"1"不等于(<>)1, "1"是一个字符, 而1是一个数, 所以a,b都是字符串变量, "1"+"2"="12", 这就好像我们小时跟伙伴开玩笑问他们1+1=?一样, 我们总是笑着说"错啦,应该是11".但为什么, a可以*2却不发生错误呢? 这时VBS比较智能的一个表现, 如果这个字符串的内容是一个数且对他进行数学运算, 则把字符串强制转换成数参与运算, 如果字符串代表一个数, 但不参加数学运算, 而是参加字符串运算(合并)则当作字符串处理, 所以你看到a+b=12, 这时候a+b的结果(12)是一个字符串, 当它要乘以2的时候就被强制转换成了数字12, 这样我就得到了结果24. p n U4g s @ o ^ h0  怎么修改这个程序呢? 我们需要用到另一个内建的函数:int, int函数的功能是将输入值转化成整数值, 我们这样修改: s Q-p ? w,s0c=(int(a)+int(b))*2 .m D Q9l I i J:g&`,D0  这个意思就是把a作为参数传递给int函数, int函数就会返回那个整数(你的输入值), 然后让返回值参与运算, 这样就得到了正确答案.所以,以后如果你用的是inputbox函数的话,最好用int语句加工一下:比如c=int(c) 'c是你自己的变量 h c {:r7^ k2I-S0  大家是不是觉得这个课程有点枯燥, 呵呵, 变量和运算符部分的确是这样的, 不过多多练习也就好了, 这次, 我们写写真正好玩的东西: 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 控制语句. 这个部分开始才是真正的编程. 第4章:循环结构 E6f n ~ I ^ j ]4[0  我们先来看一道题:商场进行每日结算, 要求累加出今天的营业额, 每次输入一个数, 这道题其实很简单, 但就我们现在学 爱好者博墅+k ^ T x N 过的知识要完成这道题相当麻烦, 我们来分析一下. 首先, 我们需要知道买卖的次数, 这样才能控制输入的次数,但是, 这种设 +}5I:q O j1D5U l0计是非常低效的, 每天都要重新设计程序. 假定今天进行了5次交易, 以下是源程序: 爱好者博墅"r C | O:^:U"j)r B dim sum 爱好者博墅 A P%d#c \ ~;G ` sum=0 '初始化变量 爱好者博墅 @ r%z p(W \&y sum=sum + int(inputbox("请输入交易额")) 爱好者博墅 B V R$x S o7n y 'sum=sum+x 这种形式是把本身的值取出来, 进行一次运算, 再放回本身, 这种方法很有用处 爱好者博墅%G F X(o1N _ V W '这里使用了函数嵌套, 把inputbox的返回值直接传给int函数, 转化成整数, 下同 }5| r2M;_,^-{:}-p0sum=sum + int(inputbox("请输入交易额")) j M x p T Q0sum=sum + int(inputbox("请输入交易额")) .d N X ^)} m Y/p b+I0sum=sum + int(inputbox("请输入交易额")) )B t b \8m l"|%o:g Z0sum=sum + int(inputbox("请输入交易额")) 爱好者博墅 N r l D j ? x msgbox(sum) k e/~9D+e a(F0  看到了吗, 我通过把计算过程复制了5遍才设计好了程序, 这种程序在汽车交易所等交易次数少的地方还能凑合着用, 如果 6o/}2w7Y n&b Q Y a0放到超市岂不是要复制, 粘贴几千遍? 我们今天讲的内容就可以克服这种缺陷, 首先, 我们来讲以下Do...Loop语句. 爱好者博墅 J(w*i \ `9q x {-H,L   do...loop的结构看上去非常简单, 就是:do...loop, 仅此而已, 这个结构不断执行do和loop之间的语句(学名叫:循环体), 爱好者博墅 u \5~ w} E+D 永不停止. 举个例子来说: (^0U \+W z x0do 爱好者博墅9r&gV C*C A(Z ~8r g x msgbox("这个信息会不断重复出现, 要停止程序请使用任务管理器(Ctrl+Alt+Del)中止wscrīpt进程") r ~ \ F8V @5p0loop 7M }/V;H r r0  运行这个程序, 当你点销掉一个对话框马上会出来另一个, 你永远点不完, 总有下一个. 谁会运行这样的程序? 除非是给 ] ?'I%M$l(U;Z A0别人捣乱(我就干过这种事), 所以在do..loop结构中还有一个语句:exit do, 这个语句将终止循环, 跳到loop后面的语句继续 爱好者博墅'n*Y6Q3B F0N&t 执行. 据个例子来说: 爱好者博墅 W+H0S6R C T*l0C dim a '注意:常量不需要在dim里面声明,否则会引发错误 (t F Q g v K0const pass="123456" '这是一个字符串 请用""包裹起来. 设定密码为常量, 不可变更 P,["L.F E"] N \ n0do 爱好者博墅 s3k4V E7u n i%p J W6K e a=inputbox("请输入密码") 爱好者博墅 p(C8U.P.g{ s if a=pass then c H2e e c h0msgbox("密码校验成功") 9a d#C h N d!y"M0exit do r l4v [ w a#J S0end if 爱好者博墅5A L(p1F x%i W s loop 爱好者博墅 L/Q5W U#s G   这个程序会一直不停的问你密码, 知道你输入了正确的密码为止.(if可以嵌套在另一个if当中, 也可以嵌套在循环体当中 7E1z$B sq h/x0, 所以一定要用缩进, 来分清楚程序的各个部分). 这个程序是很经典的, 早期的程序都是这么做的. 但是我们是Hacker, 所以 o5U |'x+]E)x!n"b0我们了解系统的安全性, 这种无限次认证程序很容易被穷举破解, 我们要来限定认证的次数. 修改程序如下 6| x v X/Q ~ q x ]0dim a,ctr 爱好者博墅 t {0q%E!{ j [)~ y ctr=0 '设置计数器 5X q&X:@"I-r S0const pass="pas123_" '上面的那个是弱密码, 这次改的强一点 g h T2G!z R%U1\-]0do x)t'` O [ D m ^0if ctr=3 then 爱好者博墅2V T ~'\*a S msgbox("已经达到认证上限, 认证程序关闭") 爱好者博墅 Y v E z [!e exit do 爱好者博墅 p v O6}2K else 爱好者博墅8~ U M r8[ t2H"l a=inputbox("请输入密码") 爱好者博墅7p:} L N8t { x h [ a t2e M if a=pass then 爱好者博墅 w n)a j7V%gV'R msgbox("认证成功") 爱好者博墅 ^ } l-]$X S'v msgbox("(你可以在这里加一段成功后得到的信息)") 爱好者博墅 ~ G,d Y ];U G U exit do 爱好者博墅 Q P*I!i+c e K } p else 1y H c'w&` G0ctr=ctr+1 '如果密码出错就增加一次错误认证计数 $f V n4J2t3`0msgbox("认证出错, 请检查密码") "f s \9B6Z F s"v W ]0end if 9x;a ` y4y-`0end if 爱好者博墅 N%H'] A e7X,U:C loop 爱好者博墅2C q _,a { { ~ a   运行这个程序试试看, 当你出了3此错误以后, 就会停止再次询问密码, 关闭程序. telnet认证用来限制次数的程序与此大 Q%|!h { @ a$i0同小异. 要注意的是嵌套的if语句, 清仔细读一下这个程序, 可能比较难懂, 也请你试着自己设计一下类似的程序. Q m7\3l7y1[3Z[ y0  其实, 要在do...loop加上验证的功能, 并不一定要用if, 我们可以直接利用do. 我来介绍一下while关键字, while可以放 爱好者博墅 Y v q1t l c 在do或者是loop后面, 然后再接一个表达式, 当表达式的值为true的时候(表达式成立),才运行循环体.我们来看一下修改后的 爱好者博墅 ~ zw V U*t ~ [ 程序" 爱好者博墅+p |+} h6N k ~ C N5\ dim a,ctr p*z*G6N&^8y+f M0ctr=0 爱好者博墅 ]&x+v1s&b const pass="pas123_" 爱好者博墅8F o8X d m do while ctr<3 爱好者博墅 {-a7K P I!^(U a=inputbox("请输入密码") ~8\0Q!@2w0if a=pass then ^'} J7F w Y B g0msgbox("认证成功") +S)Y ^ [,J |)m+h2S0msgbox("(你可以在这里加一段成功后得到的信息)") "E L P*I(n Y R d |0exit do 爱好者博墅"X s(S P2N else 1@4q:j p k C ? ?0ctr=ctr+1 '如果密码出错就增加一次错误认证计数 j ?:g X/{ J A$g)z i0msgbox("认证出错, 请检查密码") )p5P#a t f `,g N0end if 爱好者博墅 e` U Y i loop 爱好者博墅1n Z T p-D D O0s 爱好者博墅1`7F V s5{ Z k dim a,ctr 爱好者博墅2J g R p!C `9Z T e ctr=0 V#R(c Ls7z B0const pass="pas123_" 爱好者博墅 V3~ B U X [$dQ do } `&e N"T [,v:y*u n0a=inputbox("请输入密码") 爱好者博墅 Q s p+a,s if a=pass then 爱好者博墅 J e w9f0r B l `7l msgbox("认证成功") 爱好者博墅'c w;F Y s h9G K i msgbox("(你可以在这里加一段成功后得到的信息)") 爱好者博墅7j&X,H1E { E*b!\ O exit do .@ W W7q-c-q0else 爱好者博墅 _2[ z;f&~ ctr=ctr+1 '如果密码出错就增加一次错误认证计数 爱好者博墅0`G3A J R0|6T E msgbox("认证出错, 请检查密码") 爱好者博墅 U)h s ? p d u end if #p)c }2~ P9r8w G,D0loop while ctr<3 爱好者博墅2I,q&s ^$r   功能是一样的, 为什么要放在loop后面呢? 你把ctr的值改成3就知道了, while在do后面的程序会直接退出, 而在loop后面 E K.w3H { T _)D @ D9^0还会允许一次认证, 到了loop才结束.和while相反的是until, 用法和while一样, 不过他只有当后面的表达式的值为false(表 爱好者博墅 z f0J z Y1_ p }0z2g 达式不成立)的时候才执行循环体, 请自己试验一下 T&e1U3w f)` f0  ok, 我们来看另外一种循环结构,for....next, 这种循环结构是基于计数的, 也是在编程中最常见到的循环结构. 爱好者博墅 ~ _ M F:i S7a;O A dim i z x;N g u D0for i=0 to 5 &u ^ Q V P*K k0msgbox(i) C9{1H Y,I [#U0next 爱好者博墅 _ Q } l A u'l   看到了吗?每次输出的i都是递增的, 但我们没有明确指出i要递增, 当i达到5的时候, 循环就结束了, 因为由0开始, 所以 爱好者博墅 [*v @5i1V ? e G ] 循环体执行了6次, 这一点很重要, 大部分东西都是从0开始而不是1. 这个程序也可以写成 #R hN | \$}(A0do的形式: 爱好者博墅 X j d f | ?&| a#{ z ` Z dim i 爱好者博墅8U ?%X"l J'K i=0 ~(A.T s ?m7e P g l0do while i<5 U O2n [ c)W0msgbox(i) -J/u9` m;M ^0i=i+1 '因为do不能自动计数, 必须手动加 T,n!I |-P'r G F0loop w e m C M/M0  怎么样, 还是for比较好用吧. for在编程中很有用途, 我们再举一个例子, 顺便讲一下嵌套循环. 爱好者博墅 u Y4c K w*q y [ dim i,j O o [ l i+O h A0for i=1 to 9 爱好者博墅 I c2B.c I n#z:W8b ~ h for i=1 to 9 "d"l J1G `)x0str=str & i * j & " " '&是和并字符串的符号 爱好者博墅 E u W A Z F next '每个next对应一个for 爱好者博墅3o1r E B,\ Z h { O$P next R3c8K0S O9Z,F/m0  看看运行结果, 是否令你会想起小学时代的数学老师(丑陋的嘴脸). 要注意, 这里有一个"大"的for, 和一个小的for, 当 爱好者博墅 Q0b M7c*},O D 小的for执行完一个周期以后, 大的for才执行一次(换句话说, 大的for执行一次, 小的要执行9次), 所以一共执行了九九八十 2[5U8a \5I n0一次. 在大的for里可以不仅仅是一个小的for, 也可以加上另外的语句. 我们来修改一下源程序: l+M l(Qd"];S0dim i,j (o4`0z V T @-|0for i=1 to 9 4I9~ v E I#V ? x0for i=1 to 9 c*~"Q H E { J S,K0str=str & i * j & " " m l&e&n A g0next '每个next对应一个for 爱好者博墅+t x t5l,[;O'M+J str=str & vbCrlf 'vbCrlf相当于键盘上的回车键,因为你不能在键盘上输入,所以系统定义了一个默认的常量 &A+W K t x `0next W$m4A b h-F m C V p0  这次运行完成以后, 输出结果按照乘数进行了分割, 每小for运行完一次, 就换一行(通过vbcrlf). O2i A e _ P R ?0  这次的内容对菜鸟可能比较难懂, 掌握的办法只有一个:多实践. 另外, 我在论坛看到很多人还是问:"VBscrīpt要用什么工 爱好者博墅.Z S f L)^ 具编?"我就很气愤, 我在第一篇里面已经说明:用记事本编辑源代码, 然后保存为以.vbs为扩展名的程序就可以了, 请大家不要 Y.k)} D q2[ X7j0再问. 另外, 国产的一种垃圾软件\"超级X霸"抢占了vbs这个扩展名, 请把那个垃圾卸载掉. "n \8i%M M:])?0  我们总结一下: ,a | ?;S*x.X9P)j o,L0要点: j `}&{ j/S01) do..loop和exit do的用法 爱好者博墅 m r g9U U 2) while当表达式true的时候执行循环体,until反之 P"]5x D1[-R p.L j P03) for...next是计数循环, 每次执行计数器递加 爱好者博墅3a L H1R!o(b&T j 4) 嵌套循环的作用和写法 爱好者博墅 g l a:~ H5D;d 4.5) &用于连接字符串 爱好者博墅%s q5lz S H ^ 5) vbCrLf相当于键盘上的回车键 &? W uw0K {0 } J4z g0A G N0作业: K:M5V2k1i ~ w01) 在我国的数学经典著作"九章算术"中有这样一道题:百钱买百鸡, 公鸡5钱一只, 母鸡3钱一只, 小鸡1钱2只(这个数据我是参考一本编程书的, 但我记得是公3,母1,小1钱3只? 不管了, 就按照书上得来吧)求得是能有多少种办法买这些鸡. 如果看不懂的 爱好者博墅!m R ?#D8E F-c Z 话我用大白话说说:有人要去买鸡, 用100块钱正好买了100只鸡, 价格如下:公:5$, 母:3$, 小:1$ for 2, 让你求一共多少种卖 3B u3^!u s N0法(公母小怎么搭配). 请用循环解决这个问题. 6t{$[-P,@ O @0ps:今天要去移民局办事, 所以文章写的很仓促. 大部分代码都没有实验, 请大家帮我找错. 另外, 上次的作业大家在论坛应该 C P3W _5n"~0看到了, 我就不重复答案了, 不知道大家喜欢做这种题, 还是以前那种比较简单的? 今天我们来了解语言本身的最后一个论题:数组. $p N8[(A y4p0  要理解"数组", 这个概念我觉得另一种翻译对学习来说更加容易:"阵列", 没错, 数组就是一个阵列, 一个数据的阵列. 最简单的例子是数据库系统, 假设你要储存20名学生的英语成绩, 如果不是用数组, 你则要创建20个不同的变量, 累死. 数组就是类型相同(重要!)的一组数据(或者n组), 用来储存相关的量, 最简单的数组是一维数组, 我们就先来学习它吧. 爱好者博墅8Y6M [ \/I   什么是一维数组呢? 在3维以下,你可以利用几何知识来理解"维"的概念,一维相当于一条线, 二维则是一个矩形, 三维是一个长方体. 我知道这么讲是很抽象的, 我们先举个一维数组的例子就比较容易了解了. 爱好者博墅 f S W%J%x Z dim a(9) '从零开始 爱好者博墅 t2J({ @:K q m for i=0 to 9 3q p u9| ^)p0a(i)=i '填充每一个数组元素 z ~4z5m v;N ]0u Z1F0msgbox(a(i)) '输出数组元素 3T$_7P(J't&k t v0next 爱好者博墅,{%H)N.q q0m(R"` W   我们可以看到, 定义一个数组的方法和定义一个变量没有什么不同, 同样是使用dim语句. 定义一维数组的方法如下: 爱好者博墅 p1B,L1H*H | } e dim 数组名(元素数量), 这里大家要注意一点, 这里定义的元素数量总是比你要的要少一个, 因为一个数组的起点是0号数据而不是1, 所以大家一定要小心: 你需要10个数据, 就定义"9", 需要100个就定义99, 依此类推. 数组的元素可以看成一个个独立的变量, 你可以像独立的变量那样使用他们. 数组元素的量可能是毫无关系的, 比如第一个数组元素储存你的年龄, 第二个储存今年西瓜的销售量, 但这种做法是不鼓励的, 甚至是不被接受的, 不要这么干, 这样的情况请定义独立的变量. for语句在数组中可算是大显身手, 还记得for吗? 它累加一个变量, 我们可以把这个变量应用在数组中正好用来读取或者填充按照顺序排列的数组元素, 上面就是这样一个例子. 数组其实是很简单的东西(再BASIC语言里面), 数组难的是怎么捣弄这些循环, 让他们按照你的要求运转. 这个等到二维数组再说, 我们先看看如何手工填充数组. O D Y)w k ^(W {0  如果你这个都想不到的话, 那你真是白学了: 爱好者博墅I L.r3v ^ A Z A D dim name(7),str '一共八个学生, str变量是用来把他们储存成一个字符串以便输出 7L]+T r*H x T,M6C0for i=0 to 7 爱好者博墅/|%Bb k @/x-|+H9i name(i)=inputbox("请输入第" & i+1 & "个学生的名字") ,J @ X(k Z [ s,r0str=str & " " & name(i) 8? x A5] A t } l l0next '{ Y ^ |;X7| b ] Q0msgbox(str) 爱好者博墅-S:s n1c S3f)l B   这样我们就有了一个小小的数据库, 它们的数据排列可以看成这样: 爱好者博墅 Y ^ o i y B I   name(0),name(1),name(2).....name(7) U e)b a a0p0  看到了吧, 所以我说我们可以把它看成是"一条线", 等到我们学到了文件操作, 就可以把他们输出到文件中去了. 一维数组有很多用处, 我们来看一下一个复杂的例子. 我们要储存3各学生的名字, 身高, 成绩这三种数据, 由于名字是字符串, 而身高可能是浮点数(带小数点的数), 成绩则可能是整数, 所以我们不能把他们储存在一个数组里面(不要忘记, 数组织只能存储同类的数据), 所以我们要建3个数组, 以下是例程: 4B B5V Y d;?0dim name(2), high(2), mark(2) '定义三个数组分别储存3个人的名字, 身高和得分 [#p G2q J0dim ctr '计数器 U k%[6p(x0for ctr=0 to 2 *x O Z"?*l0name(ctr)=inputbox("请输入第" & ctr+1 & "个学生的姓名") 爱好者博墅 ~!l"I v x G6I D y ~ X j high(ctr)=inputbox("请输入第" & ctr+1 & "个学生的身高") 爱好者博墅 P(b6u Y#M @ @"J \ mark(ctr)=inputbox("请输入第" & ctr+1 & "个学生的得分") 1T c e8K h;} [$I,R;l0next 爱好者博墅.R N+M A | j-n l-|   OK, 我们已经填充好了数据, 现在我们的小小数据库只能按顺序输入, 我们要让它看起来像点样子, 我们来给他设计查询功能: 爱好者博墅 p V b;u'e f%p,H,D '接着上面的程序 ;~+J N#C+^&B u O0dim cname, temp '要查询的名字, 和一个临时变量, 用来储存数据的位置 爱好者博墅 { ?~ A v Y E g cname=inputbox("请输入你要查询的名字:") 爱好者博墅(N B G9H,A @.a for ctr=0 to 2 '遍历所有name数组的成员, 寻找要查询的名字 .w Y b b*|0| [ l }0if name(ctr)=cname then w j [ _$B#Z"Q w l0temp=ctr ' 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 数据位置 爱好者博墅0M G5I/j Q v O U [ exit for '退出循环, 和exit do的用法一样 爱好者博墅.T ? M y s V;p X end if '不要忘了end if 爱好者博墅 x0M_.w f6Z a next )\ F,L S2j L8} t A/u0msgbox("姓名:" & name(temp) & " " & "身高:" & high(temp) & " " & "得分:" & mark(temp)) (h4F Q0x x w s0  嘿嘿, 有意思吧, 其实在这个程序里面, 那个temp变量完全没有必要, 只是为了更清楚地说明问题. 因为当exit for以后ctr变量的值就不会改变, 储存的正好是对应数据在数组中的位置, 写这个temp变量是为了照顾到以后要学C++的朋友(C++可以在for语句里声明新变量, 只在这个for结构中有效, 所以到了外部就不能访问了). 也就是说可以简化成如下: #[/E |2W b G0dim cname .C v A _,a Y!w5\5O6K0cname=inputbox("请输入你要查询的名字:") 爱好者博墅6s$H)W,|;h k for ctr=0 to 2 .x M(o y a5F ~*P0if name(ctr)=cname then exit for '因为只有exit for就不需要块if了 爱好者博墅 D e G"O0t3x$e { next d'm q W5~0msgbox("姓名:" & name(ctr) & " " & "身高:" & high(ctr) & " " & "得分:" & mark(ctr)) 爱好者博墅'Y8q-r4O n   这是最直接的路子. 好好重读一下上面所有的源代码, 然后自己写几个程序, 完全搞清楚一维数组及其应用以后再看后面的二位数组. 二维数组好像是一个一维数组的集合, 就好像"线积成面"一样, 由n各一维数组组成二维数组, 这是初学者比较好理解的办法(比较精确的是用"编号"的概念去理解, 因为4维以上的数组就比较难以用欧几里德几何概念去解释了). 二维数组是很好解释的, 我们来看一下: 爱好者博墅 r d!d g x dim a(2,2) '从零开始, 一共有3 X 3 = 9 个数据 爱好者博墅 _ D y x9x N dim i,j '需要两个计数器 g l6o7B*` Wh0for i=0 to 2 爱好者博墅:`.l D*i5Z;X6g(g for j=0 to 2 '使用嵌套循环 爱好者博墅&t!h$_ B3M;q'w8T W a(i,j)="X" 7j7ag U Wh j f B0next 爱好者博墅-h a,M;u3L3R q next 爱好者博墅'Q c a p H r   我们创建了一个这样的二维数组(那些","是我用来分割元素的,并不存在), 了解二维数组的了吗? 不清楚我们再讲一下 爱好者博墅(Z,|5` g!V#Z.w)f 编号 0 1 2 G q X'L | k;L8X s00 X,X,X :Q%d b ^-`*q01 X,X,X y ` Q/?*r c [02 X,X,X |(f k;? V0  二维数组的看起来是不是就是一个矩形呢?(你在内存中看不到这样的矩形, 只是便于你理解), 每个数据都有编号, 由两个数来定位, 这个很像(非常像)你在国际象棋棋盘上寻找一个格, 我们用类似"C6","A2"这样的"垂直坐标"进行定位, 对, "垂直坐标", 很确切. 我们要使用一个二维数组元素的时候可以和普通变量一样使用, 只要指定数组元素的"定位点"就可以了, 例如 爱好者博墅 T-N | { T d V;Mu ] a(0)(1)=1, b(2)(1)="你好", 诸如此类. 要注意的是二维数组也只能储存类型相同的元素, 而且上标(起点)也从0开始. 计算一个二维数组的元素个数只要把两个下标+1(以得到实际的值)再乘起来就可以了, 非常类似于求一个矩形的面积. 爱好者博墅"Z I V2@ y Y e+`3T   假如需要储存的都是同一类型的数据, 我们就可以用二维数组, 比如要储存5个人的姓名,国籍,民族, 就可以使用二维数据 9[ S-X6n9z I I V0dim info(4,2) '一共五个人, 要储存的数据类型有3项 爱好者博墅 T7l w t Q4g \(f dim i,j 爱好者博墅 E u/y z z for i=0 to 4   b8u t Q$p P H6` R w f0for j=0 to 2 爱好者博墅2i B0O,S%v @ dim opt '定义一个变量用于存储数据项提示 爱好者博墅 a Y K7x-};M-Y select case j '判断应该输入的是什么数据 爱好者博墅 v4P!g5@1t D D ^&H @-y case 0 爱好者博墅&z I d [ H V V p opt="姓名" 爱好者博墅 c1h&Y R%N x0o case 1 爱好者博墅8u({ g Q f G q J#l O5N9H2^ opt="国籍" j P3y*L/H ? ~0case 2 \ u)d v `0opt="民族" 1\+] v&M T9[ g1Y T0end select 爱好者博墅 a0U/` M+^ K.e$D#a info(i,j)=inputbox("请输入第" & i+1 & "个人的" & opt) l v'g2G+f v$t2v }0next )L6y1A T2F a0next 爱好者博墅 N o q,G#Q6h3W c '输出太麻烦了, 我懒得动, 你知道那么回事就行了 9G y h f f `0  这样就不需要定义3个一维数组了. 爱好者博墅 Z.? c0C w   多位数组(三维以上)的定义和使用方法与二维数组一样, 但不太好在欧几里德几何空间里加以解释, 幸好我们并不太常用那么多维的数组.定义一个三位数组
本文档为【VBS教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_019041
暂无简介~
格式:doc
大小:95KB
软件:Word
页数:21
分类:互联网
上传时间:2011-07-10
浏览量:599