Во вложенном файле Запрос - mail реализован макрос который выполняет создание и отправку писем через Outlook. После запуска макроса формируются письма и таблицы, которые вставляются в тело письма. После этого макрос делает запись текущей даты в таблицу БАЗА ЗАЯВОК 2018 в столбец AI напротив строки которая содержит код (№ Заявки). То есть в таблице Запрос - mail есть сформированная таблица где каждая строка имеет код (№ Заявки), макрос сравнивает код (№ Заявки) между таблицами "Запрос - mail" и "БАЗА ЗАЯВОК 2018" находит совпадение и делает запись в таблицу "БАЗА ЗАЯВОК 2018" в столбец AI.
Запись даты в таблицу "БАЗА ЗАЯВОК 2018" реализована в следующем коде:
Код
With iBook.Worksheets("База") j = .Range("b" & .Rows.Count).End(xlUp).Row
arr(0) = .Range(.[a1], .Range("ai1" & j)).Formula
For i = 1 To UBound(arr(0))
itxt = arr(0)(i, 2)
If objDic.Exists(itxt) Then arr(0)(i, UBound(arr(0), 2)) = objDic.Item(itxt)
Next i
.Range("a1").Resize(UBound(arr(0)), UBound(arr(0), 2)).Formula = arr(0)
iBook.Save
End With
Макрос работает следующем образом:
Переносит все данные из таблицы "БАЗА ЗАЯВОК 2018" в массив присваивает даты и выгружает эти данные обратно.
Это очень ресурсозатратный метод, когда в таблице "БАЗА ЗАЯВОК 2018" больше 10 000 строк. Кроме этого по не понятной причини растёт размер файла, буквально удваивается.
Подскажите пожалуйста как изменить код, чтобы запись даты выполнялась без загрузки всех данных из таблицы "БАЗА ЗАЯВОК 2018" в массив, а выполнялся поиск нужной строки в "БАЗА ЗАЯВОК 2018" с последующей записью даты согласно кода (№ Заявки) заданного в таблице "Запрос - mail".
или
Загружались в массив из таблицы "БАЗА ЗАЯВОК 2018" только те строки которые соответствуют коду (№ Заявки) заданному в таблице "Запрос - mail"
Mutarix написал: чтобы запись даты выполнялась без загрузки всех данных из таблицы
не загружать все данные.
Код
With iBook.Worksheets("База")
j = .Range("b" & .Rows.Count).End(xlUp).Row
arr(0) = .Range(.[b1], .Range("b" & j)).Formula
For i = 1 To UBound(arr(0))
itxt = arr(0)(i, 1)
If objDic.Exists(itxt) Then arr(0)(i,1) = objDic.Item(itxt) Else arr(0)(i,1) = ""
Next i
.Range("ai1").Resize(UBound(arr(0)), 1).Formula = arr(0)
iBook.Save
End With
не знаю, опечатка ли это у вас или что. но если j = 10000, то ваше .Range("ai1" & j) будет уже 110000, что заметно тормозит ваш макрос.
Подскажите пожалуйста если файл "БАЗА ЗАЯВОК 2018" будут использовать в общем доступе и одновременно разные пользователи запустят выполнение макроса будет конфликт записи данных или нет?
При условии что записи у каждого пользователя буду в разные строки, но одновременно.
Выявил не корректность работы кода. После запуска макроса
1) Удаляет предыдущие записи из столбца AI 2) Записывает дату в строки не соответствующие Коду (№ Заявки) (не понятно по какой логике выполняется запись даты)
Для понимания макрос запускается в файле Запрос - mail где находиться список с кодами (№ Заявки), а запись даты выполняется в файл База заявок 2018 по заданному списку кодов.
Dim r& Dim f As Range With iBook.Worksheets("База") For r = 2 To Sht.Cells(Rows.Count, 1).End(xlUp).Row Set f = .Range("B:B").Find(what:=Sht.Cells(r, 1), lookat:=xlWhole) If Not f Is Nothing Then f.Offset(0, 33).Value = Date Next r End With
Стоит ознакомиться с правилами форума, чтобы не возникали ненужные вопросы
Цитата
4. Не рекомендуется 4.1. Создавать одинаковые темы или сообщения в разных форумах (cross-posting). Публикуя один и тот же вопрос в разных форумах и на дружественных сайтах вы заставляете сразу нескольких людей параллельно думать над вашей задачей и обесцениваете усилия тех, кто даст ответ вторым-третьим и т.д.