You tend to forget how good Visual Studio has become as a development environment, until you jump back into something like writing VBA macros in Excel.
This is pretty much a VB6 environment, but maybe it's just my memory but I didn't think VB6 was as bad as VBA is. Even more amazing is that if you open up Excel 2010 and click on the Visual Basic icon in the Developer tab, nothing has changed. There's good old VBA in all its glory.
Sure, you can use .NET with Excel, but only to write add-ins. These are installed separately, so you can't just send a spreadsheet off to a colleague and expect it to work if they don't also have the add-in installed. Another option would be to write a full-blown .NET application that used COM Interop to call out to Word and Excel.
So what lead me to be messing around in VBA? The scenario involves aggregating data from a large number of spreadsheets into a single Word document. If you're thinking this sounds like something better handled with SharePoint or an intranet web application, you'd be right. Probably the ".NET application with COM Interop" would also have been a better choice, but for now resource constraints meant that the "improvised" solution was the best that could be done, and as a proof of concept it appears to be doing the job.
Just to be clear, this isn't for a LobsterPot client, rather I'm just helping out a friend. The particular problem I was asked to advise on was that the Excel VBA code was launching Word, but Word would be opened in the background. The request was to make the new Word document appear in front of Excel so that the end-user could more easily see it. Sure, they could Alt-Tab or click on the Windows task bar to bring it into focus, but anything you can do to make things easier and more obvious for users is usually a good thing.
The original code opened Word like this:
Set wordApplication = CreateObject("Word.Application")
This works fine, but Excel (where the VBA code is running from) stays in the foreground. Adding one extra line to the code solves the problem:
Set wordApplication = CreateObject("Word.Application")
The call to ActivateMicrosoftApp does the trick. One trap to be aware of is calling that method before CreateObject. That does work, but it results in 2 instances of Word opening, which is usually not desirable.
Some good things have happened in the last 24 hours:
- The Dell technician fixed my laptop.
- LobsterPot Solutions welcomed its newest member – Roger Noble! It will be great to work with Roger again. Since leaving UniSA he's been specialising in SharePoint development, which will be a great asset for LobsterPot's Business Intelligence expertise.
- I attended the Adelaide SQL Server 2008 R2 launch event presented by Microsoft Australia's Alan Eldridge. A nice overview of new features in R2.
- Next Buck Woody gave a humorous and interesting talk on two new features in SQL 2008 R2 at the SQL User Group meeting:
- Utility Control Point – managing and monitor multiple instances of SQL Server 2008 R2
- Data-tier Applications (DAC) – deploying SQL applications. DAC is only for R2 and is distinct from the DataDude deployment technology that also shipped as part of VS2010, but the word on the street is to expect these two to converge in the future.
- Finally to finish off the day, I passed exam 70-448 - TS: Microsoft SQL Server 2008, Business Intelligence Development and Maintenance. Yeehaa!
Microsoft SQL Server 2008 Analysis Services ships with 9 built-in algorithms that can be used in data mining solutions. Apparently these algorithms are unchanged in SQL Server 2008 R2.
Here's my own summary of these algorithms, based on their descriptions and detail from the Data Mining Algorithms page in SQL 2008 Books Online.
Useful for generating recommendations. The classic example is people who buy beer and shampoo.
Group similar items together.
Predicts both discrete and continuous attributes based on relationships. Example is figuring out the common characteristics of old customers that determine whether they are more likely to purchase again.
Calculates a "line of best fit" for a series of data, and then allows prediction based on that line.
Variation of Neural Network, good for yes/no outcomes.
Classification algorithm using Bayes theorem. Good for quick results that may then be refined by other algorithms.
Analyse complex relationships with lots of inputs but few outputs.
Finds most common sequences. Good for identifying popular web page site navigation trends on a website.
Predict future values of continuous values over time. Forecast next year's sales.
So as mentioned yesterday, my laptop is sitting next to me, looking very shiny and pretty, but completely silent. I spoke to Dell support this morning and after managing to exhaust the call centre guy's script of variations on "Have you tried turning it off and on again?", he eventually logged a case for me, and I'm now waiting for a phone call from (presumably the local) support engineer.
One thing I'm not too worried about is the data sitting on the laptop. I know it's there – just a matter of getting a new BIOS (and/or possibly motherboard) and it will be fine. I also know I have a full backup on my Windows Home Server, which is reassuring.
One of the first things I did when I joined LobsterPot was to create a Live Mesh folder to store business-related documents. So that means I've still got access to those documents via the web or my other machine at home – handy as after experimenting with various online solutions, I ended up reverting to using an Excel spreadsheet to track my work hours too!
I've also recently been making use of some of the training content at Microsoft Learning. I download the content to the laptop and have been working my way through it on the bus to and from work (must be riveting for the lucky people who get to sit next to me!). There is an offline reader just for this purpose, though it does have its annoyances (eg. no keyboard shortcuts, doesn't allow text to be enlarged) but one nice thing is that it synchronises your progress. So I can still log into the Microsoft E-Learning site and am able to pick up where I left off, using the "online" mode instead.
Then there's email, IM etc, which all work fine from where ever you are. So, while having a dead laptop is a huge pain, it isn't the end of the world.
Good news.. I just had a call from Dell and they're coming out on Monday. Hope they can fix it quickly.
This evening I thought I'd install the most recent firmware update A09 for my new Dell XPS 1645 laptop. I downloaded the installer and ran it, and it automatically started the update.
Then it got stuck.
I left it for a fair while, but the progress bar was not moving, and then I discovered the mouse and keyboard were also not responding. Holding down the power-button had no effect, so the only way to power off was to remove the battery.
A call to Dell support revealed that as it is a hardware problem I need to talk to their hardware support line which is only open 8am – 8pm (and it was already past 8pm).
So tomorrow morning I'll be on the phone to see what can be done. Very frustrating.