Страницы: 1
RSS
После отправки писем из Excel через Outlook нужно записать дату отправки в Excel.
 
Добрый день, друзья

Во вложенном файле Запрос - 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 - 07.05.2018 11:08:44
 
Цитата
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, что заметно тормозит ваш макрос.
Изменено: Dima S - 07.05.2018 13:30:36
 
Dima S,

Ваш вариант кода не работает.

Подскажите пожалуйста если файл "БАЗА ЗАЯВОК 2018" будут использовать в общем доступе и одновременно разные пользователи запустят выполнение макроса будет конфликт записи данных или нет?

При условии что записи у каждого пользователя буду в разные строки, но одновременно.
Изменено: Mutarix - 11.05.2018 11:44:43
 
Dima S, добрый день

Выявил не корректность работы кода.
После запуска макроса

1) Удаляет предыдущие записи из столбца AI
2) Записывает дату в строки не соответствующие Коду (№ Заявки) (не понятно по какой логике выполняется запись даты)

Для понимания макрос запускается в файле Запрос - mail где находиться список с кодами (№ Заявки), а запись даты выполняется в файл База заявок 2018 по заданному списку кодов.
Изменено: Mutarix - 10.05.2018 14:07:54
 
Добрый день, Друзья

Решение найдено.
Скрытый текст
 
Кросс
https://www.excel-vba.ru/forum/index.php?topic=5618.0
 
vikttur,

Что значит Кросс?
Не нужно делиться информацией.
 
Смотрю "не усекли" момент про использование j в
Код
Range("ai1" & j))

- не нужно к единице лепить справа ещё цифры, нужно эти цифры/число лепить вместо единицы!
 
Цитата
Mutarix написал: Что значит Кросс?
Стоит ознакомиться с правилами форума, чтобы не возникали ненужные вопросы
Цитата
4. Не рекомендуется
   4.1. Создавать одинаковые темы или сообщения в разных форумах (cross-posting). Публикуя один и тот же вопрос в разных форумах и на дружественных сайтах вы заставляете сразу нескольких людей параллельно думать над вашей задачей и обесцениваете усилия тех, кто даст ответ вторым-третьим и т.д.
Страницы: 1
Наверх