Я пытаюсь написать макрос для достижения следующего:
- Откройте 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