是否可以调用名称存储在vbscript中的字符串中的函数?

thn*_*iss 3 vbscript qtp

我试图像这样在qtp中编写脚本

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
Run Code Online (Sandbox Code Playgroud)

假设functionname将具有一个值"sayhi".我可以使用该值来调用该函数吗?就像我在代码"call functionname"中所做的那样.

我知道它不起作用,但怎么做这样的电话?

Ekk*_*ner 12

使用GetRef()获取Sub或Function的'指针'/引用:

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"
Run Code Online (Sandbox Code Playgroud)

输出:

cscript getrefdemo.vbs
S1: ABC
Run Code Online (Sandbox Code Playgroud)


Tot*_*nga 6

Option Explicit 

function abc(a)
  MsgBox a
End function

dim run : run = "abc ""Hallo"""
execute run
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

如果它在数据表中,将调用sayhi.