2016-05-15 7 views
0

Ich schreibe ein Skript, um die Ticker anhand von Namen zu finden. Natürlich werden Unternehmen manchmal nicht so gefunden, wie sie geschrieben wurden. Der Grund dafür ist, dass die Quelle normalerweise am Ende etwas unnötiges Bit anheft. Ich versuche, mein Skript so zu schreiben, dass es wiederholt Wörter vom Ende entfernt, bis der Ticker erhalten wird. Wenn der Ticker nie erhalten wird, wählen Sie Nächste fortsetzen und die nächste Zeile aus. Gibt es eine Möglichkeit, dies zu tun?Aufgabe wiederholen, bis kein Fehler mehr auftritt. Vba

Sub TickerLookup() 

cell = ActiveCell.Value 

10 If Not IsEmpty(ActiveCell.Value) Then 
    GoTo GetTicker 
    Else 
    GoTo 20 
End If 
Catch: 
    For Each c In Selection 
     If Not IsEmpty(c.Offset(, -1)) Then 
      cell = Left(cell, InStrRev(cell, " ") - 1) 
      MsgBox cell 
     Else 
      MsgBox "Please clear all adjacent cells" 
     End If 
Next 
Resume Next 
Selection.Offset(1, 0).Select 
GoTo 10 

GetTicker: 

    cell = ActiveCell.Value 
    'remInc = Replace(cell, "INC", "") 
    'remCos = Replace(remInc, "COS", "") 
    cmpnyName = cell 

    ticker = "http://dev.markitondemand.com/MODApis/Api/v2/Lookup/json?input=" & cmpnyName 

    Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1") 
     MyRequest.Open "GET", ticker 
     MyRequest.Send 
    Dim Json As Object 
     Set Json = JsonConverter.ParseJson(MyRequest.ResponseText) 


    On Error GoTo Catch 
    ActiveCell.Offset(, -1).Value = Json(1)("Symbol") 

    Selection.Offset(1, 0).Select 
    GoTo 10 

20 End Sub 
+2

'Goto' ?? "Ja wirklich?" Das ist soooo achtzig ... – trincot

+0

Sie müssen nur das "Err" -Objekt testen und dann entsprechend handeln, obwohl dies wie ein kleines XY-Problem aussieht - ich wette, es gibt einen viel besseren Weg, nur Ihre Daten zu testen. –

Antwort

0

Für das Problem, das Sie beschreiben (Schleife, bis Fehler ist verschwunden) ist die Lösung:

Do 
    On Error Resume Next 'reset Err.obj. 
    'do things you want here 
    If (BoolExpressionYoWantIsTrue) Then 'the test you mention: the string is OK 
     'do what you want 
     Exit Do 'quit loop 
    End If 
Loop Until (Err.Number = 0) 
On Error Goto 0 'turn off error sinking 

Versuchen Sie auch, um Code ohne jemals die "GoTo" Ausdruck. Anstatt beispielsweise "Gehe zu 20" könnten Sie stattdessen einfach eine Exit Sub hinzufügen.

Verwandte Themen