2

I am trying to execute a function from a functional library (which I am loading at runtime). Everything works if I use Eval or Execute to run the function but I wanted to use GetRef as mentioned in this and this

QTP Code Snippet

Call LoadFunctionLibrary("/../Libraries/Tests.vbs")
Set objCon = CreateObject("ADODB.Connection")
objCon.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & "C:\_Work\WorkingFolder\TestList.xlsx" & "';Extended Properties='Excel 12.0;HDR=YES;IMEX=1';"
Set objRS = objCon.Execute("Select * from [Sheet1$] Where [To Execute] = 'YES'")
Do While Not objRS.EOF
     'Eval( objRS.Fields(1).Value)
     'Execute objRS.Fields(1).Value

     Set tcFunc = GetRef(objRS.Fields(1).Value)
     tcFunc
    objRS.MoveNext
Loop

In /../Libraries/Tests.vbs file, I have this function

Sub foo()
  msgbox "hello"
End Sub

which is referenced in the Excel as below

enter image description here

When I try to use GetRefm QTP is throwing the below error

Invalid procedure call or argument: 'GetRef' Line (10): "Set tcFunc = GetRef(objRS.Fields(1).Value)".

If foo is defined in QTP's Action, then it works but when I import it from a functional library, it fails. Any idea how to make it work?

EDIT -- WORKAROUND SOLUTION

Instead of using LoadFunctionLibrary, use ExecuteFile to load the functional library.

16
  • Would that not be pulling the headings?, so in effect, it's trying GetRef("Test Name") and failing (for multiple reasons, 1. procedure pointers can't contain spaces 2. it doesn't exist). Have you actually tried debugging what objRS.Fields(1).Value is returning rather than assuming? Commented Jan 25, 2017 at 13:13
  • HDR=YES so it will treat headers correctly. Also, objRS.Fields(1).Value correctly prints the value (i used print just to verify) Commented Jan 25, 2017 at 13:15
  • Why the loop through, you only want to call GetRef() once right? Commented Jan 25, 2017 at 13:17
  • 3
    @Lankymart - Just used ExecuteFile instead of LoadFunctionLibrary and that did the trick. LoadFunctionLibrary is a recent development in QTP so assuming that it is not fully tested (which is ironic given QTP is a testing tool) Commented Jan 25, 2017 at 13:33
  • 1
    I can't see any answer box - looks like I forgot to check Answer my own question checkbox. Commented Jan 25, 2017 at 13:47

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.