I dislike VB for appropriate reasons:
- Interface has nothing to do with underlying data
- Class objects are not objects in the true sense of the word
- VB has been made to look like an object-oriented language when we all know it's roots come from a non-object oriented setup
- VB is quick and fast to use, yet you sacrifice loads of power as opposed to using something like MFC for your app
- VB's speed of execution is below par and certainly not up to C/C++
- VB attempts to be quick and simple and it is which is why anytime you try to do something just a little outside of the box, it craps out and works against you
- VB's error handling has not been improved since the dawn of BASIC which is a major oversight given that error handling system was based on goto's (either line or label) and gosub's
- Sub-classing controls becomes messy and is not nearly as simple and straightforward as C/C++.
- The message-based simplicity of Windows is buried deep inside of VB and if the control you are using does not receive the message you can't write a handler for it. AFAIK you cannot write a handler to intercept messages and route them as you would want
- Linking to DLLs is an extremely messy proposition as well as calling the API from inside of VB. I believe this has been changed in VB .NET, but I could care less to try it.
- VB is not fast enough for games, not designed for them, and therefore that means I've no interest in it.
I could go on and on.
Use what you need to get the job done, but I detest VB. But my bro-in-law uses it extensively at work so yes companies use it, but many of these same issues have been raised by him as well.