Sorry, this entry is only available in Português.
It has been a long time since “wrote” my last article in this blog. Recently, it’s so easy to record video tutorials and post them on Youtube (including monetization) that it’s hard to find a reason to write something. Well, after looking into the current situation of the Office Development, especially for VBA developers.
This is not a click bait article and my real intention is to promote an awareness of what is the real issue in the VBA market, from a developer perspective.
My experience with VBA started in the year 2000, 17 years ago in the Office 97 and soon, the 2000 version. So, I believe this is long enough to give the right to give my opinion about it.
In addition, most of what I’m going to comment here comes from a long talk with Excel/VBA Hard Core colleagues and friends who work (and struggle) daily with VBA, including MVPs in Office.
The original version of this article was written in Brazilian Portuguese, which is my first language. So, please, be aware that this might have some issues in English and some explanations will not reflect 100% the worldwide market, but what I could live so far in Brazil about it.
I intend to mainly target the VBA Developers audience. If you are interested in VBA for any other reason, you are very welcome! Anyway, you can read this article even if you have no idea about VBA, but I’m pretty sure you are going to get a bit confused in the next 2 to 3 paragraphs.
The Office Development: Current status
I’m writing this text on 2017’s Spring, so, keep this in mind if you are reading this in a far future. Having said that, I can describe the current Office Development as the follow:
- VBA is still part of the Office (currently 2016/365) installation, but not for Office Online.
- VBA has not been updated since 1999 despite some minor changes in 2003
- VBA is completely unstable and it looks like it’s getting worst on every new Office version
I’m going to add more facts that I know to endorse what I am about to write.
It’s undeniable that the VBA Development is far away to end. There are still huge communities supporting it and even more been created daily basis. I hold a forum (in Portuguese) which focus mostly in Excel and VBA and it’s usage only grows! I also have some friends in the same situation and they have been reported the same.
Alright, let’s check some numbers. Take a look at the chart below which I collected from Google Trends:
It’s almost embarrassing for the alternatives in comparison to VBA. Some can say that VBA’s usage has been decreasing through the years, which is true, but let’s be blunt here. For a technology that was supposed to be dropped almost 20 years ago, such decreasing is almost insignificant, especially nowadays with a new language/framework/technology coming out every single week.
It’s time for starckoverflow.com numbers:
- VBA: ~80 k mentions
- VSTO: ~12 k mentions
- Office JS: ~1,5 k mentions
We cannot consider Office Add-In search because it will consider all kinds of technology in which you can create an Office Add-In, including C++.
These are, in a nutshell, the numbers, and we know Microsoft for its epics success (Office, .NET, SQL Server, Azure) and ALSO for its enormous disasters (Windows Millennium, Vista, Infopath, Zune, Windows Phone).
VBA and its current status
I like to describe the VBA current status as chaotic. But, chaotic does not mean necessarily “bad”.
What is really chaotic is Microsoft misdirection about it.
I’m translating this article right now. Come back in a few minutes… or hours… or days 🙂
Simplicity is the secret for productivity. That is what this post is about.
It’s not a common usage, but sometimes you need to create a instance of a IQueryable variable. I mean, without a call to a LINQ expression or lambda method. You might ask, “why do you want to do this?” I can give you a bunch of reasons, but in my case, I’ve needed to serialize the results to JSON, and “null” was not an option, nor new List.
So, how do I solve it? Simple:
IQueryable listData = Enumerable.Empty<T>().AsQueryable()
It works! This variable serialized produces something like (“listData”: ). Perfect for me!
It has helped a lot and saved a bunch of ifs, new List and some levels of cyclomatic complexity.