64

Пишем автоматически обновляемую смету в Excel VBA

Задача: сделать смету на ремонтно-строительные работы с автоматическим обновлением цен на материалы

Решение: пишем макрос в Excel

Sub getprice()

Название макроса

Set ws = ThisWorkbook.Worksheets("список")

Присваиваем переменной ws значение листа "список" текущей рабочей книги (текущая - к которой прикреплён модуль VBA)

TotalRow = ws.UsedRange.Rows.Count

Присваиваем переменной TotalRow значение количества использованных строк листа ws

For i = 1 To TotalRow - 1

Начало цикла, начиная с 1 до количества использованных строк - 1 (-1 так как дальше мы адресуем ячейки с переменной i + 1)

TempString = "=VLOOKUP(A" & i + 1 & ",каталог!$H$1:$I$24605,2,0)"

Присваиваем переменной TempString значение формулы ВПР из листа каталог. В макросах используются только английские формулы. В формуле используется переменная, обозначающая номер строки (А1, А2 и т.д.)

ws.Cells(i + 1, 2).Formula = TempString

Заполняем ячейки, начиная с B2 листа ws значением переменной TempString

Next i

Конец цикла

Set IE = CreateObject("InternetExplorer.Application")

Присваиваем переменной IE объект InternetExplorer

For i = 1 To TotalRow - 1

Начало цикла

URL = ws.Cells(i + 1, 2).Value

Присваиваем переменной URL значение ячейки, начиная с ячейки B2 (ВПР ссылки из каталога)

IE.navigate URL

Переходим браузером по URL

Do Until (IE.readyState = 4 And Not IE.Busy)
DoEvents
Loop

Ожидаем загрузку страницы

Set ieDoc = IE.Document

Присваиваем переменной ieDoc значение HTML-кода загруженной страницы

Set detail_elements = IE.Document.getElementsByTagName("span")

Присваиваем массиву detail_elements значение массива всех элементов с тегом "span"

For Each detail_element In detail_elements

Начало цикла

If detail_element.getAttribute("class") = "retailPrice" Then

Проверка условия - равен ли атрибут элемента "class" значению "retailPrice"

ws.Cells(i + 1, 3) = detail_element.innerText

Если условие истинно, записываем внутренний текст элемента в ячейку, начиная с ячейки C2. Этот код считывает цену из интернет-каталога.

End If

Конец условия

Next detail_element

Конец цикла

Next i

Конец цикла

IE.Quit

Закрываем браузер

For i = 1 To TotalRow - 1

Начало цикла

TempString = "=VALUE(C" & i + 1 & ")"

Присваиваем переменной TempString значение формулы ЗНАЧЕН

ws.Cells(i + 1, 4).Formula = TempString

Записываем в ячейки, начиная с D2, формулу из переменной TempString

Next i

Конец цикла

MsgBox "Обновление данных завершено"

Сообщение для удобства

End Sub

Конец макроса

Источник

MS, Libreoffice & Google docs

776 постов15K подписчик

Правила сообщества

1. Не нарушать правила Пикабу

2. Публиковать посты соответствующие тематике сообщества

3. Проявлять уважение к пользователям

4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.

По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях


Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.

Утверждения вроде "пост - отстой", это оскорбление автора и будет наказываться баном.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества