VBS include or import

I'm writing some VBS for the SecureCRT tool and want to better organize my code.

I have a set of constants that I want to use in a series of vbs files, and rather than copy/paste them into each, I'd like to include the code through a single "include" statement.

What command or set of commands do I use to achieve this?

e.g.
Import "KeyboardConstants.vbs"

Sub Main()
  MsgBox "Here's a carriage return:" & ReturnKey & "!!!"
End Sub

---
When I run this, I'l like it to show a messagebox.
ReturnKey would be a variable defined inside the KeyboardConstants.vbs file.

I may also have to procedures in that import file which would be available with a simple call such as this:

Sub Main()
  RunExternalProcedure()
End Sub

where RunExternalProcedure() is defined in KeyboardConstants.vbs
LVL 22
rspahitzAsked:
Who is Participating?
 
ClifCommented:
Actually it can be done, but you have to create WSF files, instead of VBS (the include file can be a VBS file)

Test.wsf:
<job>
<script language="VBScript" src=".\Constants.vbs"/>
<script language="VBScript">
  call TryIt()
  wscript.echo "xyz = " & xyz '"This is a test"
</script>
</job>

Constants.vbs:
dim xyz
xyz = 123

sub TryIt()
  wscript.echo "Try It"
end sub
0
 
Michael_DCommented:
Onfortunatelly this is not supported in vb script - You have to repeate your declaration in each file
0
 
Michael_DCommented:
Unfortunately*
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

 
rspahitzAuthor Commented:
So what is ExecuteGlobal?  It seems to be a way to import code, but I'm just reading up on it. Might that help?
0
 
rspahitzAuthor Commented:
It seems that it lets you take code and run it...if I can read the code file, I may be able to run it.  Have you ever tried that?
0
 
rspahitzAuthor Commented:
Actually, I found this in the archives and it seems to be doing that:

'Sub Include(sCodeFile)
'      Dim sCode
'
'      with createobject("scripting.filesystemobject")
'            sCode = .OpenTextFile(sCodeFile).ReadAll
'      End With
'      ExecuteGlobal sCode
'End Sub

Now I think I understand how it works...I'll experiment a bit after lunch, otherwise on Monday.
0
 
Michael_DCommented:
Hmm I never used it. Let me know if it works :)
0
 
Michael_DCommented:
>>Actually it can be done, but you have to create WSF files, instead of VBS (the include file can be a VBS file)

Or you can use Java, PHP, C/C++ or any other language that suports includes :)

The question is how to do it using VBScript, right?
Just my opinion ...
0
 
ClifCommented:
Michael_D,
"The question is how to do it using VBScript, right?"

By adding the tag:
    <script language="VBScript">
 
You will be using VBScript.

The script will still be working within the WScript engine.

Try it.
0
 
Michael_DCommented:
I mean if i am coding in VBS and want to include functions or constants from other site - I will need pure VBS solution to do it - not creating wrapper or launcher in other language
0
 
ClifCommented:
VBS need an engine to run the script.

What engine are you running that "pure VBS solution" in?

The "wrapper or launcher" is not another language.  It's a directive to tell the scripting engine what to do.
0
 
rspahitzAuthor Commented:
The problem I have is that this is not a web project.  The SecureCRT app uses VBScript as a macro language, but it seems to use a limited subset.

I can actually test the syntax in Excel VBA for the most part, but not everything works.

I'll check out the WBS concept.

FYI
The VBS files start with this:

# $language = "VBScript"
# $interface = "1.0"

Then you add a sub-main and the code to run.  The problem is that the file is getting kinda big and I'd like to break it up into modules.  I have it load a menu into an InputBox, then jump to a subroutine based on the input.  (I was hoping to add a custom form, but in CreateObject I wasn't sure what class to instantiate.  But that's for another question if I can get this working.
0
 
rspahitzAuthor Commented:
Well, this works !!! :)

      ExecuteGlobal "Sub x:Msgbox ""x"":end sub"
      x()

That's kinda cool.
However, setting a bunch of constants in a separate file generates an error in the ExecuteGlobal.
I might be able to put them elsewhere, like a class of some sort.  I'll have to keep playing.


And I like the idea of a Windows Script File (WSF) but I don't think it will work with the SecureCRT app.  Maybe when I start doing webpages (although I usually use JavaScript for that since it's more portable to most browsers.)
0
 
rspahitzAuthor Commented:
OK...got it...the external file had the heading directives in it (# $lang...)  When I took those out, it worked! :)

I'll keep this open for a bit in case there are any other comments.
0
 
rspahitzAuthor Commented:
Although I actually got the answer myself, I think that talking it out helped guide me in the right direction.  I also learned a few things about vbscript---so thanks.
0
 
Michael_DCommented:
rspahitz thank you for points and for good question / answer
I learned also something new to me :)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.