Ok now this is weird. The function looks like this:

Private Sub fillBoxes(ByVal recordPos As Integer)
txtDesc.Text = DsAll1.HDSLMT(recordPos).DESCRIPTION

txtChoice1.Text = DsAll1.HDSLMT(recordPos).VALCHAR_1
txtChoice2.Text = DsAll1.HDSLMT(recordPos).VALCHAR_2
etc...
...
txtChoice9.Text = DsAll1.HDSLMT(recordPos).VALCHAR_9

txtDesc1.Text = DsAll1.HDSLMT(recordPos).VALTXT_1
txtDesc2.Text = DsAll1.HDSLMT(recordPos).VALTXT_2
etc...
...
txtDesc9.Text = DsAll1.HDSLMT(recordPos).VALTXT_9
End Sub

But none of those lines actually throw the exception. The exception is thrown at line 406, which is in a button click event handler, and that button hasn't even been clicked?!

I'm not a very experienced programmer and maybe I'm talking rubbish but to me that doesn't make sense.