2013-12-18 45 views
0

我正在一個小型的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?

+0

可能的解決問題1 - 假設形式是'Modal' ...你將不得不作出吧'ModeLess' ...' Userfomr1.Show VBModeless' –

+0

潘卡嗨,你好,這裏是其他代碼: 打開工作簿 '私人小組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

+0

正如我所提到的...用'UserForm1.Show VBModeless'代替'UserForm1.Show'在'Workbook_Open()' –

回答

1

問題1 - 根據註釋解決(需要將表單屬性設置爲Modeless)。您可以查看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 

讓我知道這對你的作品

+0

嗨Pankaj,謝謝。名稱屬性解決了整個問題。 – cquadrini