Пауза цикла в Excel VBA, пока не закончится другой Sub - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь написать макрос для достижения следующего:

  • Откройте IE и войдите на финансовый сайт
  • Откройте CSV-файл исторических цен для символа и переместите его в другую рабочую книгу
  • Повторите шаг 2 для нескольких символов

Я выполнил первые два шага, но не могу найти способ зациклить его, чтобы он затем загружал остальные символы. Кажется, что все мои попытки зацикливания либо:

  • Запускайте циклы слишком быстро
  • По какой-то причине перестал работать мой код, как раньше.

Мой код работает нормально, пока у меня нет цикла For ... Next, но как только я добавляю, что он перемещается на сайт, но при появлении запроса на открытие файла CSV он не открывается .

Ниже приведен упрощенный пример моего кода. Я перехожу в Google, чтобы смоделировать шаг входа в систему (который должен произойти только один раз). Затем я перехожу к фактическому адресу CSV, а затем вызываю MoveIt Sub, чтобы разместить его там, где я хочу.

Как оно работает, но когда я добавляю цикл For ... (в настоящее время помечен как комментарий в коде), он прекращает открывать файл.

Я также попробовал цикл Do.While в первом Sub (также помеченный как комментарий), чтобы он ничего не делал, пока второй Sub не завершен, но он также не работает.

Public i As Integer, j As Integer

Sub GetHistoricalCSV()

Dim ieApp As InternetExplorer
Dim web As String

i = 1


Set ieApp = New InternetExplorer 'create a new instance of ie
ieApp.Visible = True

ieApp.Navigate "https://google.com" 'go to login page
    Do While ieApp.Busy: DoEvents: Loop
    Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop

'For i = 1 To 3 'This is the start of the loop

j = 0

web = "http://www.global-view.com/forex-trading-tools/forex-history/exchange_csv_report.html?CLOSE_" & i & "=ON&start_date=09/16/2018&stop_date=09/16/2018&Submit=Get Daily Stats"

ieApp.Navigate web

    'Wait to make sure IE has navigated and is prompting to open or save the CSV
    Application.Wait (Now + TimeValue("0:00:03"))
    SendKeys "(%o)" 'Open the CSV


    'I need to wait for the file to open, so I schedule the rest of the code on a new sub
    Application.OnTime Now() + TimeSerial(0, 0, 1), "MoveIt"

'Do Until i = j 'This is telling the code to wait until then next sub has finished
'    DoEvents
'Loop

'Next i 'This is the end of the loop

End Sub

Следующий Sub перемещает открытый лист в рабочую книгу с именем «Text.xlsx»

Public Sub MoveIt()
Dim Ct As Integer
Ct = 0
For Each wb In Application.Workbooks
    If wb.Name Like "exchange*" Then
        Ct = Ct + 1
        wb.Activate
        Set wbook = ActiveWorkbook
        Exit For
    End If
Next wb

If Ct = 0 Then MsgBox "File not open"

ActiveSheet.Move After:=Workbooks("Test.xlsx").sheets(Workbooks("Test.xlsx").sheets.Count)
ActiveSheet.Name = "Exchange" & i

j = i

End Sub

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Вы пытались решить проблему с помощью Get & Transform?

Похоже, вам может понадобиться настроить некоторые параметры на основе дат, но это можно сделать довольно легко. Я некоторое время пытался найти решение этой проблемы, нашел некоторую справку по reddit и в итоге получил следующий запрос в этой Workbook на GitHub для получения информации из iex API.

// If you need more context see the workbook posted above
let
  Parameter = Excel.CurrentWorkbook(){[Name="Parameters"]}[Content],
  URL = Parameter{0}[Value],
  Source = Json.Document(Web.Contents(URL)),
  #"Converted to Table" = Record.ToTable(Source)
in
  #"Converted to Table"

Дайте мне знать, если вы можете использовать это или вам нужна дополнительная помощь!

0 голосов
/ 16 сентября 2018

Поскольку вы не выбираете элемент для запуска загрузки, вы можете попробовать загрузить двоичный файл / загрузить urlmon, используя созданный вами URL-адрес direct. Если вы уже вошли в систему ранее в коде, мы надеемся, что сессионный / cookie-файл будет действителен. Используйте функцию для загрузки, которая возвращает полный путь загрузки и собирает их для последующего открытия загруженных файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...