我正在一个小型的Excel项目中,我有一个用户窗体。用户表单具有一个组合框,其中包含从Excel工作表中的列(A)检索到的公司名称列表(此操作按预期工作)。Excel VBA Web查询行为问题
表单有一个文本框,根据从下拉框中的选择返回列B中的股票行情(按预期工作)。
下一步就是分解的地方。股票代码价值然后传递给连接到雅虎财务的网络查询,并从网站中检索数据。
问题1: 网页查询在表单关闭之前不会返回数据。我希望它能够“立即”返回值。
问题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)不删除以前的QueryTable?
可能的解决问题1 - 假设形式是'Modal' ...你将不得不作出吧'ModeLess' ...' Userfomr1.Show VBModeless' –
潘卡嗨,你好,这里是其他代码: 打开工作簿 '私人小组Workbook_Open() UserForm1.Show 结束Sub' 形式初始化 '私人小组UserForm_Initialize() 昏暗rng_Stock_Name作为范围 Dim rn g_Ticker作为范围 集WS =工作表( “Stock_Info”) 对于每个rng_Stock_Name在ws.Range( “COMPANY_NAME”) Me.cb_stock_name.AddItem rng_Stock_Name.Value 接着rng_Stock_Name 结束Sub' 它是一种用户窗体,而不是一个模块。这有帮助吗? – cquadrini
正如我所提到的...用'UserForm1.Show VBModeless'代替'UserForm1.Show'在'Workbook_Open()' –