VBScript入門
VBScript是在HTML文件中使用的一種VB腳本語言,它是VB的一個子集,可以實現部分VB的功能,從而使HTML語言得到大大的擴展。如果你學習過VB的話,那么VBScript對你來說只是小菜一碟,你只要記住哪些語法命令在“VBScript”中不能使用就行了,而不必費心去記哪些命令可以使用。但是如果你沒學過VB,也不要緊,因為它只不過是VB的一個子集,所要學的東西比VB要相對少一些,我保證,你可以很快學會。
我先來說一下本文的特點:主要是面向初學者,我所介紹的也沒有將VBScript全包括,只是其中一些比較簡單又比較常用的內容。
在學習VBScript之前,我們必須來看一下HTML語言。由于VBScript是建立在HTML這個大的框架的基礎之上的,如果沒有HTML的支持,那么VBScript便無處安置了。
HTML是一門非常容易的語言,因此當你看到那么多漂亮的網頁的時候,千萬不要以為它是多么的難學。它沒有任何分支及循環語句,它所做的只是告訴瀏覽器要怎樣顯示它所指定的內容?,F在有很多網頁制作工具,如Frontpage等,它們大多可以完成你的多數的工作,甚至于即使你完成不懂HTML,也可以制作出相當水準的網頁。就象有人所說的那樣,“ForntPage”是用來制作網頁的,而學習HTML語言則是為了更好地修改網頁的。
在HTML語言中有一個概念是“標志詞”,請先看一個最最簡單的例子:
<HTML>
<HEAD>
<TITLE>于愛武的個人主頁</TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>
在這個例子中,如<HTML>、<HEAD>等這些被“<”、“>”括在中間的稱為標志詞。還有一點就是標志詞一般(個別的除外)都是成對出現的,如<HEAD>和</HEAD>,它的作用是強調一個段落的開始和結束,即強調的是整體概念。下面我們來分析一下上面的例子:
<HTML>和</HTML>總是位于程序的開始和結尾處,用來表示程序的開始和結束,是必不可少的一部分;
<HEAD>和</HEAD>表示程序的頭部,如標題等一些信息便要在頭部中進行設置;
<TITLE>和</TITLE>用來設置程序的標題,你所設置的標題將會出現在瀏覽器的標題欄中。例如我們如果設置了標題為“于愛武的個人主頁”,那么在瀏覽器的標題欄中就會顯示“于愛武的個人主頁-Microsoft Internet Explorer”(以后如果不是特殊說明,均以IE4為瀏覽器進行試驗)。
<BODY>和</BODY>是程序的主體部分,各種圖形,文字的輸入均可在此進行。
如果你使用了FrontPage,那么上述的工作將全部由FrontPage 來替你完成,而不用你寫一句代碼。
要在程序中書寫文字,可以用<P>和</P>標志詞。我們如果在上例的<HEAD>和</HEAD>加入<P>歡迎光臨于愛武的個人主頁</P>,那么當用瀏覽器打開程序時,就會在窗體上出現“歡迎光臨于愛武的個人主頁”字樣。
HTML的強大的生命力還在于它的“超連接”功能。我們經??梢栽诰W上見到,當鼠標移至某個圖形或某串文字時,鼠標圖形會變成一只小手,點下鼠標時,就會打開相應的連接,這就是超連接。它的實現也不難,看看下例就明白了。
<a 表示超連接的地址,而“于愛武的個人主頁”表示在窗體上將顯示的內容。執行本例后,將在窗體上顯示“于愛武的個人主頁”,點擊后將連接到http://yuaiwu.163.net。
再看下例:<a href="mailto:yuaiwu@163.net">寫信給我</a>,其中的mailto表示此超連接為指向一個信箱,即點后可以給yuaiwu@163.net發信。
如果我們要制作文件下載功能,更簡單了,只要把超連接指到某一文件就行了,就如下例所示:
<a href = "sample.zip">下載</a> 這樣,當我們點擊“下載”時,就會把“sample.zip”下載了。
還有最重要的一點就是圖像問題。怎么樣才能給一個頁面加上一個漂亮的背景圖片呢?這就要在<BODY>和</BODY>中指定,如<body background="images/wb02102_.gif">,說明了在當前目錄的images的子目錄下的wb02102_.gif文件將作為該網頁的背景圖片。使用背景圖片應該注意的就是背景的選擇應與前臺內容相協調,不應有喧賓奪主的感覺,也不應太刺眼,給人反感,還有就是圖片尺寸不應太大,如果讓人花上個把小時去等待一個背景,那會讓人討厭的。
如果要在窗體上放置一個圖片,那么可以直接寫成“img src=" wb02102_.gif"”就可以了。
我在此并不想鼓吹VBScript的作用是多么多么的強大,我只想說VBScript確實是一門即簡單又富于創造性的語言。我主張學習VBScript這類語言要一邊上機一邊學習,因為它屬于“所見即所得”一類,因此上機可以大大加深你對它的印象。下面我就再舉一個非常小的例子,讓它來帶你進入VBScript的世界。
<HTML>
<HEAD>
<TITLE>于愛武的個人主頁</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="VBSCRIPT">
<!--
MSGBOX "歡迎來到于愛武的個人主頁"
-->
</SCRIPT>
</BODY>
</HTML>
先看一下程序的執行結果:出現一個對話框,上面顯示一個歡迎信息:"歡迎來到于愛武的個人主頁"。下面再來分析一下程序代碼:
<SCRIPT LANGUAGE="VBSCRIPT">代表VBScript腳本語言的開始,而</SCRIPT>則是表示VBScript的結束。在這其中放置的代碼,即為VBScript語言。還有一點就是在<SCRIPT LANGUAGE="VBSCRIPT">的下面有一行<!,而在</SCRIPT>的上面有一行“-->”,這兩個符號相對應,是注釋的意思。之所以要將源代碼都注釋掉,是因為如果有某些瀏覽器不支持VBScript的話,可以僅僅把它當作注釋,而不會對程序造成什么影響。當然,像IE這樣支持VBScript的瀏覽器則會自動執行它的,而不必擔心它是注釋內容?!?/FONT>MSGBOX”是一個消息框,它后面所跟的內容即為顯示的內容。
說到這里,便應該再來說說FrontPage了。新版的FrontPage98提供了相當多的功能,它不僅可以制作網頁,還可以輕松地插入VBScript腳本語言,在后面我們會經常用到它。其實VBScript不能算是一門真正的語言,到現在為止,VBScript還沒有一個專門的編輯器和調試器,這和VB是沒法相比的,但是因為VBScript是VB的一個子集,因此VBScript的內容在VB下大多都可以通過,所以我們如果要編寫大段的VBScript程序,可以在VB下進行編寫、調試,等通過后再做稍稍的修正,就可以拿到VBScript下使用了。
即然要完整地學習這門VBScript“語言”,就要像介紹其它語言一樣,從它的變量開始。
從某種意義上來講,VBScript只有一種變量類型,即變體。也就是說,一個變量即可以代表數值,也可以用來表示一個字符串。這樣好不好呢?對我們來說是好的,因為它去掉了很多條條框框,可以讓我們無憂無慮的使用變量,但對于程序本身來說,是不利的,因為它大大限制了程序的執行效率(但是我們可以不管它,只要好用就行了)。如果要定義一個變量,可用Dim語句:
Dim a,b
便定義了兩個變量a和b。如果你不愿意寫這句話,也可以在沒有進行定義的前提下直接使用變量,但我們不提倡這樣做,因為一方面現在的編程語言都講究規規矩矩,如果你編的程序拿給別人看,亂七八糟的你也沒面子,另一方面,也就是最重要的,它將給你的調試帶來麻煩。下例就是一個麻煩:
Dim a,b,c
A=10
B=20
C=a+bb
Msgbox c
我的本意是求出a+b的值,但是結果卻是10而不是30,這是因為變量bb因為沒有定義過,因此使用它的默認值0。
有一個辦法可以使你強制定義變量,就是在程序的首部加上一句“Option Explicit”,這樣,如果象上例那樣出現了bb之流沒定義過的變量,程序就會出錯,等待你去修改,而不是僅僅給出一個錯誤的結果。
上面我提到,“從某種意義上來講,VBScript只有一種變量類型”,也就是說,在另一意義上來講,VBScript還可有多種變量類型,不過要使用強制轉換手段。經過相應的轉換函數轉換后,我們可以使用整數、長整數、字符串、單精度、雙精度等類型。
I.CInt()、CLng()、CSng()、CDbl()四個函數是用來把一個變量轉換成整型、長整型、單精度型和雙精度型。比如:Cint("10")=10, CLng("65537")=65537 ,CDbl("3.5")=3.5。這四種類型是有區別的,首先CInt()、CLng()是把變量轉換成整數,其中CInt()是一般的整數,它占兩個字節,而CLng()是把變量轉換成一個長整數,它占用四個字節。用整數可以表示的范圍是-32768~32767,而長整型的范圍可增加到-2147483648~2147483647,怎么樣,好長吧,因此,如果轉換的結果如果不在整型可以表達的范圍之內的時候,就要考慮用長整型。CSng()、CDbl()都是小數轉換函數,它們可以把一個變量轉換成一個小數,差別僅在于精度不同,如果對精度要求不高,可以采用單精度型,如果對精度要求很高,則就要采用雙精度型。不過,它們兩種都能表示出很大范圍的數,如果沒有特殊要求,單精度數據已能滿足我們的需要了。請看下例:
option explicit
Dim a,b,c
A="10"
B="20"
C=clng(a)+clng(b)
Msgbox c
最后輸出結果為30,如果我們將C=clng(a)+clng(b)一句改為C=a+b,那么最后結果應該是1020,因為C的作用是將兩個字符串加在了一起,即為1020;如果改寫為C=clng(a+b)的話,最后結果也是1020,因為它是先把字符串進行相加,然后再把所得到的串轉換成相應的數字。
II.CStr()是將一個變量轉換成一個字符串,如果上例改寫成如下形式:
option explicit
Dim a,b,c
A=10
B=20
C=CStr(a)+CStr(b)
Msgbox c
則最后的結果等于1020,而不是30,為什么呢,因為它是先將數值轉換成字符串,然后再進行相加的。
III.Cbool()是將一個表達式的值轉換成邏輯值“真”或“假”。轉換的規則是如果表達式為0則結果為假,如果為非零則結果為真,因此對于字符串來說,它的結果永遠為真。反過來,如果把邏輯真看成數值的話,那么它等于-1,邏輯假為0??聪铝斜磉_式:
A=10
B=10
C=CBool(a) 結果為True
C=Cbool(CStr(a)) 結果為true
C=Cbool(a)+Cbool(b) 結果為-2
對于前兩個結果,很好理解,但是第三個呢,是因為Cbool(a)和Cbool(b)均為true,再進行加法運算時,自動轉換成整數,即-1和-1進行相加,得出了結果-2
IV.Cdate()函數可以將一個變量轉換成一個日期型變量,如:Cdate("1999-2-25")便是一個日期型結果。轉換的意義在于我們可以正確地判斷兩個日期的先后順序,對于兩個字符串“1999-2-2”和“1999-2-3”來說,是“1999-2-2”<“1999-2-3”,而當轉換后變成了Cdate(“1999-2-2”)>Cdate(“1999-2-3”),道理很明顯,2號是在3號的前面。
V.以上介紹了一些轉換函數,也提到了VBScript中的數據類型,其中最重要的當屬字符串型了。HTML的大部分任務是顯示指定內容的字符串,由于VBScript的加入,更使得字符串處理功能加倍“強壯”。通過VBScript函數,我們可以對字符串進行載取、相加等操作。
Left、Right是對字符串進行左截或右截。請看示例:
A="123456789"
B=left(a,3)
Msgbox b
C=right(a,3)
Msgbox c
這樣得出的結果是b="123",c="789"。
如果我們要載取一個字符串中間的幾個字符,可以用Mid函數,如C=mid(a,4,3)得出的結果是c="456"。
求一個字符串的長度用的是Len函數,比如說Len("1234567")=7。
VI.數組:
VBScript也象其它編程語言一樣,提供了數組操作。定義一個數組的格式如下:
Dim a(10)
即定義了一個數組,數組的名稱是a ,而它的元素是從0到10 共11個。下面我們來給這11個元素分別賦一個值:
For I=0 to 10
a(I)=I
Next
11個元素的值分別是0,1,… ,10。如果想要定義其它類型的數組,按照上面的格式做稍微的修改就可以了。
2.上面介紹的是VBScript的變量,我們必須結合其它內容才能充分學好它。下面我們來說一下VBScript中又一個要點:分支與循環。
I.分支指的是If … Then… Else…End if結構的條件判斷語句。
如下面的程序:
a =inputbox("你今年多大了")
if Cint(a)<20 then
msgbox "你是一個小同志"
else
msgbox "你不是一個小同志"
end if
上例中用到了一個函數InputBox(),它的作用是接收從鍵盤上輸入的字符串,比如上例我如果輸入20,則a="20"。此例的思路是由用戶輸入一個年齡值,然后判斷它的大小。如果它小于20,則輸出"你是一個小同志",否則輸出"你不是一個小同志"。
此例如果簡化成下面的形式:
if Cint(a)<20 then
msgbox "你是一個小同志"
end if
則只對輸入值小于20的時候有響應,而對“否則”的內容不做回答,要是你輸入的年齡值是40,你會發現程序根本就不理你。還可以進一步簡化成
a =inputbox("你今年多大了")
if Cint(a)<20 then msgbox "你是一個小同志"
而將end if省略。但是由于這種寫法不便于閱讀,因此我希望大家能夠按照要求寫好每一步。
再對上例進行一下改造:
a =inputbox("你今年多大了")
if Cint(a)<10 then
msgbox "你是一個小孩子"elseif cint(a)<20 then
msgbox "你是一個小同志"
elseif cint(a)<40 then
msgbox "你在青年"elseif cint(a)<50 then
msgbox "你在中年"
else
msgbox "你已上了年紀"end if
還有一類分支結構是Select … Case… End Select。舉個例子來說明一下:我們要根據輸入的數字來確定現在是幾月份。
Dim a,mon
a =inputbox("現在是幾月份?")
select case cint(a)
case 1
mon="一"
case 2
mon="二"
case 3
mon="三"
case 4
mon="四"
case 5
mon="五"
case 6
mon="六"
case 7
mon="七"
case 8
mon="八"
case 9
mon="九"
case 10
mon="十"
case 11
mon="十一"
case 12
mon="十二"
end select
msgbox "現在是" + mon +"月份"
這個例子如果也用If … Then 來完成,恐怕要多寫不少的代碼吧!Select結構還有一種用法,請看下例:
Dim a,quarter
a =inputbox("現在是幾月份?")
select case cint(a)
case 1,2,3
quarter="一"
case 4,5,6
quarter="二"
case 7,8,9
quarter="三"
case 10,11,12
quarter="四"
end select
msgbox "現在是第" + quarter +"季度"
這個例子中,我們可以根據輸入的月份來確定現在是處在第幾個季度。
If分支和Select分支都是十分有用的,我們可以根據不同的需要來選用不同的方法,這樣才能充分發揮VBScript 的作用。
II.For … Next循環:
VBScript的循環主要有For … Next循環和Do While … Loop循環兩種,我們先來講一下For … Next循環。請看下例:
dim i,sum
for i=1 to 100
sum=sum+i
next
msgbox sum
此例是計算從
1到100這100個數的和,結果是5050,我們從小就在珠算上玩這個游戲。如果要計算從1到1000的和,很簡單,只要把上例中的100改為1000就行了。請再看一個例子:dim i,sum
for i=1 to 100 step 2
sum=sum+inext
msgbox sum
這個例子是用來計算從1到100之間的奇數的和。如果要計算從1到100間偶數的和,只要把循環條件改成for i=2 to 100 step 2就可以了。
Step為步長之意,即規定循環變量每變化一次時的增量值,如果不寫,則默認為1。我們甚至可以把Step的值定為負值,如下例,依然可以實現1至100間偶數的求和工作:
dim i,sum
for i=100 to 1 step -2
sum=sum+inext
msgbox sum
III.Do While … Loop循環:
For循環是規定了循環的次數進行循環,而Do While … Loop循環則是當條件滿足時進行循環,否則便跳出循環,不象For循環那樣嚴格地限定循環次數。
還以計算1到100這100個數的和為例,改用Do While … Loop循環表示為:
Dim I,sum
I=0
Do while I<100
I=I+1
Sum=sum+I
Loop
此例的結果是正確的。但是如果我們把上述循環中的兩行的位置變換一下,成為:
Do while I<100
Sum=sum+I
I=I+1
Loop
得出的結果將是4950而不是5050。問題出在哪了呢?就在循環的判斷條件上。循環剛一開始的時候,I=0,sum=sum+I=0,當I=99時,sum=sum+99,然后I=I+1=100,已經不再滿足循環的條件,因此就退出了循環。也就是說,同樣循環了100次,但是執行的是從0到99的累加,而不是從1到100的累加。
兩種循環方式同樣是各有所長的,我們也應該根據實際情況來決定用哪種方式,千萬不能生搬硬套。
3.VBScript的自定義函數:
自定義函數包括子程序和函數兩部分,它們兩者的區別在于函數有返回值,而子程序沒有。從本質上來說,兩者沒有太大的區別。
我們先來舉一個例子來說明一下子程序:
<Script language="vbscript">
<!--
option explicit
dim a
sub age()
a=inputbox("請輸入你的年齡:")
end sub
age
msgbox a
-->
</script>
此例把輸入年齡這個功能做成一個子程序,在主程序里調用,調用的格式也很簡單,只要寫出子程序的名字即可,就象調用一個內部命令一樣省事。
函數和子程序類似,只是它能夠返回一個值。我們來編一個求兩個數中較大值的函數:
dim a,b,c
a=10
b=20
c=max(a,b)
msgbox c
function max(x,y)
if x<y then
max=y
else
max=x
end if
end function
此例中的max()函數即是我們自己編寫的求較大值的函數,它里邊有兩個參數,使用時只要放入兩個參數就可以了。還有一點要注意的是函數的返回格式:我們的函數名是max,最后只要寫上max=…就可給這個函數一個返回值了。
到此,我們介紹了VBScript的大部分的語法內容,這部分雖然沒有什么意思,但是它是你的其它工作的前提,如果沒有堅實的語法基礎,其它什么工作都做不好,希望大家能夠多多地練習。
VB是一門面向對象的程序語言,VBScript也不例外(起碼它用到了對象的概念)。面向對象給編程帶來了很多的益處,這在VBScript中也得到了體現。
1.象VB一樣,我們可以在窗體上加上命令按鈕、文本框等控件(對象),如果你使用的是FrontPage,那你的工作量很小,只要按照所見即所得的風格將控件擺放在正確的位置就可以了,如果你想用記事本等編輯器直接編輯網頁,那你可要費一番力氣。
在介紹其它對象之前,我先來說一個比較特殊的對象:定時器。它的作用是每隔一段時間就去執行一件事情,如果你學習過VB,這將是非常容易理解的。定時器的屬性主要是:Enabled、Interval,Enabled表示它是否可用,而Interval是指每隔多長時間事件發生一次,它的單位是1/1000秒。
如果要加入一個定時器,最好選用FrontPage。在菜單中選擇Insert-Advanced-ActiveX Control后,就會彈出一個對話框,在下拉菜單中就可以找到Timer Object。有一點千萬不能忘記,就是要給它取一個名字,否則你是無法使用的。你還可以點擊屬性鈕對其Enabled、Interval屬性進行設置?,F在我們來加入一個名字為"tmrLbl"時間間隔為200毫秒的定時器,在HTML的源代碼中將會出現下列代碼:
<object ID="tmrLbl" WIDTH="39" HEIGHT="39"
CLASSID="CLSID:59CCB4A0-727D-11CF-AC36-00AA00A47DD2">
<param name="_ExtentX" value="2064">
<param name="_ExtentY" value="2302">
<param name="Interval" value="200">
</object>
只要看一眼,就會知道用手工編寫的難度了。
現在僅僅是有了一個定時器,我們還必須對它的事件進行編碼,才能使用它。定時器有一個事件叫作"Timer"。每隔一段時間,就會把這個事件中的事情執行一遍。我們可以對它編程如下:
<script LANGUAGE="VBScript">
<!--
Sub tmrLbl_Timer()
Msgbox "歡迎!"
end sub
-->
</script>
請稍等片刻,先把定時器的Interval屬性的值調的大一些,2000或更大,否則你會以為是病毒發作了。此程序可以每隔一段時間內出現一個對話框,顯示“歡迎”字樣,如果你把時間設為200,那么你可能還來不及反應,就會出現下一個對話框,結果是你不能關閉對話框,瀏覽器也不能關上,因此有必要把時間間隔調的大一些,使你有時間去結束它。
用和加入定時器同樣的方法來加入兩個標簽(Microsoft Forms 2.0 Label),并取名為lblYu0和lblYu1,它們的字體可以設置的大一些,這樣以便于觀察,將將兩個標簽的Caption屬性設為"Y"和"U"(設置方法同定時器控件)。然后再對定時器重新進行編程:
<script LANGUAGE="VBScript">
<!--
Sub tmrLbl_Timer()
lblyu0.forecolor=rgb(255*rnd,255*rnd,255*rnd)
lblyu1.forecolor=rgb(255*rnd,255*rnd,255*rnd)
end sub
-->
</script>
先看一下效果,嗯,不錯!然后我們再來分析一下這段程序。我們用到了標簽控件的前景顏色屬性:ForeColor,只要對它進行改變,就可以改變標簽的顏色,正如你所見。
RGB()是一個顏色函數,它有三個參數,分別表示紅、綠、藍三色的比例,0表示沒有,255表示全色。要表示紅色可寫成RGB(255,0,0),即將紅色的比例置為100%,而其它兩種顏色均沒有。那么要表示白色呢,即為RGB(255,255,255),黑色呢,讀者可以自己考慮一下。
還有一個是“Rnd”,它表示產生一個從0至1之間的隨機數,如果用Rnd*255,就可以表示出從0到255之間的隨機數了。
因此上例可以顯示出顏色隨機變化的標簽了。如果你有耐心,可以調試出更加漂亮的標簽來。
3.Window
“窗體”(Window),即瀏覽器打開的窗口。它的對象名是Window ,它的一個重要的屬性就是Status,也就是瀏覽器底下的狀態條,這樣我們就可以讓狀態條顯示我們自己的信息了。
如果我們這樣寫:Window.status="于愛武的個人主頁",那么窗體的狀態條上就會顯示相就的字符串。
Window對象有兩個事件OnLoad 和OnUnLoad。加入以下代碼:
<Script language="vbscript">
<!--
option explicit
sub window_onload()
msgbox "歡迎光臨"
end sub
sub window_onunload()
msgbox "歡迎再來"
end sub
-->
</script>
這樣,每當打開這個網頁的時候,就會顯示“歡迎光臨”的提示信息,而當退出這個頁面的時候,則會顯示“歡迎再來”的告別語。
在上面介紹變量的類型的時候提到了VBScript可以定義數組,在這里你將看到數組的類型甚至可以是控件。就是標簽為例,我們在窗體上來建立10個標簽,分別命令名lblYu0至lblYu9,它們的Caption屬性分別設為“歡”、“迎”、“光”、“臨”、“我”、“的”、“個”、“人”、“主”、“頁”,然后就向上面的例子一樣,再加入一個定時器,并對定時器進行編碼:
<script LANGUAGE="VBScript">
<!--
Dim a(9)
Set a(0)=lblYu0
… (省略)
Set a(9)=lblYu9
Sub tmrLbl_Timer()
For I=0 to 9
A(I).forecolor=rgb(255*rnd,255*rnd,255*rnd)
Next
end sub
-->
</script>
當然,如果不用數組,也完全可以實現,但是要多寫很多代碼,而且不便調試。
六.總結
我在上面曾多次提到FrontPage的使用,的確,它是個不錯的東東,我們可用它輕松的插入控件,并可以實現VBScript腳本語言的編寫,如果多多練習,肯定會使你達到事半功倍的效果。
我們已經把VBScript的內容大致的瀏覽了一遍,這些已經可以讓你在網上小試身手了。當然如果你想成為真正的高手,這點是不夠的,還要繼續“深造”才行。
原文轉自:http://www.anti-gravitydesign.com