Section 4.4.Manage Web Queries


4.4. Manage Web Queries

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!

4.4.1. How to do it

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).

Figure 4-8. Excel automatically numbers query tables with those that have the same base name


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



    Excel 2003 Programming. A Developer's Notebook
    Excel 2003 Programming: A Developers Notebook (Developers Notebook)
    ISBN: 0596007671
    EAN: 2147483647
    Year: 2004
    Pages: 133
    Authors: Jeff Webb

    flylib.com © 2008-2017.
    If you may any questions please contact us: flylib@qtcs.net