Most of the preceding samples get an existing QueryTable, modify its properties, and then call Refresh. I could have used the QueryTables collectionâs Add
method to create these queries on the fly. However, I would need to remember to delete previously created QueryTables.
Getting rid of unneeded query tables on a worksheet can seem like an unimportant housekeeping chore, but it is very important to avoid having redundant or unneeded queries running in the background. Background queries degrade performance, spontaneously connect to the Internet, and can generate asynchronous errors, as mentioned earlier. This can really confuse users!
The following code creates three new query tables on the active worksheet:
Dim ws As Worksheet, qt As QueryTable, i As Integer Set ws = ActiveSheet For i = 1 To 3 Set qt = ws.QueryTables.Add("URL;http://finance.yahoo.com/q/ecn? _ & s=yhoo", [A12]) qt.Name = "Temp Query" qt.WebTables = "22" qt.WebSelectionType = xlSpecifiedTables qt.WebFormatting = xlWebFormattingNone qt.BackgroundQuery = False qt.RefreshStyle = xlOverwriteCells qt.Refresh Next
When this code runs it creates three query tables on the worksheet named Temp_Query, Temp_Query_1, and Temp_Query_2 respectively. Thereâs no easy way to manage query tables through the Excel user interface, however, if you press Ctrl+G youâll see the names for the new query tables listed in the Go To dialog box (Figure 4-8).
Itâs possible to manually delete query tables by going to the named range and selecting Clear All, but that leaves the name in the worksheet, and subsequent names will be indexed _4, _5, etc. The easiest way to clean up mistaken or trial query tables is to write some code to help you remove them. For example, the following procedure lists each query table on a worksheet and lets you remove or keep it:
Sub RemoveOldQueries( ) Dim ws As Worksheet, qt As QueryTable, nm As Name Set ws = ActiveSheet For Each qt In ws.QueryTables If MsgBox("OK to delete " & qt.Name & "?", vbYesNo, _ "Web Queries") = vbYes Then qt.Delete End If Next For Each nm In ws.Names If MsgBox("OK to delete " & nm.Name & "?", vbYesNo, _ "Names") = vbYes Then nm.Delete End If Next End Sub
Get Excel 2003 Programming: A Developer's Notebook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.