0

我正在做一个小的 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) 不删除以前的查询表?

4

1 回答 1

1

问题 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

让我知道这是否适合您

于 2013-12-19T11:45:04.670 回答