Well, for one thing, you don't have a SOAPAction header. So that's not a valid SOAP request. I don't think the value of the SOAPAction header matters for ES, but I believe it needs to appear. So you need oXmlHTTP.setRequestHeader "SOAPAction", "" or similar.
I can't tell from your post whether "http://WSDL_URL_ADDRESS" is just a placeholder you used in the post in place of the real URL, or if that's what's actually in your code. And the code you posted sets the Content-Length header value to "length", which is not valid; it has to be the length, in bytes, of your actual request message. Probably you want something like this, after setting the SOAPRequest variable:
oXmlHTTP.setRequestHeader "Content-Length", Len(SOAPRequest)
as well as fixing the other problems.
I also don't know what this line of code is supposed to be doing:
oXmlHTTP.setOption(2) = 13056
That doesn't even appear to be the correct syntax for the setOption method (though I admit I am happy to know as little as possible about Visual BASIC); setting an option to a hard-coded magic number is rarely a good idea; and option 2 appears to control server certificate checks, so this is both a bad idea and should be completely unnecessary.
All that said: a much better idea is to use a SOAP client API of some sort to build and make the request. Creating valid SOAP requests by hand is not trivial. That's the proper way to invoke a SOAP web service. I don't know what environments you need to support, so I can't suggest a specific API to use, but you might start with this MSDN article.