Можно ли вызвать функцию, имя которой хранится в строке в VBScript? - PullRequest
3 голосов
/ 04 октября 2011

Я пытаюсь написать скрипт на 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

предположим, что имя функции будет иметь значение скажем "sayhi".Могу ли я использовать это значение для вызова функции?как я сделал в коде «call functionname».

Я знаю, что это не работает, но как сделать такой вызов?

Ответы [ 2 ]

12 голосов
/ 04 октября 2011

Используйте 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
6 голосов
/ 04 октября 2011
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, если его в datatable.

...