Here's a link that may help you:
http://www.codeforexcelandoutlook.com/DQYFiles.html
Rather than saving a query file as featured in the link, I usually set
up a very hidden sheet with the query range stored on it and refresh
the query when the procedure is run. Just one short line of code to
trip it then: srcSh.QueryTables(i).Refresh BackgroundQuery:=False.
I'm not saying one technique is better than the other, just offering
options.
Cliff Edwards