Excel VBA Web查询行为问题

Excel VBA Web查询行为问题,excel,excel-web-query,vba,Excel,Excel Web Query,Vba,我正在做一个小的excel项目,在那里我有一个用户表单。用户表单有一个组合框,其中包含从excel工作表(a)列中检索到的公司名称列表(该操作按预期进行) 表单有一个文本框,根据下拉框中的选择,该文本框从B列返回股票代码(按预期工作) 下一步就是它发生故障的地方。然后将股票代码值传递给连接到yahoo finance的web查询,并从站点检索数据 问题1: 在表单关闭之前,web查询不会返回数据。我希望它“立即”返回值 问题2: 每次运行查询时,都会生成一个新的查询表,即使我已经编写了删除查询表

我正在做一个小的excel项目,在那里我有一个用户表单。用户表单有一个组合框,其中包含从excel工作表(a)列中检索到的公司名称列表(该操作按预期进行)

表单有一个文本框,根据下拉框中的选择,该文本框从B列返回股票代码(按预期工作)

下一步就是它发生故障的地方。然后将股票代码值传递给连接到yahoo finance的web查询,并从站点检索数据

问题1: 在表单关闭之前,web查询不会返回数据。我希望它“立即”返回值

问题2: 每次运行查询时,都会生成一个新的查询表,即使我已经编写了删除查询表的脚本

Private Sub cb_Stock_Name_Change()

Set ws = Worksheets("Stock_Info")

With Me
    .tb_ticker.Value = ws.cells(.cb_stock_name.ListIndex + 2, 2)
    '.TextBox3.Value = Format(Sheet1.cells(.ComboBox1.ListIndex + 7, 9), "0%")
    '.TextBox2.Value = Format(Sheet1.cells(.ComboBox1.ListIndex + 7, 10), "0%")
End With

Dim ticker As String
Dim conn As String

Set ws_query = Worksheets("Stock_Query")
ticker = tb_ticker.Value
conn = "URL;http://finance.yahoo.com/q?s=" & ticker
Dim qt As QueryTable

For Each qt In ws_query.QueryTables
    qt.Delete
Next qt

Set qt = ws_query.QueryTables.Add _
(Connection:=conn, Destination:=Range("A1"))

With qt
    '.Connection = conn
    '.Destination = Range("A1")
    .WebSelectionType = xlSpecifiedTables
    .WebFormatting = xlWebFormattingNone
    .WebPreFormattedTextToColumns = True
    .WebSelectionType = xlSpecifiedTables
    .WebTables = "2"
    .Refresh
End With

With Me
    .tb_previous_close.Value = ws_query.cells(1, 2)
End With

End Sub
问题:
我的代码有什么问题?a)在关闭表单之前不会返回b)没有删除以前的查询表?

问题1-根据注释解决(需要将表单属性设置为无模式)。您可以查看MSDN以了解表单模式属性的详细信息。仅供参考,默认情况下,表格是模态的

问题2-您需要指定qt的.Name属性。尝尝这个

With qt
    .Name = "StockWatch"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = False
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlOverwriteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .WebSelectionType = xlSpecifiedTables
    .WebFormatting = xlWebFormattingAll
    .WebTables = "2"
    .WebPreFormattedTextToColumns = True
    .WebConsecutiveDelimitersAsOne = False
    .WebSingleBlockTextImport = False
    .WebDisableDateRecognition = False
    .WebDisableRedirections = False
    .Refresh BackgroundQuery:=False
End With

让我知道这是否适用于您

问题1的可能解决方案-假设表单为
模态
。。。您必须使其
无模式
Userfomr1.Show VBModeless
Hi Pankaj…下面是其他代码:打开工作簿
Private Sub工作簿\u Open()UserForm1.Show End Sub
Form Initialize
Private Sub UserForm\u Initialize()Dim rng\u Stock\u Name作为范围Dim rng\u Ticker作为范围集ws=工作表(“股票信息”)对于ws.Range(“公司名称”)Me.cb\u Stock\u Name.AddItem rng\u Stock\u Name.Value下一个rng\u Stock\u Name End Sub中的每个rng\u Stock\u名称,它是一个用户表单,而不是一个模块。这有用吗?正如我提到的。。。将
UserForm1.Show
替换为
UserForm1.Show VBModeless
Workbook\u Open()
Hi Pankaj,我确实按照您的建议添加了那段代码,但在我关闭表单之前,它仍然不会关闭连接并返回值。嗯。。。从
workbook\u open
中删除
userform1.show
,并尝试将
userform1.show VBModeless
放入
userform\u initialize()
。你好,谢谢。名称属性修复了整个问题。