I'm a bit further away than that dude.
Nottingham, England

)
I'm 36 so rather terrifyingly, you've been working on IBM stuff since I was 12 months old!!!!
I've been on AS400's for about 15 years and started working with VB6 last year. My skills I consider outdated so for the last two years I've been trying to upgrade them. Over the last couple of months I've worked on getting VB6 to work with AS400's but I'm no expert. I found it difficult because there are no books and few articles out there on how to do it. A book I found that is out of date but still a good start point is, 'Client/Server Programming With Visual Basic 5.0'. It uses windows API's. This was the way to do it BEFORE Client Access the Express Toolkit was available.
Client Express Toolkit is part of Client Access and is a sub-option ( one of those tick box options like you get when installing windows and you have the option for games,
dial up networking, internet explorer etc ). Once you have it installed, it appears in your VB project window to the right of 'run' and 'query' as a drop down menu.
I'm not certain it will help you do what you want but for calling AS400 programs from VB6, its the best way to do it.
If you want to swap direct emails I have no problem with that. I'm no expert at VB6/As400 but we may be able to give each other ideas.
With regard to your specific problem.....
You are working on the exact opposite problem to me.
I wrote a VB6 program to upload data on to the AS400 from a CSV file and call a CL procedure to manipulate it on the AS400. The CL procedure can return a variable to my VB program.
So with my limited knowledge.....
1) Your CL program can call your VB6 program as you have described.
2) At the end of you VB6 program, put a command in it
to set a value in a data area or file by calling
another AS400 CL program.
3) The next line on your 1st CL program after the call
to your VB program could read the data area to pick up
the returned parameter.
If the data area is blank, go into a loop with
a ( 5 second? ) pause until the data area has a value in
it. If it hasn't arrived after 10 minutes, exit
the program so you don't hang for ever.
This assumes there is only one user per call of the VB program of course. It sounds a poor solution to me but without further investigation I can't suggest any other method UNLESS you make the VB program the front end to 'pull' the data from the AS400 using ODBC ( carefully ),
process the data, and then 'push' it up again to the AS400 using ODBC ( again carefully ).
Dazed and confused