2016-08-18 1 views
0

Ich möchte Daten von einer Website abrufen, speichern Sie es in einer Zeichenfolge und verwenden Sie Zeichenfolgenfunktionen, um es in Zeilen und Spalten: Komma ist für Spalten und Semikolon ist neue Zeile.VBA mit zwei Methoden und die Weitergabe von Daten

habe ich die beiden Methoden getrennt und sie arbeiteten, aber sie arbeiten nicht so:

gettse() soll Daten in einer Zelle abzurufen, und split2() die Zeichenfolge trennen sollte. Wenn ich jede Methode ausführen, funktionieren sie gut. Natürlich verwende ich split1(), die split2() ähnlich ist, aber kein Argument hat und von cell(1,1) gelesen.

Könnten Sie bitte sagen, was das Problem dieses Codes ist, der beide verwendet.

Meine Vermutung war, dass es von der Geschwindigkeit des Internets abhängt, und wenn es Daten abruft, hat die zweite Methode bereits ausgeführt. Ich habe eine Verzögerung von 5 Sekunden gebraucht, aber es hat nicht funktioniert.

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

Was das Problem ist, wird es einen Fehler werfen oder Ihre tatsächlichen Ergebnis anders als erwartetes Ergebnis, wenn ja, können Sie Beispieleingabe und erwartete Ausgabe teilen? – Siva

+0

In Ihrem letzten Beitrag habe ich darauf hingewiesen, dass es wahrscheinlich aufgrund der Überlappung der Datenquelle, die in Ihrem Screenshot darunter angezeigt wird, funktioniert Ihr geteilter Code, und ich habe gerade mit einer anderen Datenquelle repliziert und es überlappt nicht, versuchen Sie Ihren Einfügen in ein anderes Blatt. –

+0

sagst du, dass wenn du main() ausführst, es nicht die anderen zwei Subs laufen lässt? –

Antwort

1

In Ihrem letzten Beitrag, riet ich es Ihnen wahrscheinlich war die Datenquelle überlappen, wie in Ihrem Screenshot unterhalb der Zelle, die Sie verwenden, Ihre Split-Code funktioniert, und ich habe gerade mit einem anderen Daten repliziert Quelle und es nicht überlappen, versuchen Sie, das Einfügen in einem anderen Blatt Ausgang

enter image description here

+0

Ich weiß, dass der Code funktionieren sollte, aber es nicht auf meinem Computer, und es kann von Netzwerkverbindung und Computergeschwindigkeit abhängen. –

1

Wenn das Problem aufgrund der Nichtverfügbarkeit von Daten in Cells(1,1) ist und ein Aufruf an split2 geschieht auch vor, dass Sie dann kann eine Do While Schleife enthalten, um den Wert vonzu überprüfenbevor Sie 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

Ich habe es versucht, aber es hat nicht funktioniert. Vielen Dank. –

1

nennen fand ich heraus, dass das Problem mit .Refresh Linie liegt. Hier ist die Hilfeseite für die Refresh-Methode

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

hen die Background Falsch setzt es werde warten, bis alle Daten abgerufen werden. Wenn es wahr ist, wird es mit dem weitermachen, was es bereits hat.

Der einzige differece mit dem Code ist, fragte ich diese Zeile:

.Refresh BackgroundQuery:=False 

Der Code geändert, das ist funktioniert:

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 
Verwandte Themen