Empirical Engineering.

The original result was always the first Sunday of the month, regardless of what .wDay was, so we had to add 7 * (the number of weeks - 1).

On further reflection
vb Code:
  1. tmp = DateSerial(tziYear, _
  2.                              .wMonth, _
  3.                               (.wDayOfWeek - MonthFirstWeekday + _
  4.                               .wDay * 7) + 1)
is a much simpler solution - instead of fixing the error, just don't cause it in the first place.