OK, my error of omission, .Execute works for QueryDef objects too. The only thing I can add to arnelgp's comment is to make the .Execute have parameter dbFailOnError as a parameter, just to give it one.
If arnel is right (and he VERY often is) then the query failed. That parameter is benign in this context, since it says "fail if something goes wrong" and it was already failing anyway so... just gilding the lily.
If this is a debugging issue then you don't want to turn off warnings around this code. you WANT it to bomb so that you can get a spot notification and can examine things at the point of the error. If you are doing this on a production copy of your code then you have other issues to consider, but if this is a private development copy then you should be OK. Also, using dbFailOnError is actually nicer because it is more likely to clean up after itself and not leave a half-updated table sitting around after a failure.