Friday, October 18, 2013

Excel Hyperlinks -- Relative vs. Absolute Path

I rarely insert hyperlinks into an Excel spreadsheet.  So every time I do, I get burned by Excel's predilection for turning Absolute paths into Relative paths.

Here's the scenario...

I'll use Excel to create a flat file database on my local hard drive.  I'll include links to the file server on the network using UNC paths, such as \\File-Server\Share-Name\Path2File\MyFile.ext.  (The Ctrl-k keystroke is really handy for creating hyperlinks, BTW.)

After building the table by adding fields in columns, adding formatting, and entering a few records in rows for testing, I'll consider the database to be production ready.  At this point I'll upload it to the same file server that my links point to.

The next time a user opens the network version of that spreadsheet, Excel will convert those carefully-entered absolute links to relative links.  So if the spreadsheet resides in \\File-Server\NewShare\Reports\Databases\LG.xls, the links to MyFile.ext turn into this: ..\..\..\Share-Name\Path2File\MyFile.ext.  They work just fine while the spreadsheet remains in that location.

But suppose the user saves the database and then e-mails it someone else in the organization, or copies it to his or her local hard drive.  The links are broken.  Furthermore, there's no easy way to fix them.  Search and Replace (Ctrl-h) won't find the ..\..\..\ in the hyperlinks.  You'll have to either fix them manually or write a program to do it.  And then the same thing could happen again, anyway.

But there is (thankfully) a trick to keep Excel from bastardizing your carefully designed links.  But it's a preventive measure -- you have to know about the trick before you get stuck with the link conversion.

The trick is to open the File Properties dialog.  Choose the Summary tab and enter C:\ in the text box next to the label that reads "Hyperlink base:".  Be sure to OK your way out and save.  These instructions are for Excel 2000 and 2003.  Later versions probably have the same properties dialog, but the way to open it might be different.

Really, it's best to do this before entering any hyperlinks.  Ideally, Excel would have an Option for this.  But alas, all I could find was a checkbox to enable Excel to prompt for workbook properties.

Hopefully, by writing this post, I've seared this information into my brain so that the next time I'm tempted to enter a hyperlink, I'll remember to set this property.

Hmmm, it just occurred to me to code this property using VBA....

Saturday, September 28, 2013

Brain Games

What kind of Geek could resist an opportunity to improve his or her mind?  If there is such a geek, I am not that kind.

So when I heard the advertisements sponsorship acknowledgments on NPR for Lumosity, I decided to check it out.

Lumosity develops and offers online games that improve mental function.  Their aim is to enable anyone to achieve his or her full potential, brain-wise, at least.

Lumosity provides two tiers of service: free, and subscription.  Users of free accounts are restricted to just three games per day, while subscribers have access not only to unlimited games, but also Personalized Training, Performance Tracking, and comparisons to other Lumosity users.

Since I joined way back on June 1, I've improved slowly and steadily to match the ability of someone half my age, assuming that someone is a slug.  Haha.  Just kidding.  Actually I have no idea because I'm using a free account.  All I know is that four weeks ago my score was 1025 and now it is 1111.


Here's my Brain Performance broken down into various categories:

So check out Lumosity. It's free. It's fun. And you might just gain enough improvement to survive the upcoming Zombie Apocolypse.

Monday, August 05, 2013

Outlook 2010 Macros -- Adventures in Getting Them to Work

In a post that included Outlook VBA code, I mentioned that I stopped using the macro because of Outlook's tougher security.

Today, I decided to try to eliminate the main problem that I had, namely an inability to run the macro except from within the VBA Project IDE.

Here's the scenario:  I have code that worked on Outlook 2000.  I assigned a toolbar button to call it.  But the toolbar button doesn't work in Outlook 2010.  Nothing happens.  Pressing Alt-F8 and clicking Run opens the VBA macro in the IDE and displays an error "Subroutine or Function not found" (paraphrased).  But then I can run the macro by clicking the play button.

One aspect of my solution was to make sure macros were not being disabled.  I choose to self-sign the macro rather than enable all macros.  First I used SelfCert.exe, which I found in the Outlook program directory (C:\Program Files\Microsoft Office\Office14).  SelfCert.exe can be used to create personal certificate -- it would work for me on my local computer.  After I created the certificate, I signed the macro (Tools | Digital Signatures | Choose).  After clicking OK, I immediately pressed Ctrl-sto save the macro.  And then I closed Outlook.  But when I did, it asked me whether I wanted to save VbaProject.OTM.  Odd.  First I responded No.  But when I reopened the VBA editor and checked for digital signatures, it reported that the macro was unsigned.  But answering Yes to the prompt to save didn't help either.  The macro still wasn't signed.

I wondered if the Read Only attribute had been set on VbaProject.OTM.  But no, I had Full Control rights on the file.  Yet, the file's timestamp was old!  It wasn't getting saved!  Ahh, but the old timestamp was a trick, an undocumented "feature".  According to this support thread, it was normal for the timestamp and file size of VbaProject.OTM to remain unchanged after a save.  (This is why the phrase "WTF?" was invented.)  I verified that the save was taking place by adding a comment to my code, saving, closing Outlook and then re-opening the macro.

After that little detour, I found that it was necessary for me to install the certificate in the "Trusted Root Certification Authorities."  This can be done deep within the bowels of the VBA editor.  Tools | Digital Signatures | Choose.  Click the link that says "Click here to view the certificate prope..."  Click the button "Install Certificate..." then Next.  In the next dialog box, click the radio button for "Place all certificates in the following store" then Browse.  Select "Trusted Root Certification Authorities" and then OK / Next your way out.  Save and close Outlook again.

BTW, every time you close Outlook, you should use Task Manager to verify that the Outlook process is not running.

Still the macro would not run except from within the editor.  But I found the solution in another thread.  My code was in a module.  After I moved it to ThisOutlookSession, I was able to assign an actual functioning toolbar button to it.


It is very nice that even though I have other macros working that access the From and To properties of a message, I no longer get the annoying message box that warns me that my address book is being accessed and asks whether I want to allow that.

Saturday, May 25, 2013

Android Tablet Possibly For Sale

So far my tablet is leading me to the conclusion that it's not worth buying one.  While the portability of it is really neat, it's still not small enough to fit in any pocket, except perhaps a generous jacket pocket.  Sans jacket, I've stowed it inside my button-down shirt by opening one button, slipping it in, and then closing the button.  But during bouts of warm T-shirt weather, I'm forced to either hold the tablet or put it down somewhere when I'm not actually using it.

For example, when I went grocery shopping last week, I placed the tablet in the "seat" of the shopping cart.  When I was done shopping, and I had loaded the car, I returned the cart to one of the spots set aside for the empty carts.  As I walked away, I glanced back to make sure I didn't leave anything behind in the cart, and then I drove home.  And as soon as I got home, I wondered where my tablet was.  I realized I had left it in the cart.  And the reason I didn't notice it when I walked away from the cart was that it lay atop a store circular that had been folded over it by the wind.  Luckily it was in the same spot I left it.  But had I not been able to find it, I'd've not bothered to replace it or even miss it.  I might've felt a bit relieved.  In fact, right now I'm wondering how much I can get for it.

I like having a computer.  It enables me to communicate through e-mail, blogs, message boards and even social media.  And the mobility of it would be extremely fantastic if: 1) Free WiFi were accessible everywhere; 2) It didn't take ten times longer to compose meaningful content.  BTW, I'm typing this right now on a public library computer, even though I have my tablet with me and have access to free WiFi.  Even with the Nexus' Speech-to-Text feature and the Hacker's Keyboard, I still prefer to enter content through an "old fashioned" keyboard.

The marriage of location-aware note-taking and image capture that Evernote provides would be useful if the Nexus had a good-quality rear camera.

Friday, May 17, 2013

Blamed For Doing Its Job

The IRS recently was criticized for scrutinizing certain organizations applying for tax free status.  It seems that organizations that had "Tea Party" in their names received extra scrutiny.

First of all, "Tea Party" generally refers to a political organization.  And the fact is that political organizations are not entitled to tax free status.

Second, "Tea Party" is a reference to a revolt conducted by vandals who were opposed to paying taxes.

So these critics are essentially saying that an organization whose name implies that it's political in nature and opposed to taxes should not be scrutinized when it applies for tax free status?


Friday, April 26, 2013

How I Got My Computer to Chime

It all started with a blog post by Sacha Chua that made me think, "I bet there's an app for that."  She described how she set up her smart phone to vibrate every half hour.

Soon after, I found Chime Time, by Hyperfine, which turned my tablet into an Aberdeen mantel clock.  And I loved the idea of chimes and bells so much that I also installed Bodhi Timer, by Yuttadhammo, which can be set up as a timer and play a variety of tones, including singing bowl, when the time is up.

Chime Time starts up automatically when Android starts up.  But Bodhi Timer does not, so I start it in the morning.  I might set it to go off every 15 minutes starting at about 7 minutes after the hour (or any 15-minute interval afterwards), or every 10 minutes starting at 5 after the hour (or any 10-minute interval afterwards), depending on when I can remember to do it.

Having bells and chimes sound off every so often reminds me to live in the present.  When I hear the sound I ask myself whether I'm using time mindfully.

However, my wife absolutely hates it.

Anyway, after enjoying this for a few days on my tablet, I wondered if there were something similar that I could use on my work computer.  I didn't feel like running the tablet just to have it make noise.

That motivated me to search on SourceForge, where I found TeaTimer.  But TeaTimer would pop up an alert box at the end of each interval because it was really intended as a timer for steeping tea.  So I decided to write my own in Visual Basic 6.

I wrote a simple application that would simply play a WAV file whenever it was invoked.  I chose chimes.wav from Microsoft Office, although I'm sure there's an equivalent from OpenOffice, as well.  Then I set a job in Task Scheduler to call it every 15 minutes.  There is a special trick to pulling this off, though, because while my program worked fine when invoked interactively, it refused to work when triggered by Task Scheduler.

I found the solution on the Microsoft Support website:

Here's the source code in its entirety, comments removed for clarity:
Declare Function sndPlaySound Lib "WINMM.DLL" Alias "sndPlaySoundA" _
    (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Public Const SND_SYNC = &H0
Public Const SND_ASYNC = &H1
Public Const SND_NODEFAULT = &H2
Public Const SND_LOOP = &H8
Public Const SND_NOSTOP = &H10
'Here are explanations for the parameters: (removed)
Private Sub Main()
    Dim SoundName$
    Dim x%, wFlags%
    SoundName$ = "C:\Program Files (x86)\Microsoft Office\OFFICE11\MEDIA\CHIMES.WAV"
    x% = sndPlaySound(SoundName$, wFlags%)

End Sub

Saturday, March 23, 2013

Android Tablet -- a GPS Device Poser

I concede that I was exaggerating a bit when I referred to my new tablet as "a GPS device, RF scanner, MP3 player, eReader, camera, digital voice recorder, hand held gaming device, clock, portable translator...." It's the "GPS device" boast that's questionable.

Well it depends on how you define GPS Device. If it's a merely a device that displays a map and shows you where you are on that map using the Global Positioning System network of satellites, then, yes, the tablet is such a device.

But if you expect the device to allow you to enter a destination and provide real-time instruction on how to get there, along with an reasonably accurate estimate of when you can expect to reach your destination, then the tablet is merely a GPS Device Poser.

On my Nexus 7, directions are provided by Google Maps, which does a very good job of routing. But something called Navigator assumes the role of proving the actual turn-by-turn directions and arrival time.

Navigator works fine as long as you follow the initial route and as long as traffic conditions do not change during the trip. For example, if you start out at home while the tablet has an Internet connection, Google Maps will check the traffic conditions and provide both a route and an estimate of arrival time that's fairly accurate. You have the option of downloading a rectangular map that encompasses the route, too, so you can use Navigator offline.

But during the trip when the Internet connection is missing, Navigator cannot adapt to a traffic problem. Well, that's to be expected, and it's no reason to find fault in the app. The real problem is that Navigator does not recalculate the trip when you deviate from the route.

On my 20-minute commute to work, I can take one of four different major routes, two of which are on state highways, both of which are littered by red traffic lights. So I like to take the back roads, which are scenic and have fewer stops, albeit longer. It's reasonable for Navigator to prefer the state highways. But when I ignore the chosen route, Navigator refuses to recalculate. Instead it provides directions to return me to the point where I went off course. So the closer I get to work via the back road, the longer the trip time. I've seen the 20-minute commute spike up to 1 hour and 45 minutes. And when I finally do come to an intersection with the highway, it will actually direct me in the opposite direction, presumably to reach a way point on it's own route.

Well there are other GPS apps, even free ones, that can provide turn-by-turn directions. Right now I'm evaluating Navfree USA: Free. It does a better job of dealing with my willful disregard of the planned route. But it's a little rough. For example, it fails to give you the first instruction at the beginning of the trip. Also you need to have an Internet connection in order to get directions to an address because it queries Google maps.  (That's not an issue if you've saved your destination as a Favorite.) I'm assuming that the same is true for Points of Interest.  The biggest problem with it, though, is that it will crash after 30 to 40 minutes and need to be restarted.

So alas, I'm not about to give up my Garmin Nuvi just yet.  It would provide real time traffic updates in some areas and serve as a backup to the tablet in the event that I needed to follow a detour.

Edited on 2013-04-13 to add two sentences to the Navfree paragraph.

Saturday, March 02, 2013

My Geeky Reward

Recently I took my stash of credit card rewards and, all at once, I bought a GPS device, RF scanner, MP3 player, eReader, camera, digital voice recorder, hand held gaming device, clock, portable translator....

That's one heck of a reward!

Well, if you haven't guessed by now, I bought a tablet.  I suppose "RF Scanner" might've thrown you off, but with the Scanner Radio app, you can turn an Android tablet into a police scanner as long as you're connected to a Wi-Fi network.  Plus you can listen to the goings on of the LAPD1 from the East Coast.

The six $50 gift cards that I bought with $240 of rewards allowed me to pay for the Google Nexus 7 tablet, tax included, plus the two-year warranty extension, which I chose because I was not paying by credit card.  I usually decline such extended warranty plans on the grounds that my credit card offers the same coverage.  But since I wasn't using the credit card to pay for the purchase, and I was saving so much money anyway, I figured I might as well go for it.  Although I do realize that the device might be obsolete before it expires.

Anyway, I love the device.   I found an app that works with my public library's downloadable book collection.  So if I'm in the mood to read Dave Barry late at night, I can use the app to borrow Dave Barry in Cyberspace, for free.

1 Los Angeles Police Department. The radio traffic of the LAPD and that of San Bernardino County was very popular a few weeks ago during the manhunt for Christopher Dorner.