2011-10-04 82 views
3

我試圖寫一個腳本在QTP這樣是否可以調用名稱存儲在vbscript中的字符串的函數?

Public Function sayhi 

msgbox "hi" 

end 

Dim level0 

dim count1 
count1 = DataTable.GetSheet("Action1").GetRowCount 
msgBox count1 

For counterVariable = 1 to count1 
    functionname = DataTable.value("methodnames","Action1") 
    call functionname 
    DataTable.GetSheet("Action1").SetCurrentRow(counterVariable) 
Next 

承擔functionname都將有一個價值說「sayHi的」。我可以使用該值來調用該函數嗎?就像我在代碼「call functionname」中所做的一樣。

我知道它不工作,但如何做這樣的調用?

回答

6
Option Explicit 

function abc(a) 
    MsgBox a 
End function 

dim run : run = "abc ""Hallo""" 
execute run 

execute方法可以做,如果其在數據表這


Public Function sayhi 

msgbox "hi" 

end 

Dim level0 

dim count1 
count1 = DataTable.GetSheet("Action1").GetRowCount 
msgBox count1 

For counterVariable = 1 to count1 
    functionname = "call " & DataTable.value("methodnames","Action1") 
    execute functionname 
    DataTable.GetSheet("Action1").SetCurrentRow(counterVariable) 
Next 

將調用sayHi的。

+0

將如果值ABC在可變這項工作? – thndrkiss

+1

只是在一個字符串變量中構建你想要的命令行。 – Totonga

+0

很好的答案。 。如果這些方法存在於同一個文件中的vbs文件中,該怎麼辦。它沒有選擇該文件中的方法。 。 – thndrkiss

12

使用GetRef()來獲得一個 '指針'/參考Sub或功能:

Option Explicit 

Sub S1(s) 
    WScript.Echo "S1:", GetRef("F1")(s) 
End Sub 

Function F1(s) 
    F1 = UCase(s) 
End Function 

Dim sName : sName  = "S1" 
Dim subS1 : Set subS1 = GetRef(sName) 

subS1 "abc" 

輸出:

cscript getrefdemo.vbs 
S1: ABC 
+0

使用GetRef,你可以傳遞一個指向函數/子的指針,它不在通過指針調用它的代碼範圍之外。通過執行,它必須在範圍內。這是一個體面的差異,GetRef理念+1,與QTP imho相結合的方式非常流行。 – TheBlastOne

相關問題