The history of BASIC
Back in the late 60's, several professors at Dartmouth had a problem: their students were having a tough time learning FORTRAN, the major programming language of the day. FORTRAN was written with lower-level computing (e.g. assembly) in mind, so it wasn't very human-friendly.
So these professors got together and wrote up a programming language called the Beginner's All-purpose Symbolic Instruction Code, or BASIC. Every command in the language was to be an English word of six letters or less, and each command's name would describe what it did.
BASIC became hugely popular. When microcomputers were being introduced to hobbyists in the 70's, the computers came with BASIC as the actual operating system; every program on the machine had to be written in BASIC. In fact, the first program that Bill Gates sold was a compiler for BASIC (deciding to sell this commercially was what started Microsoft).
Unfortunately, because of the structure of BASIC, the language encouraged the use of GOTOs, which allowed a program to skip some sections of code and move directly to somewhere else in the code. Almost single-handedly, BASIC gave rise to "spaghetti code", so named because if you printed out the code and tried to trace the execution of each line of code with a pen, the resulting pen marks would look like a plate of spaghetti.
But fortunately, Microsoft has been the flagship developer of BASIC and is very committed to it, so BASIC has evolved to the point at which it is now functionally equivalent to C++ and many other, high-powered languages in most ways.
What Visual Basic can and can't do
Yes, Visual Basic is just about as powerful as C++. And yes, you can write just about any kind of program in Visual Basic. However, Visual Basic is slow and somewhat error-prone.
Since Visual Basic was developed as a language for beginners, it assumes that your code could do all sorts of bad things accidentally. As a result, it adds all sorts of checks into your compiled code to stop the program if the code you wrote tries to do something it shouldn't do (like access memory it doesn't have access to).
Also, BASIC does not require you to declare your variables; if you use a variable it will create that variable on the fly (and initialize it). That means that if you accidentally mis-spell a variable name, VB will assume that the mis-spelled variable is a new variable and create it for you. As you can imagine, this can create major bugs in a program that compiles perfectly.