標籤

系統管理 (12) 資料結構 (6) 控制結構 (4) 字串處理 (2)
顯示具有 控制結構 標籤的文章。 顯示所有文章
顯示具有 控制結構 標籤的文章。 顯示所有文章

20130729

VBScript 語法彙總

VBScript 語法彙總

H.1 VBScript

VBScript 是微軟公司程式語言 Visual Basic (VB) 家族的一個新的成員,對
於 active scripting 提供多樣的環境,包括客戶端的 IE 瀏覽器以及伺服器
端的 PWS、IIS 伺服器。

有關 VBScript 在 HTML 裡的使用方法,您可選按瀏覽器的的功能

              檔案 (F) | 開啟舊檔 (O)...

選 vbstutor.htm 網頁,該網頁提供簡要的說明。

  C:\Program Files\WEBSVR\DOCS\ASPDocs\ref\vbs\vbscript\vbstutor.htm

有關 VBScript 的語法 (Language Reference),可參考 vbstoc.htm 網頁。

  C:\Program Files\WEBSVR\DOCS\ASPDocs\ref\vbs\vbscript\vbstoc.htm

本小節對 VBScript 只提供彙總性之說明。

在說明 VBScript 語法之前先對於撰寫 VBScript 程式的一些習慣稍作說明。

● 常數命名習慣

   以大寫字母命名,字組間以底線隔開。例如:
   LINE_COUNT、MAX_NUMBER 等。

● 變數命名習慣

   變數名稱前加上表示資料型態的字頭,例如:
   intQuantity 表示整數數量。
   lngDistance 表示長整數距離。
   strMyName   表示我的名子識字串。

● 文件說明
   函數或程序之前應該有簡短的說明。



H.2 資料型態


VBScript 只有一種 Variant 資料型態。依使用的情形,可包含各種資料,稱
為 Variant 型態的次型態 (subtype)。函數所傳回來的也是 Variant 型態。
VBScript 型態 Variant 的次型態如表 H.1 所示。您可使用 VarType() 函
數傳回指定變數的次型態。


                表 H.1  型態 Variant 的次型態

      次型態    說明
      --------  ----------------------------------------------------
      Empty     沒設定初值。數值變數值為 0,字串變數值為空字串。
      Null      不含正確資料。
      Boolean   包含 True 或 False。
      Byte      包含整數 0 至 255。
      Integer   包含整數 -32768 至 32767。
      Currency  包含整數 -922,337,203,685,477.5808
                至 922,337,203,685,477.5807。
      Long      包含整數 -2,147,483,648 至 2,147,483,647。
      Single    包含單精度值。
                負值 -3.402823E38 至 -1.402823E-45。
                正值 1.401298E-45 至 3.402823E38。
      Double    包含雙精度值。負值
                -1.79769313486232E308 至 -4.94065645841247E-324。
                正值 4.94065645841247E-324 至 1.79769313486232E308。
      Date      January 1, 100 至 December 31, 9999。
      Time      January 1, 100 至 December 31, 9999。
      String    包含變長字串,最長可達 2 百萬字元。
      Object    包含物件。
      Error     包含錯誤編號。


H.3 變數


變數可存放數值,該數值可隨您的意思改變,故稱為變數。您可使用 Dim 敘
述明確宣告,變數名稱之間以逗號隔開。例如:

          Dim A, B, C, D

宣告 A、B、C、D 為變數。變數名稱必須以 alphabetic character 英文字母
起頭,不能包含句點 (period),不能超過 255 個字元。變數值可用指定敘述
指定,例如:

          A=2
          B=5

陣列變數也使用 Dim 宣告,但在變數名稱之後加上一組小括號,以說明元素
個數,例如:

          Dim K(3)

宣告 K 是一個陣列變數,包含 K(0)、K(1)、K(2)、K(3) 共四個元素。K 稱
為一維陣列,因為它只有一個索引值,0 至 3。陣列若有兩個索引值稱為二維
陣列,例如:

          Dim M(2,2)

宣告 M 是一個二維陣列變數,包含 M(0,0)、M(0,1)、M(0,2)、M(1,0)、
M(1,1)、M(1,2)、M(2,0)、M(2,1)、M(2,2) 共九個元素。陣列變數元素值也
是用指定的,例如:

          K(0)=10
          M(1,2)=12


H.4 常數


您可使用 Const 敘述宣告常數,例如:

          Const MYSTRING, vbMyAge, CUTOFFDATE
          MYSTRING="這是我指定的字串"
          vbMyAge=33
          CUTOFFDATE=#12-31-99#

常數的名稱最好都使用大寫英文字母表示,或使用 vb 起頭的名稱,以便和變
數區隔開來,不過 VBScript 許多已經定義好的常數都以 vb 起頭,因此您自
己所定義的常數最好選用大寫英文字母表示。


以下說明 VBScript 已經定義好的常數。

● 色碼常數

   常數名稱  常數值        說明
   --------  ------------  --------
   vbBlack   &h00          黑色
   vbRed     &hFF          紅色
   vbGreen   &hFF00        綠色
   vbYellow  &hFFFF        黃色
   vbBlue    &hFF0000      藍色
   vbMagenta &hFF00FF      紫紅色
   vbCyan    &hFFFF00      紅色
   vbWhite   &hFFFFFF      白色

● 比較常數

   常數名稱            常數值  說明
   -----------------   ------  --------------------
   vbBinaryCompare       0     執行二進位比較
   vbTextCompare         1     執行文字比較
   vbDatabaseCompare     2     執行資料庫中資料比較

● 日期與時間常數

   常數名稱             常數值  說明
   --------             ------  ----------------------------
   vbSunday               1     星期日
   vbMonday               2     星期一
   vbTuesday              3     星期二
   vbWednesday            4     星期三
   vbThursday             5     星期四
   vbFriday               6     星期五
   vbSaturday             7     星期六
   vbFirstJan1            1     使用包含元月一日的星期
   vbFirstFourDays        2     使用本年第一個最少四天的星期
   vbFirstFullWeek        3     使用本年第一個完整的星期
   vbUseSystem            0     使用系統的日期與時間
   vbUseSystemDayOfWeek   0     使用系統的星期日期

● 日期格式常數

   常數名稱             常數值  說明
   --------------       ------  --------------------------------
   vbGeneralDate          0     顯示日期與時間,格式依系統設定。
   vbLongDate             1     以長格式顯示日期。
   vbShortDate            2     以短格式顯示日期。
   vbLongTime             3     以長格式顯示時間。
   vbShortTime            4     以短格式顯示時間。

● 檔案輸入輸出常數

   常數名稱             常數值  說明
   --------------       ------  ------------------
   ForReading             1     開啟一個唯讀的檔案
   ForWriting             2     開啟一個寫入的檔案
   ForAppending           8     開啟一個附加的檔案

● 其他常數

   常數名稱             常數值      說明
   --------------       ----------  ------------
   vbObjectError        &h80040000  物件錯誤編號

● MsgBox 常數

   常數名稱             常數值  說明
   --------------       ------  -----------------------------
   vbOKOnly               0     只顯示 OK 鈕
   vbOKCancel             1     顯示 OK 及 Cancel 鈕
   vbAbortRetryIgnore     2     顯示 Abort、Retry、Ignore 鈕
   vbYesNoCancel          3     顯示 Yes、No、Cancel 鈕
   vbYesNo                4     顯示 Yes、No 鈕
   vbRetryCancel          5     顯示 Retry、Cancel 鈕
   vbCritical            16     顯示 Critical Message 圖示
   vbQuestion            32     顯示 Warning Query 圖示
   vbExclamation         48     顯示 Warning Message 圖示
   vbInformation         64     顯示 Information Message 圖示
   vbDefaultButton1       0     預設第一個按鈕
   vbDefaultButton2     256     預設第二個按鈕
   vbDefaultButton3     512     預設第三個按鈕
   vbDefaultButton4     768     預設第四個按鈕
   vbApplicationModal     0     應用程式模式
   vbSystemModal       4096     系統模式

   下面常數用於 MsgBox() 函數用於識別使用者選用那一個按鈕。

   常數名稱       常數值  說明
   ------------   ------  -----------------
   vbOK             1     OK 按鈕被按下
   vbCancel         2     Cancel 按鈕被按下
   vbAbort          3     Abort 按鈕被按下
   vbRetry          4     Retry 按鈕被按下
   vbIgnore         5     Ignore 按鈕被按下
   vbYes            6     Yes 按鈕被按下
   vbNo             7     No 按鈕被按下

● 字串常數

   常數名稱       常數值      說明
   ------------   ------      ----------------------------------
   vbCr           Chr(13)     Carriage Return 即 Enter 鍵
   vbCrLf         Chr(13)     Carriage Return 及 Linefeed 鍵
                  & Chr(10)
   vbFormFeed     Chr(10)     Form feed,微軟 Windows 系統不適用
   vbLf           Chr(10)     Line feed
   vbNewLine      Chr(13)     換列,Windows使用Chr(13)&Chr(10),
                  & Chr(10)   UNIX系統使用Chr(10)
                  或 Chr(10)
   vbNullChar     Chr(0)      字元值為 0
   vbNullString   字串值0     與空白字串(字串長度為0)不同
   vbTab          Chr(9)      Tab 鍵
   vbVerticalTab  Chr(11)     Vertical Tab 鍵

● Tristate常數

   常數名稱           常數值     說明
   -------------      ------     ----------
   TristateTrue        -1        True
   TristateFalse        0        False
   TristateUseDefault  -2        使用預設值

● VarType 常數

   常數名稱       常數值   說明
   -------------  ------   ------------------
   vbEmpty           0     無初值設定 (預設)
   vbNull            1     不含正確值
   vbInteger         2     Integer
   vbLong            3     Long
   vbSingle          4     Single
   vbDouble          5     Double
   vbCurrency        6     Currency
   vbDate            7     Date
   vbString          8     String
   vbObject          9     Object
   vbError          10     Error
   vbBoolean        11     Boolean
   vbVariant        12     Variant
   vbDataObject     13     Data Access object
   vbDecimal        14     Decimal
   vbByte           17     Byte
   vbArray        8192     Array


H.5 運算子


● 算術運算子

   ^
     次方。例如 Y=A^2。A 的平方值取代原來 Y 值。
   -
     單減。例如 Y=-A。將 A 值變負號後取代原來 Y 值。
   *
     乘。例如 Y=A*B。將 A 值乘於 B 值後取代原來 Y 值。
   /
     除。例如 Y=A/B。將 A 值除於 B 值後取代原來 Y 值。
   \
     整數除法。例如 Y=A/B。將 A 值除於 B 值後取整數取代原來 Y 值。
   Mod
     餘數除法。例如 Y=A\B。將 A 值除於 B 值後取餘數取代原來 Y 值。
   +
     相加。例如 Y=A+B。將 A 值與 B 值相加後取代原來 Y 值。
   -
     相減。例如 Y=A-B。將 A 值減去 B 值後取代原來 Y 值。
   &
     字串相連結。例如 Y=A&B。將 A 值與 B 值相連結後取代原來 Y 值。

● 比較運算子

   =
     相等。 If A=B Then C=True。
   <>
     不相等。If A<>B Then C=False。
   <
     小於。If A<B Then C=A。
   >
     大於。If A>B Then C=B。
   <=
     不大於。If A<=B Then C=True。
   >=
     不小於。If A>=B Then C=False。
   is
     物件相當。SET A=B。If A is B Then C=True。則 C 值為 True。

● 邏輯運算子

   Not
     邏輯 NOT 運算。例如 NOT A。
   And
     邏輯 AND 運算。例如 A And B。
   Or
     邏輯 OR  運算。例如 A Or B。
   Xor
     邏輯 XOR 運算。例如 A Xor B。
   Eqv
     邏輯 EQV 運算。例如 A Eqv B。
   Imp
     邏輯 IMP 運算。例如 A Imp B。


   邏輯運算的結果如下表所示。F 表 False,T 表 True。

            A   B  | Not A    And   Or   Xor   Eqv    Imp
           --------+--------------------------------------
            F   F  |   T       F    F     T     T      T
            F   T  |   T       F    T     F     F      T
            T   F  |   F       F    T     F     F      F
            T   T  |   F       T    T     T     T      T


H.6 敘述

  [Call] name [argumentlist]
    將執行控制權轉至 name 程序或函數。如 Call MyProc(1)。

  Dim varname[([subscripts])][, varname[([subscripts])]] . . .
    宣告變數 varname 並配置記憶體空間。

  Do [{While | Until} condition]
      [statements]
      [Exit Do]
      [statements]
  Loop
  或
  Do
      [statements]
      [Exit Do]
      [statements]
  Loop [{While | Until} condition]
  當條件 condition 的值為 True 時重複執行 Do 與 Loop 之間的區塊敘述。

  Erase array
    對於固定長度的陣列 array 重新建立初值,對於動態陣列 array 則取消
    原配置的記憶體。

  Exit Do
  Exit For
  Exit Function
  Exit Sub
    從 Do、For、Function、Sub 等的區塊跳出。

  For counter = start To end [Step step]
      [statements]
      [Exit For]
      [statements]
  Next
    重複執行 For 與 Next 間的敘述指定次數。從 start 開始,到 end 結
    束,每一迴圈增加 step,即 start、start+step、start+2*step、...、
    end。若省略 step 則預設為 1。

  For Each element In group
      [statements]
      [Exit For]
      [statements]
  Next [element]
    在陣列或類集 (collection) 裡重複執行 For 與 Next 間的敘述。

  [Public | Private] Function name [(arglist)]
      [statements]
      [name = expression]
      [Exit Function]
      [statements]
      [name = expression]
  End Function
    宣告構成 Function 本體的函數名稱、引數、執行碼。
    arglist 引數的語法如下:
    [ByVal | ByRef] varname[( )]
      ByVal 表傳值呼叫,ByRef 表傳址呼叫。
      varname 為引數變數名稱。

  If condition Then
      [statements]
  [ElseIf condition-n Then
      [elseifstatements]] . . .
  [Else
      [elsestatements]]
  End If
    有條件的執行指定的一組敘述。
    若 condition 值為 True 則執行 statements 敘述。
    若 condition-n 值為 True 則執行 slesifstatements 敘述。
    ...
    若以上的 condition 值皆為 False 則執行 elsestatements 敘述。

  On Error Resume Next
    啟動錯誤處理程序並指定程序中下一個要執行的程式碼位置。

  Option Explicit
    使用於文稿層次,用於強迫所有變數須明顯宣告。

  Private varname[([subscripts])][, varname[([subscripts])]] . . .
    使用於文稿層次,宣告變數 varname 為私用性質。

  Public varname[([subscripts])][, varname[([subscripts])]] . . .
    使用於文稿層次,宣告變數 varname 為公用性質。

  Randomize [number]
    設定隨機數產生器初值。引數 number 可為任何的數值運算式。

  ReDim [Preserve] varname(subscripts) [, varname(subscripts)] . . .
    使用於程序層次,用於宣告動態陣列變數 varname 並配置記憶體。

  Rem comment
  或
  ' comment
    註解。

  Select Case testexpression
      [Case expressionlist-n
          [statements-n]] . . .
      [Case Else expressionlist-n
          [elsestatements-n]]
  End Select
    若 testexpression 值等於 expressionlist-n 中的一個值則執行
    statements-n 敘述。若都不是則執行 elsestatements-n 敘述。

  Set objectvar = {objectexpression | Nothing}
    設定物件變數 objectvar 的值為 objectexpression 或 Nothing。

  [Public | Private] Sub name [(arglist)]
      [statements]
      [Exit Sub]
      [statements]
  End Sub
    宣告構成 Sub 本體的程序名稱、引數、執行碼。
    arglist 引數的語法如下:
    [ByVal | ByRef] varname[( )]
      ByVal 表傳值呼叫,ByRef 表傳址呼叫。
      varname 為引數變數名稱。

  While condition
      [statements]
  Wend
    當條件 condition 的值為 True 時重複執行 statements 敘述。


H.7 函數

以下依英文字母順序列出 VBScript 的函數:

  Abs(number)
    傳回 number 的絕對值。
    若 number 為 Null 則傳回 Null。
    若 number 為沒有初值的變數則傳回 0。
    Abs(2) 與 Abs(-2) 均傳回 2。
  Array(arglist)
    引數 arglist 為以逗號隔開的數值,指定為陣列元素值。
    若省略 arglist 則建立一個 0 元素的陣列。下例 B 值為 30。
    Dim A
    A=Array(10,20,30)
    B=A(2)
  Asc(string)
    傳回 string 字串第一個字元的 ANSI 的 ASCII 碼。
    若 string 為空字串則產生執行時期錯誤。
  Atn(number)
    傳回 number 的正切值。
  CBool(expression)
    傳回 expression 的布林值。
  CByte(expression)
    傳回 expression 的位元組值。
  CCur(expression)
    傳回 expression 的 Currency 值。
  CDate(date)
    傳回 date 的日期。
  CDbl(expression)
    傳回 expression 的雙精度數值。
  Chr(charcode)
    傳回 charcode 相對應 ANSI 的 ASCII 碼字元。
  CInt(expression)
    傳回 expression 的整數值。
  CLng(expression)
    傳回 expression 的長整數值。
  Cos(number)
    傳回 number 的餘弦值。number 以 radians 計值。
  CreateObject(class)
    建立並傳回一個 class 物件。如:
    Dim ExcelSheet
    Set ExcelSheet = CreateObject("Excel.Sheet")
  CSng(expression)
    傳回 expression 的單精度值。
  CStr(expression)
    傳回 expression 的字串值。
  Date
    傳回目前的系統日期。
  DateAdd(interval, number, date)
    傳回一個 date 加上 number 個 interval 後的日期。下例為 99 年
    1 月 1 日加上一個月的日期。
    NewDate = DateAdd("m", 1, "1-Jan-99")
  DateDiff(interval, date1, date2 [,firstdayofweek [,firstweekofyear]])
    傳回兩個日期間的 interval 個數。
  DatePart(interval, date [,firstdayofweek [,firstweekofyear]])
    傳回 date 的 interval 個數。
  DateSerial(year, month, day)
    將年year、月month、日day等轉為日期型態並傳回。
  DateValue(date)
    傳回 date 的日期型態值。
  Day(date)
    傳回 date 日期中日數的整數值(1-31)。
  Exp(number)
    傳回 e 的 number 次方值。
    e 為自然對數基底(the base of natural logarithms)。
  Filter(InputString, Value [, Include [, Compare]])
    傳回 Value 在 InputString 一維陣列搜尋的結果。
  Fix(number)
    傳回 number 的整數值。
  FormatCurrency(Expression [,NumDigitsAfterDecimal
    [,IncludeLeadingDigit [,UserParentsForNegativeNumbers
    [,GroupDigits ]]]])
    傳回使用定義於系統控制盤(system control panel)中的currency符號
    所格式化後的currency值。
  FormatDateTime(Date [,NamedFormat])
    傳回格式化後的日期或時間。
  FormatNumber(Expression [,NumDigitsAfterDecimal
    [,IncludeLeadingDigit [,UserParentsForNegativeNumbers
    [,GroupDigits]]]])
    傳回格式化後的數字。
  FormatPercent(Expression [,NumDigitsAfterDecimal
    [,IncludeLeadingDigit [,UserParentsForNegativeNumbers
    [,GroupDigits]]]])
    傳回格式化後的百分比,尾端跟隨著 %。
  GetObject([pathname] [,class])
    從指定檔 pathname 傳回一個 ActiveX 物件。
  Hex(number)
    傳回 number 所代表的16進位值的字串。
  Hour(time)
    傳回 time 時間中的小時整數值(0-23)。
  InputBox(prompt [,title] [,default]
    [,xpos] [,ypos] [,helpfile, context])
    顯示一個對話框,讓使用者輸入資料,並傳回資料內容。
  InStr([start,] string1, string2 [,compare])
    傳回子字串 string2 在字串 string1 中的啟始位置,若找不到該子字串
    ,則傳回 0。
  InStrRev(string1, string2 [,start [,compare]])
    傳回子字串 string2 在字串 string1 中從尾端算起的位置,若找不到該
    子字串,則傳回 0。
  Int(number)
    傳回小於或等於 number 的整數值。
  IsArray(varname)
    若 varname 為陣列則傳回 True,否則傳回 False。
  IsDate(expression)
    若 expression 為日期則傳回 True,否則傳回 False。
  IsEmpty(expression)
    若 expression 為 empty 則傳回 True,否則傳回 False。
  IsNull(expression)
    若 expression 為 Null 則傳回 True,否則傳回 False。
  IsNumeric(expression)
    若 expression 為數字則傳回 True,否則傳回 False。
  IsObject(expression)
    若 expression 為物件則傳回 True,否則傳回 False。
  Join(list [, delimiter])
    傳回一維陣列 list 中每一個元素字串的連結字串,若省略 delimiter
    則以空白隔開。
  LBound(arrayname [, dimension])
    傳回 arrayname 第 dimension 維的最小索引值。若省略 dimension
    則預設為 1。
  LCase(string)
    將 string 轉換為英文小寫字母。
  Left(string, length)
    傳回 string 字串最左邊 length 個字元。
  Len(string | varname)
    傳回 string 字串或 varname 字串變數的長度。
  LoadPicture(picturename)
    傳回從 picturename 檔案載入的物件。
  Log(number)
    傳回 number 數值的對數值。
  LTrim(string)
    將 string 字串前的空白去除。
  Mid(string, start [, length])
    傳回 string 字串中由 start 開始,長度 length 的子字串。
  Minute(time)
    傳回 time 時間中的分鐘數值(0-59)。
  Month(date)
    傳回 date 日期中的月份數值(1-12)。
  MonthName(month [, abbreviate])
    傳回 month 數值相對應的月份名稱。若 abbreviate 值為 True 則傳回
    月份簡稱。
  MsgBox(prompt [, buttons] [, title] [, helpfile, context])
    顯示一個對話框,當用戶選擇適當按鈕後,將該按鈕值傳回。
  Now
    傳回現在的系統時間。
  Oct(number)
    將 number 數值轉為八進位後傳回。
  Replace(expression,find,replacewith [,start [,count [,compare]]])
    在 expression 字串中找到 find 子字串後以 replacewith 字串取代後
    傳回。
  Right(string, length)
    傳回 string 字串最右邊的 length 個字元。
  Rnd[(number)]
    傳回一個介於 0 (含) 至 1 (不含) 間的隨機數。
  Round(expression [, numdecimalplaces])
    將 expression 第 numdecimalplaces 為小數四捨五入後傳回。
  RTrim(string)
    去除 string 字串尾部的空白並傳回。
  ScriptEngine()
    傳回使用中的文稿語言字串。VBScript 或 JScript 或 VBA。
  ScriptEngineBuildVersion()
    傳回使用中的文稿語言 build 版本。
  ScriptEngineMajorVersion()
    傳回使用中的文稿語言主版本。
  ScriptEngineMinorVersion()
    傳回使用中的文稿語言副版本。
  Second(time)
    傳回 time 時間的秒數(0-59)。
  Sgn(number)
    傳回 number 的符號,當 number 大於 0 傳回 1,等於 0,傳回 0,
    小於 0 傳回 -1。
  Sin(number)
    傳回 number 的正弦值。number 以 radians 計值。
  Space(number)
    傳回一個長度為 number 的空白字串。
  Split(expression [, delimiter [, count [, compare]]])
    將以 delimiter 為隔開符號的 expression 字串剖開後存入一個一維陣
    列後傳回。
  Sqr(number)
    傳回 number 的平方值。
  StrComp(string1, string2 [, compare])
    將 string1、string2 二字串相比較,結果以整數表示,若 string1 較
    小則傳回 -1,相等則傳回 0,較大則傳回 1。若其中有一個為 Null 則
    傳回 Null。
  String(number, character)
    傳回一個 number 個 character 字元的字串。
  StrReverse(string)
    傳回一個 string 字串的反向字串。
  Tan(number)
    傳回 number 的正切值。number 以 radians 計值。
  Time
    傳回目前的系統時間。
  TimeSerial(hour, minute, second)
    將時hour、分minute、秒second值轉為日期型態並傳回。
  TimeValue(time)
    將 time 的時間轉為日期型態並傳回。
  Trim(string)
    去除 string 字串頭尾的空白並傳回。
  TypeName(varname)
    傳回變數名稱 varname 的 Variant 次型態 (subtype) 字串。可能值為
    Byte、Integer、Long、Single、Double、Currency、Decimal、Date、
    String、Boolean、Empty、Null、<ObjectType>、Object、Unknown、
    Nothing、Error。
  UBound(arrayname [, dimension])
    傳回 arrayname 第 dimension 維的最大索引值。若省略 dimension
    則預設為 1。
  UCase(string)
    將 string 字串轉為英文大寫字母後傳回。
  VarType(varname)
    傳回 varname 變數的次型態整數值。

    整數值  常數           次型態
    ------  ------------   --------------------------------------
        0   vbEmpty        Empty (uninitialized)
        1   vbNull         Null (not valid data)
        2   vbInteger      Integer
        3   vbLong         Long integer
        4   vbSingle       Single-precision floating-point number
        5   vbDouble       Double-precision floating-point number
        6   vbCurrency     Currency
        7   vbDate         Date
        8   vbString       String
        9   vbObject       Automation object
       10   vbError        Error
       11   vbBoolean      Boolean
       12   vbVariant      Variant (used only with arrays of Variants)
       13   vbDataObject   A data-access object
       17   vbByte         Byte
     8192   vbArray        Array
  Weekday(date [, firstdayofweek])
    傳回 date 日期所代表的星期,1 表星期日,7 表星期六。
  WeekdayName(weekday, abbreviate, firstdayofweek)
    傳回 weekday 數值的星期名稱。
  Year(date)
    傳回 date 日期中的年份。 

20130608

VBScript 迴圈

使用迴圈重複執行程式碼
迴圈可以讓您重複的執行一群陳述式。有一些迴圈是在條件變成 False 之前,會一直重複執行陳述式;另一些則可能是在條件變成 True 時才停止迴圈。此外,還有一些迴圈是重複了某個固定次數之後就會停止。VBScript 中可以使用下列的迴圈陳述式:
  • Do...Loop:當條件是 True 時執行迴圈,也可以是執行到條件為 True 時,停止迴圈。
  • While...Wend:當條件是 True 就執行迴圈。
  • For...Next:使用一個計數器,讓陳述式重複執行某個固定的次數。
  • For Each...Next:對每個集合物件中的項目或陣列中的元素重複執行一次迴圈。
使用 Do 迴圈
您可以使用 Do...Loop 陳述式來重複執行一群陳述式數次。直到條件是 True 時,或條件變成 True 為止,迴圈會不斷的重複。
當條件是 True 時重複陳述式
在 Do...Loop 陳述式中,需用 While 關鍵字來檢查條件。您可以在進入迴圈之前就先檢查(就像以下的 ChkFirstWhile 例子),或在迴圈至少執行過一次之後再檢查(像是 ChkLastWhile 的例子)。在 ChkFirstWhile 程序中,如果 myNum 不是設成 20,而是設成 9,那麼在迴圈中的陳述式就永遠不會被執行。在 ChkLastWhile 程序中,迴圈裡的陳述式只會被執行一次。因為它的條件已經是 False 了。
 Sub ChkFirstWhile()
     Dim counter, myNum
     counter = 0
     myNum = 20
     Do While myNum > 10
         myNum = myNum - 1
         counter = counter + 1
     Loop
     MsgBox "The loop made " & counter & " repetitions."
 End Sub

 Sub ChkLastWhile()
     Dim counter, myNum
     counter = 0
     myNum = 9
     Do
         myNum = myNum - 1
         counter = counter + 1
     Loop While myNum > 10
     MsgBox "The loop made " & counter & " repetitions."
 End Sub
重複執行陳述式,直到條件變成 True 為止
在 Do...Loop 陳述式中,您有兩種方法來使用 Until 關鍵字檢查條件。您可以在進入迴圈前先檢查條件(像是以下的 ChkFirstUntil 例子),或在迴圈至少執行過一次後再檢查(像是 ChkLastUntil 的例子)。只要在條件是 False 時,迴圈就會執行。
 Sub ChkFirstUntil()
     Dim counter, myNum
     counter = 0
     myNum = 20
     Do Until myNum = 10
         myNum = myNum - 1
         counter = counter + 1
     Loop
     MsgBox "The loop made " & counter & " repetitons."
 End Sub

 Sub ChkLastUntil()
     Dim counter, myNum
     counter = 0
     myNum = 1
     Do
         myNum = myNum + 1
         counter = counter + 1
     Loop Until myNum = 10
     MsgBox "The loop made " & counter & " repetitions."
 End Sub
在迴圈中跳離 Do...Loop 陳述式
您可以在 Do...Loop 中使用 Exit Do 陳述式來跳離迴圈。因為通常您只會希望在某些特定的情形發生時,才要跳離迴圈,比如像要避免無窮迴圈時,您應該把Exit Do 陳述式放在 If...Then...Else 陳述式的 True 區塊中。當條件是 False 時,迴圈就會照常執行。在下面的例子中,myNum 將會被指定成一個會造成無窮迴圈的值。其中的 If...Then...Else 陳述式將會檢查這個條件,以避免無窮迴圈的發生。
 Sub ExitExample()
     Dim counter, myNum
     counter = 0
     myNum = 9
     Do Until myNum = 10
         myNum = myNum - 1
         counter = counter + 1
         If myNum < 10 Then Exit Do
     Loop
     MsgBox "The loop made " & counter & " repetitions."
 End Sub
使用 While...Wend
在 VBScript 中有提供 While...Wend 陳述式,這是為了用慣了 While...Wend 陳述式的使用者所提供的。不過,因為使用 While...Wend 較缺乏彈性,所以我們還是建議您使用 Do...Loop 來取代。
使用 For...Next
您可以使用 For...Next 陳述式使一整區塊的陳述式重複執行某個固定的次數。在 For 迴圈中,有一個用來當作計數器的變數。每執行一次迴圈時,這個變數的值就會遞增或是遞減。舉例來說,下面的程序將會呼叫 MyProc 程序 50 次。這個 For 陳述式指定了一個計數器變數 x,還有其起始值和結束值。Next 陳述式會使計數器的值遞增 1。
 Sub DoMyProc50Times()
     Dim x
     For x = 1 To 50
         MyProc
     Next
 End Sub
使用 Step 關鍵字,您就可以隨您的需要來遞增或遞減計數器變數。在下面的例子中,計數器變數 j 會在每次迴圈執行後遞增 2。當迴圈執行完時,變數 total 將是 2、4、6、8 和 10 的總合。
 Sub TwosTotal()
     Dim j, total
     For j = 2 To 10 Step 2
         total = total + j
     Next
     MsgBox "The total is " & total
 End Sub
如果您要使計數器變數遞減,您可以使用負的 Step 值。此時,結束值必須小於起始值。在下面例子中,計數器變數 myNum 會在每次迴圈執行過後遞減 2。當這個迴圈結束時,變數 total 的值將會是 16、14、12、10、8、6、4 和 2 的總合。
 Sub NewTotal()
     Dim myNum, total
     For myNum = 16 To 2 Step -2
         total = total + myNum
     Next
     MsgBox "The total is " & total
 End Sub
您可以使用 Exit For 陳述式在計數器到達其結束值之前跳離 For...Next 陳述式。因為通常您只會希望在某些特定的情形發生時,才要跳離迴圈,比如像發生錯誤時。所以您應該把 Exit Do 陳述式放在 If...Then...Else 陳述式的 True 區塊中。當條件是 False 時,迴圈就會照常執行。
使用 For Each...Next
For Each...Next 和 For...Next 迴圈非常相似。它們的不同之處在於,For Each...Next 迴圈是針對集合物件中的每一個物件或陣列中的每一個元素重複執行一次迴圈,而後者是依指定的數字重複執行迴圈的次數。當您不知道集合物件中有幾個元素時,For Each...Next 迴圈會特別的有用。在下面的 HTML 程式碼範例中,Dictionary 物件的功用是要將文字放到數個文字方塊中:
 <HTML>
 <HEAD><TITLE>Forms and Elements</TITLE></HEAD>
 <SCRIPT LANGUAGE="VBScript">
 <!--
 Sub cmdChange_OnClick
    Dim d                   'Create a variable 
    Set d = CreateObject("Scripting.Dictionary")
    d.Add "0", "Athens"     'Add some keys and items
    d.Add "1", "Belgrade"
    d.Add "2", "Cairo"

    For Each I in d
        Document.frmForm.Elements(I).Value = D.Item(I)
    Next
 End Sub
 -->
 </SCRIPT>
 <BODY>
 <CENTER>
 <FORM NAME="frmForm"

 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Button" NAME="cmdChange" VALUE="Click Here"><p>
 </FORM>
 </CENTER>
 </BODY>
 </HTML>

VBScript 條件式


使用 If...Then...Else 做選擇

If...Then...Else 陳述式依據條件是 True 或是 False,來執行一個或更多個陳述式。
條件通常是比較運算式,比較兩個數值或變數。
If...Then...Else 陳述式能使用多層巢狀結構。

看門(guard)

若您在條件為 True 時只要執行一個陳述式,您就可以使用 If...Then...Else 陳述式的單行語法。下面就是一個單行語法的範例。請注意,這個範例省略了 Else 關鍵字。
Sub FixDate()
     Dim myDate
     myDate = #2/13/95#
     If myDate < Now Then myDate = Now
 End Sub
如果您要執行超過一行以上的程式碼時,您就必須使用多行(或區塊)語法。這個語法包含了一個 End If 陳述式,如下例所示:
 Sub AlertUser(value)
     If value = 0 Then
         AlertLabel.ForeColor = vbRed
         AlertLabel.Font.Bold = True
         AlertLabel.Font.Italic = True
     End If
 End Sub
在條件是 True 時執行某幾個陳述式,條件是 False 時執行其它的陳述式
您可以使用 If...Then...Else 陳述式來定義兩個執行區塊:一個區塊在條件是 True 時執行,另一個則是在條件是 False 時執行。
 Sub AlertUser(value)
     If value = 0 Then
         AlertLabel.ForeColor = vbRed
         AlertLabel.Font.Bold = True
         AlertLabel.Font.Italic = True
     Else
         AlertLabel.Forecolor = vbBlack
         AlertLabel.Font.Bold = False
         AlertLabel.Font.Italic = False
     End If
 End Sub
在多種選擇中做決定
一個 If...Then...Else 陳述式的變形可以讓您從多種選擇中選取一種選擇。加上 ElseIf 子句的 If...Then...Else 陳述式可以擴充其功能,這樣能讓您的程式有多種不同的流程。舉例來說:
 Sub ReportValue(value)
     If value = 0 Then
         MsgBox value
     ElseIf value = 1 Then
         MsgBox value
     ElseIf value = 2 then
         Msgbox value
     Else
         Msgbox "Value out of range!"
     End If

您可以依您所需的加上多個 ElseIf 子句以提供其它選項。ElseIf 子句用的太多常常會變成一種麻煩。一個在多種選項之中選擇的較佳辦法是使用 Select Case 陳述式。

使用 Select Case 做選擇

Select Case 結構提供了 If...Then...ElseIf 外的另一種方式,可從多個陳述式區塊中選擇一個出來執行。
Select Case 陳述式和 If...Then...Else 陳述式類似,但可使程式更加有效率,且可讀性更高。

Select Case 結構在其前端有一個測試運算式,運算式只會被執行一次。執行完的結果將被拿來和每一個 Case 的值做比較。如果相符時,這個Case 區塊中的陳述式就會被執行:
Select Case Document.Form1.CardType.Options(SelectedIndex).Text
    Case "MasterCard"
        DisplayMCLogo
        ValidateMCAccount
    Case "Visa"
        DisplayVisaLogo
        ValidateVisaAccount
    Case "American Express"
        DisplayAMEXCOLogo
        ValidateAMEXCOAccount
    Case Else
        DisplayUnknownImage
        PromptAgain
End Select
請注意到 Select Case 結構只在前端執行一個運算式。相反的, If...Then...ElseIf 結構則可在每一個 ElseIf 陳述式後面執行一個不同的運算式。只有在每一個ElseIf 陳述式使用的都是同一個運算式時,您才能用 Select Case 結構取代 If...Then...ElseIf 結構。

VBScript 程序

VBScript 有二種不同的程序:Sub 程序和 Function 程序。
Sub 程序
Sub 程序是指一串 VBScript 陳述式,由 Sub 和 End Sub 陳述式所包圍,但執行後不傳回值。
Sub 程序可以代入引數(由呼叫的程序傳過來的常數、變數、或運算式)。若 Sub 程序不含任何引數,則須在 Sub 陳述式加上一個空括弧 ()。
下面的 Sub 程序使用二個內建的 VBScript 函數, MsgBox 和 InputBox,來顯示一些資訊給使用者。再根據這些資訊來計算結果。這些計算是使用一個 VBScript 的 Function 程序來完成的。在接下來的討論之後,會列出這個 Function 程序。
Sub ConvertTemp()
    temp = InputBox("Please enter the temperature in degrees F.", 1)
    MsgBox "The temperature is " & Celsius(temp) & " degrees C."
 End Sub


Function 程序

Function 程序是指一串 VBScript 陳述式,
由 Function 和 End Function 陳述式所包圍。

Function 程序與 Sub 程序相似,但會於執行後傳回值。

Function 程序可以帶入引數(由呼叫的程序傳過來的常數、變數、或運算式)。
若 Function 程序不含任何引數,則需在 Function 陳述式加上一個空括弧 ()。
Function 把傳回值指定給程序中的一個或多個陳述式。一般 Function 的傳回型態是 Variant。

在下例中,Celsius 函數是把華氏的度數轉成攝氏。當 ConvertTemp Sub 程序呼叫此函數時,把帶有引數值的變數傳給函數。而計算後的結果會傳回給呼叫的程序,並顯示在訊息方塊中。
 Sub ConvertTemp()
     temp = InputBox("Please enter the temperature in degrees F.", 1)
     MsgBox "The temperature is " & Celsius(temp) & " degrees C."
 End Sub

 Function Celsius(fDegrees)
     Celsius = (fDegrees - 32) * 5 / 9
 End Function

從程序傳入或獲得資料

資料透過引數傳給程序的。引數可當成是預留給傳送到程序的資料位置。可以用任何有效的變數名稱來作為參數命名。無論是建立一個 Sub 陳述式或 Function 陳述式,都必須在程序名稱之後加上括弧。任何在括弧內的引數都是以逗號來隔開的。例如,以下例子的 fDegrees 是預留給要傳到 Celsius 函數轉換的值:
 Function Celsius(fDegrees)
    Celsius = (fDegrees - 32) * 5 / 9
 End Function

要從程序中獲得資料,就得使用 Function。Function 程序可傳回值;Sub 程序不傳回值。

在程式碼中使用 Sub 和 Function 程序

在程式碼中,Function 必須使用於變數指定的右邊或放在運算式中。例如:

Temp = Celsius(fDegrees)


MsgBox "The Celsius temperature is " & Celsius(fDegrees) & " degrees."

從另一個程序中呼叫 Sub 程序時,您只要在程序名稱加上所需的引數即可,引數須以逗號來隔開。不一定要使用 Call 陳述式,但若您要使用它,引數必須包含於括弧中。下面二種呼叫 MyProc 程式的方法。一個是使用 Call 陳述式的,一個則沒有。而二者所做的事情是完全一樣的。
 Call MyProc(firstarg, secondarg)
 MyProc firstarg, secondarg
 請注意,當不使用 Call 陳述式呼叫時,括弧要省略。