I think that is far and away the best way to learn. Find a problem that would be fulfilling to solve, and then use any combination of Help, books, forums, and the many available websites to resolve obstacles one by one.
Rather than reading about 29 ways to reference ranges and wondering when you would use one vs another, "just in time" learning gives you practical examples. By and by, you see situations where each is appropriate, and sense emerges.
I had used VBA for a long time but just for tiny things, macros to do things quicker than via menus such as formatting cells.
I got a job where each day I had to be in at 8am and spend an hour doing a report that had to go out at 9am. it was repetetive, boring, and had to be done at high speed which meant I had hardly any time to check it. I knew could speed it up with VBA, but just didn't know how as my VBA knowledge was very limited. So I bought the John Walkenbach book, and read it cover to cover. Very little of it sunk in, but at least I knew wht was in there. So I set around automating the report production. First load some text files in - there were too big to copy and paste due to the number of blank lines so I figured out reading it in line by line and parsing it to create a manageable input file that could be copied and pasted. Then I automated the checking side. New products could appear in the report without notice and these needed building into the report, which was quick to do once it was spotted. There were about 600 subtotals and totals that could be compared so I made a sheet that compared them all which made new products simple to spot. Finally it got emailed out, so I thought what the heck I may as well automate that. I got it so I could click one button, it would load the input files, process them, check there were no errors and email itself out, start to finish 5 mins vs the 1 hour manual option.
When I was happy with it, I rolled in one day at 8.45. Everyone else was busy doing their manual reports. I logged on, hit the button and the report went out at 8.55, 5 mins before everyone elses. My boss, having noticed my lateness came over and telling me I should have been in at 8 to get the report out and it would be late. "Check your inbox" I said, "It went out at 8.55, and every single subtotal was cross checked".
So, not only did I learn to use VBA, but I got an extra 45mins in bed each morning.