Why Doesn’t Shell Work in VBScript in VS6?

If you’ve ever worked with VBScript in Visual Studio 6 (VS6), you may have encountered a frustrating roadblock: a type mismatch runtime error when trying to use the Shell command to execute an external program. This can be perplexing, especially when you just want to streamline your tasks with a simple command. So, what gives? Why doesn’t Shell function as expected? Let’s unpack this issue and explore the solution step by step.

The Problem

In your macro code, you might have originally typed something like this:

shell("p4 open " + ActiveDocument.FullName)

However, this results in an error. The reason for the confusion lies in the differences between VBScript and Visual Basic (VB). While both languages share similarities, there are significant distinctions in their object usage and functionality.

Understanding VBScript and the WScript Object

VBScript vs. Visual Basic

As pointed out in discussions surrounding this issue, VBScript is not the same as Visual Basic. The key takeaway is that VBScript has a limited set of built-in objects. For instance, the only built-in object in VBScript is the WScript object.

WScript.Echo "Hello, World!"

This WScript object acts as the root of the Windows Script Host object model hierarchy. It provides basic functionality but does not handle advanced operations like running external programs directly through the Shell command.

CreateObject Method

In order to use most other objects available in VBScript, you need to create them using the CreateObject method. The Shell object is one of these “other” objects that requires this approach for execution.

The Solution: Using WScript.Shell

To successfully run an external program in your VS6 macro, you need to use the WScript.Shell object. Here’s how to do it correctly:

Dim wshShell
Set wshShell = CreateObject("WScript.Shell")
strResult = wshShell.Run("p4 open " + ActiveDocument.FullName)

Breaking Down the Solution

  1. Declare a Variable: You start by declaring a variable, e.g., wshShell, to hold the Shell object.

  2. Create the Shell Object: Use Set wshShell = CreateObject("WScript.Shell") to create an instance of the Shell object.

  3. Run the Command: Use wshShell.Run() method to execute your desired command, which in this case is "p4 open " + ActiveDocument.FullName.

Conclusion

While the extra steps may seem unnecessary at first, utilizing the WScript.Shell object through CreateObject is essential for running external applications in VBScript within Visual Studio 6. This method aligns with the way VBScript is designed and ensures that your code operates without runtime errors.

By understanding the distinction between VBScript and Visual Basic, you can navigate around these challenges and streamline your coding experience. If you’re working with macros, this knowledge will save you time and headaches in the long run.

Using the correct objects not only enhances your programming skills but also boosts your productivity. Happy coding!