В этом упражнении показано, как считывать данные с веб-сайта, в данном случае актуальные курсы обмена валют с Yahoo.com.
Предполагается, что у читателя отображается лента «Разработчик» и он знаком с редактором VBA. Если нет, погуглите «Excel Developer Tab» или «Excel Code Window».
Предварительные требования включают знание заполнения полей со списком и определения имен..
Рабочая тетрадь состоит из двух листов:
Пользовательский интерфейс:
Поле со списком «Купить» и «Продать» ссылается на приведенный ниже локальный лист данных.
Таблица на D11 будет автоматически вставлена с самого веб-сайта с сохранением пользовательского форматирования.
Xlsm для этого упражнения можно скачать здесь.
Создание приложения самостоятельно.
Создайте лист с двумя полями со списком. Поля со списком будут ссылаться на ячейки на втором листе.
Поле со списком также вызовет код для чтения веб-сайта, используя Изменить мероприятие.
Названия валют можно вставить во второй лист («Валюты») из списка ниже, порядок сортировки зависит от личных предпочтений:
| ZAR |
| USD |
| EUR |
| GBP |
| Швейцарский франк |
| AUD |
| NZD |
| JPY |
| CAD |
| SEK |
| DKK |
| Вероятно |
| СТЕНА |
| HKD |
| SGD |
| ILS |
| САД |
| INR |
| CNY |
Вставьте данные в столбцы B и E.
Определите имена и используйте индексные функции, как показано на рисунке:
Поскольку имена были определены в локальном листе данных «Валюты», лист «Основной» должен просто ссылаться на определенные имена, чтобы получить значение, т.е. = ПРОДАТЬ и = ПОКУПАТЬ для «Основных» ячеек E10 и G10 соответственно.
Мы будем программировать Excel для чтения в Интернете. Однако у него есть собственный встроенный процесс на ленте данных, экземпляр которого вы можете записать как макрос при построении различных сценариев. Обратите внимание, что конфигурация компьютера или браузера может отрицательно сказаться на сценариях веб-страницы.
Кодекс
Вставьте модуль и введите следующее:
Option Explicit
Sub Ticker()
Dim currBuy As String
Dim currSell As String
Range("D11:F14").ClearContents 'prepare the ground for the web data
currBuy = Range("BUY") 'get variable values from Defined Names previously set up
currSell = Range("SELL")
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://finance.yahoo.com/q?s=" & currBuy & currSell & "=X", Destination:=Range("$D$11"))
.Name = "q?s=" & currSell & currBuy & "=X"
.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 = """table1"""
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End sub
Sub DropDown2_Change() 'This event will call the routine above. Object name might differ.
Call Ticker
End Sub
Sub DropDown1_Change()
Call Ticker
End Sub
Сохраните книгу как тип xlsm.
Протестируйте код, изменив значения полей со списком, а затем улучшите формат вставленной таблицы (четыре десятичных знака, линии сетки, затенение?).
Повреждение файлов Excel
Известно, что Excel иногда повреждает файлы при сохранении, после чего пытается выполнить собственную процедуру самовосстановления, которая, по моему опыту, часто просто не работает. Это может иметь катастрофические последствия для пользователя, поскольку уничтожается именно исходный файл (возможно, ваша единственная копия). Поврежденные файлы Excel однако его можно отремонтировать с помощью сторонних инструментов, что значительно сэкономит время и усилия.
Об авторе:
Феликс Хукер — эксперт по восстановлению данных в DataNumen, Inc., которая является мировым лидером в области технологий восстановления данных, включая ремонт rar архив и программные продукты для восстановления sql. Для получения дополнительной информации посетите www.datanumen.com

