Дата: Понедельник, 17.03.2014, 00:18 |
Сообщение № 1
Группа: Гости
Добрый день. Замучился уже руками все делать, может кто то поможет. Есть файл эксель, в котором 11 листов. Есть задача, каждый вечер отдельный лист сохранять в отдельный файл для разных менеджеров, и отправлять им на почту, и в еще отдельный файл сохранять несколько листов. Файлы для менеджеров защищены одним и тем же паролем, но у каждого свои данные. Есть задумка: 1. при запуске макроса, сохраняются отдельные листы для каждого менеджера с разными паролями, и дается доступ в облако. При этом каждый может посмотреть только свой файл, так знает только свой пароль. 2. Или же сделать так, чтобы при нажатии кнопки сохранить файл проделывалась процедура описанная выше. 3 Может есть какие то другие идеи как это реализовать. Кто может помочь, буду благодарен.
Добрый день. Замучился уже руками все делать, может кто то поможет. Есть файл эксель, в котором 11 листов. Есть задача, каждый вечер отдельный лист сохранять в отдельный файл для разных менеджеров, и отправлять им на почту, и в еще отдельный файл сохранять несколько листов. Файлы для менеджеров защищены одним и тем же паролем, но у каждого свои данные. Есть задумка: 1. при запуске макроса, сохраняются отдельные листы для каждого менеджера с разными паролями, и дается доступ в облако. При этом каждый может посмотреть только свой файл, так знает только свой пароль. 2. Или же сделать так, чтобы при нажатии кнопки сохранить файл проделывалась процедура описанная выше. 3 Может есть какие то другие идеи как это реализовать. Кто может помочь, буду благодарен.vladislav932
Можно и тут. Тогда вопрос, взял из готовых решений кусочек кода [vba]
Код
For Each List In .ThisWorkbook.Worksheets If List.Name <> "Первый" Then List.Copy With .ActiveSheet .UsedRange.Value = .UsedRange.Value
[/vba] макрос копирует все листы, кроме того у которого название "первый". Как этот список дополнить, то есть, дописать название листов исключений. Пробовал подописывать вот эту часть кода [vba]
Код
If List.Name <> "Первый" Then List.Copy
[/vba] так не проходит, пробовал дописать таким образом If List.Name <> ("Первый", "Инвойс", "Дата") Then так тоже не получается.
Можно и тут. Тогда вопрос, взял из готовых решений кусочек кода [vba]
Код
For Each List In .ThisWorkbook.Worksheets If List.Name <> "Первый" Then List.Copy With .ActiveSheet .UsedRange.Value = .UsedRange.Value
[/vba] макрос копирует все листы, кроме того у которого название "первый". Как этот список дополнить, то есть, дописать название листов исключений. Пробовал подописывать вот эту часть кода [vba]
Код
If List.Name <> "Первый" Then List.Copy
[/vba] так не проходит, пробовал дописать таким образом If List.Name <> ("Первый", "Инвойс", "Дата") Then так тоже не получается.vladislav932
Сообщение отредактировал Serge_007 - Вторник, 18.03.2014, 23:14
Есть ли возможность чтобы все листы сохранялись в разные заданные папки
Есть. Вариант, на каждом отдельном сохраняемом листе в определённой ячейке прописать необходимый путь записи и имя файла. Например в А1 D:\ПАПКА\ПОДПАПКА\ПОДПОДПАПКА\Иванов.xls И код.
[vba]
Код
Sub ЛистыВфайл() Dim List As Worksheet, iPath$ With Application .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False For Each List In .ThisWorkbook.Worksheets If List.Name <> "Первый" And List.Name <> "Инвойс" And List.Name <> "Дата" Then List.Copy With .ActiveSheet iPath = Range("A1") .UsedRange.Value = .UsedRange.Value .Buttons.Delete 'Óäàëÿåì òîëüêî êíîïêè '.DrawingObjects.Delete 'Óäàëÿåì âñå ýëåìåíòû .SaveAs Filename:=iPath '$ & List.Name .Parent.Close saveChanges:=True End With End If Next .EnableEvents = True .DisplayAlerts = True .ScreenUpdating = True End With End Sub
Есть ли возможность чтобы все листы сохранялись в разные заданные папки
Есть. Вариант, на каждом отдельном сохраняемом листе в определённой ячейке прописать необходимый путь записи и имя файла. Например в А1 D:\ПАПКА\ПОДПАПКА\ПОДПОДПАПКА\Иванов.xls И код.
[vba]
Код
Sub ЛистыВфайл() Dim List As Worksheet, iPath$ With Application .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False For Each List In .ThisWorkbook.Worksheets If List.Name <> "Первый" And List.Name <> "Инвойс" And List.Name <> "Дата" Then List.Copy With .ActiveSheet iPath = Range("A1") .UsedRange.Value = .UsedRange.Value .Buttons.Delete 'Óäàëÿåì òîëüêî êíîïêè '.DrawingObjects.Delete 'Óäàëÿåì âñå ýëåìåíòû .SaveAs Filename:=iPath '$ & List.Name .Parent.Close saveChanges:=True End With End If Next .EnableEvents = True .DisplayAlerts = True .ScreenUpdating = True End With End Sub
[/vba]
Да, естно, ПАПКИ и ПОДПАПКИ должны существовать.Wasilich
Сообщение отредактировал Wasilic - Среда, 19.03.2014, 00:11
Спасибо, так работает. Осталось чуть чуть до ума довести. Нужно чтобы листы: Дима, Валентин, Валентина, Татьяна, Любомль, Одесса, Данные, сохранялись в отдельную папку:D:\ГуглДиск\перевозки\Таможня\Таможня.xls ну и может есть возможность запуска скрипта по времени, или при нажатии кнопки сохранить, и хотелось бы чтобы каждый файл сохранялся с паролем. Заранее спасибо.
Спасибо, так работает. Осталось чуть чуть до ума довести. Нужно чтобы листы: Дима, Валентин, Валентина, Татьяна, Любомль, Одесса, Данные, сохранялись в отдельную папку:D:\ГуглДиск\перевозки\Таможня\Таможня.xls ну и может есть возможность запуска скрипта по времени, или при нажатии кнопки сохранить, и хотелось бы чтобы каждый файл сохранялся с паролем. Заранее спасибо.vladislav932
Нужно чтобы листы: Дима, Валентин, Валентина, Татьяна, Любомль, Одесса, Данные, сохранялись в отдельную папку:D:\ГуглДиск\перевозки\Таможня\Таможня.xls
[vba]
Код
Sub СохранитьЛисты() Sheets(Array("Дима", "Валентин", "Валентина", "Татьяна", "Любомль", "Одесса", "Данные")).Copy ActiveWorkbook.SaveAs "D:\ГуглДиск\перевозки\Таможня\Таможня.xls" ActiveWorkbook.Close False End Sub
Нужно чтобы листы: Дима, Валентин, Валентина, Татьяна, Любомль, Одесса, Данные, сохранялись в отдельную папку:D:\ГуглДиск\перевозки\Таможня\Таможня.xls
[vba]
Код
Sub СохранитьЛисты() Sheets(Array("Дима", "Валентин", "Валентина", "Татьяна", "Любомль", "Одесса", "Данные")).Copy ActiveWorkbook.SaveAs "D:\ГуглДиск\перевозки\Таможня\Таможня.xls" ActiveWorkbook.Close False End Sub
Сорри, файл поправил. И при сохранении нескольких листов в файл выскакивает ошибка. Пробовал менять в макросе формат файла на xlsm, но ничего не дает.
Сорри, файл поправил. И при сохранении нескольких листов в файл выскакивает ошибка. Пробовал менять в макросе формат файла на xlsm, но ничего не дает.vladislav932
Sub СохранитьЛисты() Sheets(Array("Дима", "Валентин", "Валентина", "Татьяна", "Любомль", "Одесса", "Данные")).Copy ActiveWorkbook.SaveAs "D:\ГуглДиск\перевозки\Таможня\Таможня.xlsm" ActiveWorkbook.Close False End Sub
[/vba]
вот так выглядит код:
[vba]
Код
Sub СохранитьЛисты() Sheets(Array("Дима", "Валентин", "Валентина", "Татьяна", "Любомль", "Одесса", "Данные")).Copy ActiveWorkbook.SaveAs "D:\ГуглДиск\перевозки\Таможня\Таможня.xlsm" ActiveWorkbook.Close False End Sub