Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Обращение к разным книгам excel при написании макроса VBA
 
Доброго времени суток всем!
Прошу помочь с решением очередной задачки по VBA.
Ранее был написан макрос для раскидывания листов excel по создаваемым файлам. Все было замечательно до тех пор, пока не возникла необходимость переименовывать листы в создаваемых файлах. В исходном файле изменять наименования листов нельзя.
На листе "Mapping" исходного файла представлены две таблицы:
- левая содержит соответствие старых и новых имен листов,
- правая - содержит перечень листов, которые должны переноситься в определенные файлы.
Пробовал решить задачу путем добавления нового цикла For...Next в уже существующий, но столкнулся с тем, что справочник находится в исходном файле, а листы которые надо переименовать - в другом. Как правильно обратиться к вновь создаваемым файлам найти у меня не получилось.
ниже привожу код VBA:

Код
Sub test_1()
    Dim ws As Worksheet
    Dim Filename
    Dim NewFileName As String
    Dim i&
    Dim j&
    Dim lLastRow_1 As Long
    Dim lLastRow_2 As Long
    Dim cell As Range
    On Error Resume Next
    lLastRow_1 = Sheets("Mapping").Cells(Rows.Count, 4).End(xlUp).Row
    For i = 2 To lLastRow_1
     Set Filename = ThisWorkbook.Sheets("Mapping").Cells(i, 4)
     NewFileName = ThisWorkbook.Path & "\" & Filename & _
     ".xlsx"
      ThisWorkbook.Sheets(Split(ThisWorkbook.Sheets("Mapping").Cells(i, 5))).Move
      lLastRow_2 = Sheets("Mapping").Cells(Rows.Count, 1).End(xlUp).Row
      For j = 2 To lLastRow_2
          Set cell = Sheets("Mapping").Cells(i, 2)
          Set ws = Worksheets
          ActiveWorkbook.ws.Name = CStr(cell.Value)
      Next
   ActiveWorkbook.SaveAs Filename:=NewFileName
   ActiveWorkbook.Close SaveChanges:=False
    Next
End Sub


Добавив второй цикл, я ничего не добился, только макрос прекращает свое действие, а файл закрывается.
Прошу подсказать, как можно обращаться к разным файлам в данном случае.
Заранее спасибо всем откликнувшимся!
P.S. файл с примером в приложении
поиск всех совпадений и вывод в отдельную ячейку VBA
 
Добрый день!
Прошу помочь с решением следующей задачи:
есть небольшой массив (A1:B6), содержащий в себе перечень классов и соответствующих им значений.
Необходимо в таблицу справа (F1:H5) в столбец "Значения (как получается)" вывести через разделитель "пробел" все значения, присущие определенному классу (рядом находится столбец "Значения (как нужно)" в котором указано какие значения должны выводиться).
К сожалению, у меня хватило опыта написать только лишь алгоритм поиска и вывода последнего значения в массиве (т.к. переменные не накапливаются, а перезатираются последним найденным совпадением).
Прошу подсказать, в каком направлении мне необходимо двигаться дальше, что бы решить данную задачу.
Заранее спасибо всем отписавшимся!
Изменено: Poglad_kota - 24.07.2014 16:26:57
Отправка письма с другого почтового аккаунта Outlook - VBA
 
Добрый день всем!
И снова вопросы по VBA, прошу подсказать по следующее:
ранее был написан макрос для рассылки писем, однако периодически возникает необходимость проведения подобной рассылки с двух различных адресов: один от имени сотрудника, а другой от имени департамента (некие информационные письма).
В Outlook сотрудника подключены две почтовые учетные записи - его (mail1@mail.ru) и департамента (mail2@mail.ru), при этом первичной является учетка сотрудника - по умолчанию письма отправляются с его адреса (и она же привязана к его учетной записи на машине).
Поискав в необъятноим интеренете наткнулся, что метод .Logon имеет четыре опциональных параметра: Profile, Password, ShowDialog, NewSession, попытался прикрутить это в макрос, получилась такая запись
Код
OutApp.Session.Logon mail2@mail.ru, "",True, True
но результат - ноль.
Что я сделал не так?
Ниже привожу часть макроса рассылки:
Код
Sub SendMail()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
    Dim lLastRow As Long
    Dim i&
    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application" )
    OutApp.Session.Logon "mail2@mail.ru", "",True, True
On Error GoTo cleanup
    On Error Resume Next
End Sub
Заранее спасибо всем отписавшимся!
Изменено: Poglad_kota - 21.07.2014 11:58:43
Рассылка при помощи VBA через Outlook
 
Доброго времени суток всем!
Продолжаю цикл вопросов по VBA и прошу помочь с решением очередного вопроса:
Для целей рассылки электронных писем через Outlook написал макрос, который берет данные из таблицы на листе "Data", создает количество писем равное количеству заполненных строк, заполняет их из таблицы и цепляет к письму приложения (список в столбце A).
Результатом работы макроса должны быть 3 письма, каждое из которых содержит приложение соответствующее ему по порядковому номеру.
Т.е. первое письмо содержит приложение_1, второе - приложение_2, а третье - приложение_3.
Однако при формировании писем, первое письмо содержит приложение_1, второе - приложение _1 и приложение_2, а третье - приложение _1, приложение_2 и приложение_3.
ну и так далее.
Что я написал не так? Ведь цикл написан одинаково для всех входящих в него переменных, почему форма каждого письма заполняется корректно, а вот приложения цепляются по нарастающей?
Подскажите, пожалуйста, где я ошибся?
P.S. Для проверки макроса, в папке, куда будет сохранен файл, необходимо создать три пустых файла с именами приложение_1, приложение_2, приложение_3.
Заранее спасибо всем откликнувшимся!
Использование ДВССЫЛ для суммирования по группе листов
 
Доброе утро, всем!
Возникла следующая проблема при использовании формулы ДВССЫЛ:
На листе "Ex" в ячейке A1 написана формула

Код
=СУММ(ДВССЫЛ("1!"&"A1"))

она получает значение из ячейки А1 листа "1", но если необходимо получить сумму ячеек A1 с листов "1" и "2", я использую формулу в ячейке A2

Код
=СУММ(ДВССЫЛ("1:2!"&"A1"))

формула выдает ошибку и суммирование не происходит.
Подскажите, пожалуйста, в чем тут проблема?
Формула записано, вроде, корректно.
Заранее большое спасибо!
Изменено: Poglad_kota - 23.06.2014 11:47:32
Копирование листов в новые файлы по списку с помощью макроса
 
Всем доброго дня!
Начинаю это утро с такого непростого для меня вопроса.
В приложенном файле записан макрос, который копирует из книги листы (1, 2, 3) и вставляет их в создаваемые и сохраняемые в той же папке файлы, в соответствии со списком на листе "map_dir", указанным в диапазоне "A1:B3"
Таким образом, на листе "map_dir" существует строгая привязка, как должен называться файл, в который переносится определенный лист из книги.
т.е. итоговый результат следующий:
лист (1) -> файл "a"
лист (2) -> файл "b"
лист (3) -> файл "c"


Однако возникла необходимость доработать макрос, что бы производить следующее действие:
В создаваемые файлы должно копироваться не по одному листу (как в оригинальном условии), а допустим, в файл "a" копировались листы (1) и (2), а листы (3) и (4) копировались в файл "b"  и т.д. (условие указано на листе "map_dir" в диапазоне "A9:B14"
результат:
лист (1) -> файл "a"
лист (2) -> файл "a"
лист (3) -> файл "b"
лист (4) -> файл "b"
лист (5) -> файл "b"
лист (6) -> файл "c"


т.е. в итоге мы получаем тоже три разных файла, но с разным набором листов. Набор может быть и по два листа, просто для чистоты эксперимента указал разное количество листов.
Также хочу отметить, что наименование листов всегда определено и задается заранее, но может содержать не только цифры, но текстовое значение.

Прошу уважаемых форумчан помочь мне в решении этой задачи.
Честно говоря, опыт макросописания у меня невелик и уверен, даже макрос в примере можно написать более "лаконично" и правильно.
Но я только учусь и буду рад любым замечаниям/комментариям.

Заранее спасибо всем откликнувшимся!
Изменено: Poglad_kota - 14.06.2014 15:10:56
Изменение ссылки на лист и область на листе внутри формулы
 
Добрый день всем!
Возникла следующая задача:
Есть довольно большой перечень листов в книге, каждый из которых имеет название какого-либо города.
На листе Data приведен перечень наименований этих листов, а также область в которой находятся данные в табличном формате.

Если листа два-три, то в зависимости от названия города (столбец В), то можно прописать это в формуле ВПР через формулу ЕСЛИ, однако, если листов несколько десятков? Формула будет раздута и требовать постоянного обновления. Да и ограничение на длину формулы никто не отменял.
Есть ли возможность построить поиск и подтягивание значений таким образом, что бы в формуле, например ВПР (=ВПР(A5;Москва!$A$6:$C$10;3;0) изменять именно условие "Таблица", подтягивая ее из столбца С (Адрес массива), в зависимости от условий в столбце В (Город)?
В таком случае, формула ВПР сразу производила бы поиск на нужном листе и массиве (в данном случае массивы расположены одинаково).

Быть может я размышляю в неправильном направлении и буду рад любым подсказкам.
Решение должно быть именно в виде формулы, а не макроса.
Заранее благодарю всех откликнувшихся!
поиск значений по нескольким признакам
 
Всем доброго времени суток!

Задача была следующей:
Необходимо найти все номера договоров, относящихся к Дополнительному офису (ДО).

Максимум договоров в одном ДО - 3.

Поскольку номер договора не является числом и его нельзя выхватить из массива формулой СУММПРОИЗВ, то была использована формула ВПР, но она производит поиск значения только по одному признаку и подтягивает тот элемент из массива, которые встречается первым (при просмотре значений сверху-вниз).

Для решения этой проблемы в таблицу с исходными данными был добавлен дополнительный признак в столбец D (т.е. по сути нумеруем договоры в каждом ДО), на основе которого был создан признак для поиска в столбце A (где мы объединяем ДО и признак, т.е. получаем новый элемент для поиска) и уже по тому признаку производим поиск в правой табличке.

Так вот, вопрос такой, нет ли более удобных аналогов для решения такой задачи?
т.к. данное решение зависит от сортировки и в принципе не является универсальным ((


Заранее спасибо всем, кто откликнется!

Файл в приложении
Изменено: Poglad_kota - 19.08.2013 21:21:03
Страницы: 1
Наверх