2016-08-18 19 views
0

我想從網站檢索數據,將其存儲在字符串中,並使用字符串函數將其放入行和列中:逗號用於列,而分號是新行。使用兩種方法並傳遞數據的VBA

我分別使用了兩種方法,他們的工作,但他們沒有這樣工作:

gettse()應該在單元格中檢索數據,並split2()應該分開的字符串。 當我運行每種方法時,他們工作正常。當然,我使用的split1()split2()類似,但沒有參數並從cell(1,1)中讀取。

你能告訴我們這個代碼使用了兩者的問題嗎?

我的猜測是它取決於互聯網的速度,當它檢索數據時,第二種方法已經運行。我用了5秒的延遲,但沒有奏效。

Sub main() 
    gettse 
    Dim data As String 
    data = Sheet1.Cells(1, 1).Value 
    split2 (data) 
End Sub 


Sub gettse() 

    Set shFirstQtr = Workbooks(1).Worksheets(1) 
    Set qtQtrResults = shFirstQtr.QueryTables _ 
    .Add(Connection:="URL;http://www.tsetmc.com/tsev2/data/ClientTypeAll.aspx", _ 
    Destination:=shFirstQtr.Cells(1, 1)) 

    With qtQtrResults 
     .WebFormatting = xlNone 
     .WebSelectionType = xlSpecifiedTables 
     .WebTables = "1" 
     .Refresh 
    End With 

End Sub 


Sub split2(data As String) 

    Dim aColumns, aRows 
    Dim x As Long 
    aRows = split(data, ";") 

    For x = 0 To UBound(aRows) 
     aColumns = split(aRows(x), ",") 
     Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(1, UBound(aColumns) + 1) = aColumns 
    Next 

End Sub 
+0

問題是什麼,它是否拋出任何錯誤或者是你的實際結果與預期結果不同,如果是這樣,你能分享樣本投入和預期產出嗎? – Siva

+0

在您上一篇文章中,我建議這可能是由於您重疊了數據源,顯示在下面的屏幕截圖中,您的分割代碼有效,並且我剛剛使用另一個數據源進行了複製,並且沒有重疊,請嘗試啓動您的粘貼在另一張紙上。 –

+0

你是說當你運行main()它不運行其他兩個潛艇? –

回答

1

在您的最後一個職位,我勸它可能是由於你的重疊數據源,在你的屏幕截圖,您使用的是電池下方,將拆分代碼工作顯示,和我剛剛與另一數據複製源,它不重疊,嘗試在不同的片

enter image description here

+0

我知道代碼應該可以工作,但它不在我的電腦上,它可能取決於網絡連接和計算機的速度。 –

1

開始你粘貼如果該問題是由於Cells(1,1)數據的非可用性,以及split2呼叫甚至在此之前發生的事情,那麼你可以包含一個Do While循環來檢查的值你叫split2

Sub main() 
Do While Sheet1.Cells(1, 1).Value "" 
    gettse 
Loop 

Dim data As String 
data = Sheet1.Cells(1, 1).Value 
split2 (data) 
End Sub 
+0

我試過了,但沒有奏效。謝謝。 –

1

之前,我發現,問題在於.REFRESH線。下面是刷新方法的幫助頁面

https://msdn.microsoft.com/en-us/library/office/ff197503.aspx

母雞BackgroundQuery設置FALSE,它會等到所有數據進行檢索。如果它是真的,那麼它將繼續它已有的東西。

與我要求的代碼的唯一型差分是這一行:

.Refresh BackgroundQuery:=False 

,工程修改後的代碼是:

Sub main() 
    gettse 
    Dim data As String 
    data = Sheet1.Cells(1, 1).Value 
    split2 (data) 
End Sub 


Sub gettse() 

    Set shFirstQtr = Workbooks(1).Worksheets(1) 
    Set qtQtrResults = shFirstQtr.QueryTables _ 
    .Add(Connection:="URL;http://www.tsetmc.com/tsev2/data/ClientTypeAll.aspx", _ 
    Destination:=shFirstQtr.Cells(1, 1)) 

    With qtQtrResults 
     .WebFormatting = xlNone 
     .WebSelectionType = xlSpecifiedTables 
     .WebTables = "1" 
     .Refresh BackgroundQuery:=False 
    End With 

End Sub 


Sub split2(data As String) 

    Dim aColumns, aRows 
    Dim x As Long 
    aRows = Split(data, ";") 

    For x = 0 To UBound(aRows) 
     aColumns = Split(aRows(x), ",") 
     Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(1, UBound(aColumns) + 1) = aColumns 
    Next 

End Sub 
相關問題