2014-11-25 3 views
0

Я был довольно знаком с Excel VBA, и у меня есть некоторые простые, но сложные проблемы (возможно, из-за передозировки кофе). Мой код в настоящее время вытаскивает таблицы из Yahoo Finance в цикле (поэтому я могу добавить несколько тикеров). То, что я пытаюсь настроить, сначала вводит тикеры вдоль строки, а не вдоль столбца - я попытался изменить все «строки» строки lr1, и это не сильно повлияло. Во-вторых, я попытался выяснить способ вывести информацию, поэтому только цифры, а не все таблицы вытащили с тех же позиций каждый раз. Это помогло бы, если бы я мог также стереть/перезаписать результаты макроса каждый раз, когда я нажимаю кнопку обновления.Excel VBA Web Table & Input

Результат будет таким же простым, как положить в тикер на одной колонке вверху, а цифры выйдут прямо под ним после нажатия кнопки - я чувствую, что я рядом, но без сигары.

Это код, который работает, а не тот, который пронизан таким количеством ошибок.

Sub RefreshQuery() 

    On Error Resume Next 
    Application.ScreenUpdating = False 
    Application.Calculation = xlCalculationManual 

    Dim DestinationCell As Range 

    Dim StockSymbol As String 

    Dim i As Long, lr1 As Long, lr2 As Long 
    lr1 = Range("B:B").Find("*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

    For i = 1 To QueryTables.Count 
     QueryTables(i).Delete 
    Next i 

    Range("C:D").Clear 

    For i = 2 To lr1 
     lr2 = Range("D:D").Find("*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
     Set DestinationCell = Cells((lr2 + 3), 4) 
     StockSymbol = Cells(i, 2).Value 
     Cells((lr2 + 2), 4).Value = "****" & StockSymbol & "****" 
     With QueryTables.Add(Connection:="URL;http://finance.yahoo.com/q/ks?s=" & StockSymbol & "+Key+Statistics", Destination:=DestinationCell) 
      .Name = "q/ks?s=" & StockSymbol & "+Key+Statistics" 
      .FieldNames = True 
      .RowNumbers = False 
      .FillAdjacentFormulas = False 
      .PreserveFormatting = True 
      .RefreshOnFileOpen = False 
      .BackgroundQuery = True 
      .RefreshStyle = xlInsertDeleteCells 
      .SavePassword = False 
      .SaveData = True 
      .AdjustColumnWidth = True 
      .RefreshPeriod = 0 
      .WebSelectionType = xlSpecifiedTables 
      .WebFormatting = xlWebFormattingNone 
      .WebTables = "8,9,10,11,12,13,14,15,16,17,18,19,20,21,25,26,27,29" 
      .WebPreFormattedTextToColumns = True 
      .WebConsecutiveDelimitersAsOne = True 
      .WebSingleBlockTextImport = False 
      .WebDisableDateRecognition = False 
      .WebDisableRedirections = False 
      .Refresh BackgroundQuery:=False 
     End With 
    Next i 

    Application.ScreenUpdating = False 
    Application.Calculation = xlCalculationAutomatic 

End Sub 

Спасибо за помощь!

ответ

0

Только для номеров, которые вы делаете на другом листе. На вашем основном листе введите =SheetWithYahooPage!b5, где вы хотите только номер. Легче всего перетащить всю страницу.

Запросы имеют свои возможности обновления. Почему вы делаете это в коде? Запросы могут удалять данные. Для запросов есть два диалога. Один из них называется «Параметры», на котором вы выбираете страницу. И еще одна кнопка «Свойства» в последнем диалоговом окне, где вас спрашивают, куда вставлять данные.