如何使用指令碼控制項模組和程序集合

文章翻譯 文章翻譯
文章編號: 184745 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將告訴您,如何使用 Microsoft 指令碼控制項區段的程式碼的模組] 和 [程序的屬性。它也示範如何以動態方式判斷引數數目和函式] 或 [Sub 程序的是否。

其他相關資訊

Microsoft 指令碼控制項包括功能,可讓主應用程式區段的指令碼到不同的模組。預設的模組 「 全域 」 會一直存在。不同的模組可能含有相同名稱的程序 (也就是程序名稱有模組範圍)。

Microsoft 指令碼控制項還包括程序屬性,以允許主機應用程式,以動態方式判斷 [程序是一個函式或一個 Sub,以及它所預期的引數數目。這可讓主機應用程式提示使用者輸入正確的參數值數目。

指令碼控制項的 [模組] 屬性是物件,包含模組物件的集合。它有下列的屬性和方法:
  • 計數: 模組的數目。
  • Item(x): 傳回單一的 [模組] 物件。
  • 新增名稱: 加入空白模組具有指定名稱。
模組物件有下列的屬性和方法:
  • 名稱: 模組名稱。
  • 程序: 程序物件。
  • AddCode 程式碼: 將程式碼新增至模組。
  • 執行的名稱、 引數: 執行已命名的程序。
程序物件包含程序的物件的集合。它有下列的屬性和方法:
  • 計數: 在模組中的程序的數目。
  • Item(x): 傳回單一的程序物件。
程序物件有下列的屬性和方法:
  • 名稱: 這個程序名稱。
  • HasReturnValue: 指出程序是否為一個 Sub 或一個函式。
  • NumArgs: 的程序需要的引數數目。
注意: 不是所有的屬性和方法所列的物件會提供,只是那些與本文相關。

下列範例會提供說明如何使用這些屬性和方法的交談式程式:

重要: Microsoft 提供程式設計範例僅,為了說明不提供任何明示或默示的保證,包括但不是限於適售性以及適合某特定用途之默示擔保責任。本文假設您已熟悉我們所示範的程式設計語言,以及用來建立和偵錯程序的工具。

範例

  1. 在 Visual Basic 建立新的專案 (Form1 建立根據預設值)。
  2. 按一下 [元件],請在 [專案] 功能表上,然後選取 ["Microsoft 指令碼控制 1.0 」] 核取方塊。
  3. 新增指令碼控制項 (ScriptControl1) 文字方塊 (文字 1) 三個命令按鈕 (Command1 Command2,Command3) 並兩個清單方塊 (List1 List2) 中以 Form1。將文字方塊的多行的屬性設定為 TRUE。以容納 5 行 30 個字元的文字方塊大小。
  4. 將下列程式碼加入至 Form1:
          Private Sub Command1_Click()
            ScriptControl1.Modules.Add Text1.Text
            Form_Activate
          End Sub
    
          Private Sub Command2_Click()
            ScriptControl1.Modules(List1).AddCode Text1.Text
            List1_Click
          End Sub
    
          Private Sub Command3_Click()
          Dim RetVal As Variant, m As Variant
            Set m = ScriptControl1.Modules(List1.Text)
            With m.Procedures(List2.Text)
              Select Case .NumArgs
                Case 0
                  RetVal = m.Run(List2.Text)
                Case 1
                  RetVal = m.Run(List2.Text, 5)
                Case 2
                  RetVal = m.Run(List2.Text, 4, 23)
                Case Else
                  MsgBox "Procedure has too many arguments"
              End Select
              If .HasReturnValue Then
                MsgBox List2.Text & " returned: " & RetVal
              End If
            End With
          End Sub
    
          Private Sub Form_Activate()
          Dim m As Variant
            List1.Clear
            With SCriptControl1
              .Language = "VBScript"
              .AllowUI = True
              For Each m In .Modules
                List1.AddItem m.Name
              Next m
            End With
          End Sub
    
          Private Sub Form_Load()
            Command1.Caption = "Add Module"
            Command2.Caption = "Add Code"
            Command3.Caption = "Run Procedure"
          End Sub
    
          Private Sub List1_Click()
          Dim m As String, p As Variant
            m = List1
            List2.Clear
            If m = "" Then Exit Sub
            For Each p In ScriptControl1.Modules(m).Procedures
              List2.AddItem p.Name
            Next p
          End Sub
    
          Private Sub List2_Click()
          Dim m As String, p As String, r As Boolean, a As Long
            m = List1
            p = List2
            With ScriptControl1.Modules(m).Procedures(p)
              r = .HasReturnValue
              a = .NumArgs
            End With
            MsgBox m & "." & p & " has " & IIf(r, "a", "no") & _
                   " return value and " & a & " arguments"
          End Sub
    						
  5. 執行 Form1。
  6. 建立新的模組,只要在 [文字] 方塊中鍵入下列並按一下 [加入模組:
          Mod2
    
    						
  7. 在 [文字] 方塊中鍵入下列指令碼:
          Function Calc(X)
            Calc = X * 2
          End Function
    						
  8. 在 [清單 1 中, 選取 [通用,然後按一下 [新增程式碼],即可將加入至全域的模組。
  9. 在 [文字] 方塊中鍵入下列指令碼:
          Function Calc(X, Y)
            Calc = X * Y
          End Function
    
          Sub Test()
            MsgBox "The Test Sub in Module Mod2"
          End Sub
    						
  10. 在 [清單 1,選取 Mod2,,然後按一下 [新增程式碼],即可將加入至全域的模組。
  11. 按一下 [上各種不同的模組和程序。當您選取 [程序會出現一個訊息方塊指出程序具有傳回值,以及引數數目花。
  12. 之後選取 [程序按一下 [執行程序來執行它。程式碼決定要使用引數數目,您會看到不同的訊息方塊,以結果。
附註:
  • 全域的模組名稱永遠可能不通用 」 根據控制版本或當地語系化。使用 GlobalName 常數代替硬-編碼 Global"這個字。
  • 沒有要移除個別的模組或程序方法。您必須使用的指令碼控制項.Clear 方法來清除所有的程式碼。您可以利用.AddCode 方法使用相同名稱的程序覆寫程序。

?考

取得指令碼控制項的相關資訊,請參閱 「 Microsoft 知識庫 」 中下列文件:
184739: 資訊: 何處取得指令碼控制

如需詳細資訊,以及在呼叫程序,在 [全域] 模組中的範例,請參閱 「 Microsoft 知識庫 」 中下列文:
184740: 如何呼叫函式使用指令碼控制

Microsoft 指令碼控制項說明主題:
   HasReturnValue Property
   NumArgs Property
   AddCode Method
   Run Method
   Modules Collection
   Procedures Collection
				

屬性

文章編號: 184745 - 上次校閱: 2004年7月13日 - 版次: 4.1
這篇文章中的資訊適用於:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
  • Microsoft Visual Basic for Applications 5.0
關鍵字:?
kbmt kbhowto kbscript KB184745 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:184745
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com