I'm 99% sure you're on to this, but just in case: you can put other statements in the Catch part of the Try ... Catch ... End Try block, that clean up after or recover from whatever event was caught. And it doesn't hurt to Log(LastException.Message), or check that another (different) problem hasn't entered the arena eg
If LastException.Message.ToLowerCase.Contains("nullpointerexception") Then
'pretty sure I know what happened
Else
'today is not my lucky day
Log(LastException.Message)
End If
And if the Catch code grows and makes it hard to see your normal code, you can wrap and hide it with #region ... #end region (or you could ship it out to a Sub, but then you lose easy access to all the local variables needed to do the clean/fix-up).