У меня есть этот код, который извлекает данные из уже открытого документа Internet Explorer. Проблема в том, что таблица огромна (30x5000), и перемещение всех данных на лист с использованием циклов For занимает более 1 минуты. Я бы хотел, чтобы эта передача данных происходила намного быстрее, если это возможно. Можно ли просто скопировать / вставить всю страницу на лист? Какие-нибудь другие решения?
Set doc = ie.Document
Set hTable = doc.GetElementsByTagName("table")
For Each tb In hTable
Set hBody = tb.GetElementsByTagName("tbody")
For Each bb In hBody
Set hTR = bb.GetElementsByTagName("tr")
For Each tr In hTR
Set hTD = tr.GetElementsByTagName("td")
y = 1 ' Resets back to column A
For Each td In hTD
ws.Cells(z, y).Value = td.innertext
y = y + 1
Next td
DoEvents
z = z + 1
Next tr
Exit For
Next bb
Exit For
Next tb
Запишите все данные в массив, а затем один раз напишите в лист Excel.
1) Есть ли URL-адрес, которым можно поделиться 2) Если этот код работает как есть, то, как упоминалось выше, возможно, он больше подходит для проверки кода в качестве проблемы оптимизации?
Циклы по своей сути медленные. Вы можете попробовать импортировать всю таблицу с помощью Macro Recorder. Я не уверен, что это будет быстрее. Вы не указали URL-адрес, поэтому протестировать эту концепцию невозможно. Если вы не можете ускорить его с помощью Excel, попробуйте сделать то же самое с помощью R или Python. Я лично испытал улучшение примерно в 10 000 раз и даже в 100 000 раз в некоторых процессах, использующих R или Python вместо Excel.
Добро пожаловать на сайт! Ознакомьтесь с тур и страница с инструкциями, чтобы узнать больше о том, как задавать вопросы, на которые можно получить качественные ответы. Вы можете отредактируйте свой вопрос, чтобы включить дополнительную информацию. Не удивляйтесь, если ваш вопрос будет перемещен в Проверка кода - часто работающий код, нуждающийся в улучшении, лучше обрабатывать там. Что касается этого, вы можете использовать XSLT для визуализации CSV таблицы, а затем импортировать этот файл.