early bound is when you declare an object of that object's particular type:
Code:
Dim V as SAPI.SpVoice
Set V = New SAPI.spVoice
V.Speak "blah"
In order for this to work, go to the Visual Basic window and press F2 or select Project | References and find whatever the name is of the thing that provides the SAPI name. The advantage is that because the type of object is known at compilation time, things go faster, and the loading hit is taken at startup instead of at object instantiation.
The late-bound method which FancyPrairie suggested declares objVo as a generic Object. It's slower, but it has the advantage that you don't have to have a reference... it checks to see if the object is creatable at the time you do CreateObject.
This is all very basic programming stuff and if you want more help, I'm sure that searching the web will provide hordes of information.
In the Excel example, the coder curiously used a mix of early and late bound. I'm not sure if that was intentional or not. But instead of using CreateObject once XL was declared as Excel.Application, just use the Set XL = New [ObjectType]. Unless you are trying to get a copy of Excel that is already running and you need to use GetObject.
VB also has the convenient syntax:
Code:
Dim V as New SAPI.SpVoice
V.Speak "blah"
V isn't actually instantiated until the Speak line, but because of the way it was declared, it automatically creates it at this time. If you set V to nothing afterward, and then use V again, it will be transparently instantiated again.