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

Страницы: 1 2 След.
Обращение к разным книгам excel при написании макроса VBA
 
Большое спасибо за исправления и предложенное решение!
Обращение к разным книгам excel при написании макроса VBA
 
Спасибо за отклик!
Проверил - файл закрываться перестал, листы создаются, как и прежде, но не переименовываются. Их имена остаются без изменений.
Есть ли у кого-нибудь еще какие идеи?
Заранее спасибо!.
Изменено: Poglad_kota - 12.08.2014 09:42:12
Обращение к разным книгам 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
 
Спасибо!
Поизучаю на досуге как раз.
поиск всех совпадений и вывод в отдельную ячейку VBA
 
Цитата
4 пишет: Если таблицы большие, то лучше работать с массивом, который Вы объявили, но не
используете))
Большое спасибо!
Да, объявить то я его объявил, а что с ним дальше делать не придумал)
Но первый шаг сделан, даа)
поиск всех совпадений и вывод в отдельную ячейку VBA
 
Добрый день!
Прошу помочь с решением следующей задачи:
есть небольшой массив (A1:B6), содержащий в себе перечень классов и соответствующих им значений.
Необходимо в таблицу справа (F1:H5) в столбец "Значения (как получается)" вывести через разделитель "пробел" все значения, присущие определенному классу (рядом находится столбец "Значения (как нужно)" в котором указано какие значения должны выводиться).
К сожалению, у меня хватило опыта написать только лишь алгоритм поиска и вывода последнего значения в массиве (т.к. переменные не накапливаются, а перезатираются последним найденным совпадением).
Прошу подсказать, в каком направлении мне необходимо двигаться дальше, что бы решить данную задачу.
Заранее спасибо всем отписавшимся!
Изменено: Poglad_kota - 24.07.2014 16:26:57
Отправка письма с другого почтового аккаунта Outlook - VBA
 
Цитата
6 пишет: Есть такой параметр - .SetOnBehalfOfName...
Большое спасибо! Проблема решена, главное, что бы у пользователя были соответствующие права от администратора.
Ну и еще использовал по глупости копипасту с Вашего сообщения, а там буква пропущена, позор мне)
Параметр .SentOnBehalfOfName
Изменено: Poglad_kota - 22.07.2014 10:36:21
Отправка письма с другого почтового аккаунта Outlook - VBA
 
Присоединяюсь к просьбе Nic70y, хотя интересует именно смена ящика, с остальным уже сталкивался)
Изменено: Poglad_kota - 21.07.2014 14:30:18
Отправка письма с другого почтового аккаунта Outlook - VBA
 
вот, как раз этим я сейчас и пытаюсь заниматься - тоже пришел к этой идее)
Отправка письма с другого почтового аккаунта Outlook - VBA
 
Ни у кого больше нет идей? (
Отправка письма с другого почтового аккаунта Outlook - VBA
 
Изменения внес, спасибо! Но все равно не работает)
Изменено: Poglad_kota - 21.07.2014 11:47:48
Отправка письма с другого почтового аккаунта Outlook - VBA
 
Поправил, но все равно результат тот же.
Спасибо за поправку!
Отправка письма с другого почтового аккаунта 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
 
А с помощью какого метода можно добавлять файлы не коллекцией, а по одному?
Прошу прощения за такой вопрос, но пребывал в уверенности, что это делает метод .Attachments.Add, а поиск в гугле не дал внятных результатов - везде ссылка на .Attachments.Add
Спасибо!
Изменено: Poglad_kota - 07.07.2014 11:04:21
Рассылка при помощи VBA через Outlook
 
Доброго времени суток всем!
Продолжаю цикл вопросов по VBA и прошу помочь с решением очередного вопроса:
Для целей рассылки электронных писем через Outlook написал макрос, который берет данные из таблицы на листе "Data", создает количество писем равное количеству заполненных строк, заполняет их из таблицы и цепляет к письму приложения (список в столбце A).
Результатом работы макроса должны быть 3 письма, каждое из которых содержит приложение соответствующее ему по порядковому номеру.
Т.е. первое письмо содержит приложение_1, второе - приложение_2, а третье - приложение_3.
Однако при формировании писем, первое письмо содержит приложение_1, второе - приложение _1 и приложение_2, а третье - приложение _1, приложение_2 и приложение_3.
ну и так далее.
Что я написал не так? Ведь цикл написан одинаково для всех входящих в него переменных, почему форма каждого письма заполняется корректно, а вот приложения цепляются по нарастающей?
Подскажите, пожалуйста, где я ошибся?
P.S. Для проверки макроса, в папке, куда будет сохранен файл, необходимо создать три пустых файла с именами приложение_1, приложение_2, приложение_3.
Заранее спасибо всем откликнувшимся!
Использование ДВССЫЛ для суммирования по группе листов
 
Тоже интересный подход. Спасибо!
Использование ДВССЫЛ для суммирования по группе листов
 
Владимир
большое спасибо за интересное решение! и за ссылку тоже)
Использование ДВССЫЛ для суммирования по группе листов
 
Тогда, быть может подскажете, какой-нибудь аналог ДВССЫЛ для решения данной задачи?
Спасибо!
Использование ДВССЫЛ для суммирования по группе листов
 
Дело в том, что диапазон листов все время изменяется, поэтому формула не найдя лист, на который необходимо ссылаться, просто выдаст #ССЫЛКА!
В этом плане ДВССЫЛ был бы хорошим решением, просто ссылаясь на ячейку, в которой был бы указан диапазон суммируемых листов н-р: 1:67, а в следующий раз 1:63.
Решение же с

Код
=СУММ('1:2'!A1)

хорошее, но не очень подходящее - все время придется корректировать значение и протягивать его. Будет не очень удобно пользователям.
Но за совет спасибо!
Использование ДВССЫЛ для суммирования по группе листов
 
т.е. моя задача в принципе не решаема с помощью ДВССЫЛ?
Очень жаль
Изменено: Poglad_kota - 23.06.2014 11:57:22
Использование ДВССЫЛ для суммирования по группе листов
 
В том то и дело, что ни добавление одинарных кавычек, ни прочие действия не помогли в суммировании через ДВССЫЛ.
Дело в том, что количество листов, на которых необходимо проводить суммирование будет изменяться, потому в качестве решения попробовал использовать ДВССЫЛ, но вот никак)
Использование ДВССЫЛ для суммирования по группе листов
 
Доброе утро, всем!
Возникла следующая проблема при использовании формулы ДВССЫЛ:
На листе "Ex" в ячейке A1 написана формула

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

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

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

формула выдает ошибку и суммирование не происходит.
Подскажите, пожалуйста, в чем тут проблема?
Формула записано, вроде, корректно.
Заранее большое спасибо!
Изменено: Poglad_kota - 23.06.2014 11:47:32
Копирование листов в новые файлы по списку с помощью макроса
 
Поправил с учетом замечаний, работает. Здорово!
Большое спасибо!
Копирование листов в новые файлы по списку с помощью макроса
 
Hugo, смотрите, мне удалось обнаружить следующую ошибку:
Макрос корректно отрабатывает только если в момент его запуска активен лист "Mapping_dir", т.е. в книге может быть создано любое количество листов (как и те, что участвуют в макросе, так и просто другие листы). Но если активен любой другой лист в момент запуска, то файл закрывается без сохранения.
Файл с примером в приложении
Заранее спасибо!
Изменено: Poglad_kota - 16.06.2014 12:51:51
Копирование листов в новые файлы по списку с помощью макроса
 
в выходные тестил макрос, работает действительно не очень стабильно и бывает файл закрывается без сохранения, не смотря на то что прописал условие ThisWorkbook.
Может кто-нибудь подсказать, что можно улучшить для стабильной работы макроса?
Заранее спасибо!
Изменено: Poglad_kota - 16.06.2014 12:51:38
Копирование листов в новые файлы по списку с помощью макроса
 
Hugo, большое спасибо!
Сейчас попробую исправить.
Скажите, так будет корректно?
Код
Set Filename = ThisWorkbook.Sheets("map_dir").Cells(i, 2)  
ThisWorkbook.Sheets(Split(Cells(i, 3))).Copy
Изменено: Poglad_kota - 16.06.2014 12:51:28
Копирование листов в новые файлы по списку с помощью макроса
 
Hugo, переделал код с учетом комментария, получилась красивая красота.
Большое спасибо за идею!
Ниже привожу текст макроса - может кому пригодится.
Код
Sub Wb_creation()
    Dim ws As Worksheet
    Dim Filename 
    Dim NewFileName As String 
    Application.DisplayAlerts = False
    Dim i&
    On Error Resume Next
     For i = 1 To 3         
     Set Filename = Sheets("map_dir".Cells(i, 2))           
     NewFileName = ThisWorkbook.Path & "\" & Filename & _
     ".xlsx"
     Sheets(Split(Cells(i, 3))).Copy       
      ActiveWorkbook.Sheets(1).Name = ws.Name 
      ActiveWorkbook.SaveAs Filename:=NewFileName 
      ActiveWorkbook.Close SaveChanges:=False
    Next
Application.DisplayAlerts = True
End Sub
Изменено: Poglad_kota - 14.06.2014 15:11:17
Копирование листов в новые файлы по списку с помощью макроса
 
Всем доброго дня!
Начинаю это утро с такого непростого для меня вопроса.
В приложенном файле записан макрос, который копирует из книги листы (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
Изменение ссылки на лист и область на листе внутри формулы
 
Ха-ха, самое интересное, что я пробовал этот вариант, но видимо, был невнимателен и допустил ошибку.
Большое спасибо!
Кстати, а есть ли еще варианты, кроме формулы ДВССЫЛ?
Страницы: 1 2 След.
Наверх