Новости:

Прикрепить к сообщению можно только файлы xls, gif, jpg, rar, zip,7z, bas, frm, cls, doc размером до 150 Кб.

Главное меню

Сохранить книгу EXCEL в папку по условию

Автор vladturbo, 30.09.2012, 15:45

« назад - далее »

Poltava

Только подумал что нужно еще и диапазон печати отвязать от листа. Теперь диапазон печати определяется автоматически
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

vladturbo

Спасибо, придумал другое решение, оно в сегодняшней теме "Макрос сохраняет куда ему вздумается..." Если не затруднит посмотрите

Poltava

Меня не затруднит, я посмотрел, решение проблемы явное и лежит на поверхности! я разобрался где то за минуту. Но отвечу вам лишь одно. Учите мат часть! Вы не считаете нужным прислушиваться к тому что вам пишут и говорят, я потратил не менее часа для написания для Вас макроса! вы даже не посмотрев, не проанализировав его, не учтя советы, не поняв методы его работы просто отказались его хоть как то комментировать. Исходя из того что в теме вы более ничего не написали делаем вывод что вас все устроило и вы просто забыли об этом упомянуть. Каково мое удивление видеть клон темы здесь! Вы просите решить туже задачу, которую для вас уже решили. Отвечать на ваши вопросы пока Вы не прокомментируете чем вас не устроило решение изложенное выше считаю пустой тратой времени
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

Poltava

У меня пара вопросов:
1) Зачем усложнять и писать отдельно макрос для создания папок если папки будут созданы автоматически при создании первого договора. Если Вы объясните зачем именно так или скажите что это именно принципиально чтобы папки создавались отдельным макросом то тогда распишите когда они должны создаваться, при включении экселя, при открытии этого файла, при переходе на лист при создании первого договора ???
2) Я так понимаю кроме момента изложенного выше Вас в предложенном макросе все устраивает? Если нет то опишите что работает не так.
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

kuklp

vladturbo, я вообще не понимаю, что Вы делаете на форуме. Вы не слушаете советы специалистов, упорно грузите в свой макрос макрорекордерный мусор. Какой смысл форумчанам тратить на Вас время, если тратится оно заведомо впустую? Играйтесь себе дальше с макрорекордером.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

vladturbo

#20
Добрый день, уважаемые!

Poltava:

1. Макрос для создания папки написан для удобства, (так хочет пользователь!)

В модуль книги:

Private Sub Workbook_Open()
Dim dt As Date, d As Integer
d = Day(Now)
If d < 1 Or d > 25 Then Exit Sub
dt = GetSetting("NOV", "Run", "LastDate", 0)
If Year(Now) = Year(dt) And Month(Now) = Month(dt) Then Exit Sub
SaveSetting "NOV", "Run", "LastDate", CDbl(Date)
Application.Run "Создание_папки"
End Sub

Каждый раз при открытии книги проверяется текушая дата, если дата в заданном диапазоне (с 1 числа по 25 число любого месяца) однократно запускается макрос "Создание_папки"

Соответственно создается 3 папки (2 за предыдущий месяц и одна за текущий)

Sub Создание_папки()
Dim PathToSave As String, FolderName As String, FellPathToSave As String
Dim fs As Object
PathToSave = "C:\"
FolderName = CStr(Format(DateAdd("m", -1, Now), "mmmm yyyy") & " Электроэнергия")
FellPathToSave = PathToSave & FolderName & "\"
Set fs = CreateObject("Scripting.FileSystemObject")
If Not fs.FolderExists(FellPathToSave) Then
   fs.CreateFolder (FellPathToSave)
   End If
       PathToSave = "C:\"
       FolderName = CStr(Format(DateAdd("m", -1, Now), "mmmm yyyy") & " Телефоны")
       FellPathToSave = PathToSave & FolderName & "\"
       Set fs = CreateObject("Scripting.FileSystemObject")
       If Not fs.FolderExists(FellPathToSave) Then
           fs.CreateFolder (FellPathToSave)
           End If
               PathToSave = "C:\"
               FolderName = CStr(Format(DateAdd("m", 0, Now), "mmmm yyyy") & " Водоснабжение")
               FellPathToSave = PathToSave & FolderName & "\"
               Set fs = CreateObject("Scripting.FileSystemObject")
               If Not fs.FolderExists(FellPathToSave) Then
                   fs.CreateFolder (FellPathToSave)
                   End If
End Sub


2. Не могу въехать, почему макрос сохраняет в "Мои документы", а если вначале работы с Excel сохранить вручную любой файл в папку "ММММ ГГГГ Электроэнергия", начинает правильно работать и сохранять в ту папку, что прописана в макросе. Вот код:

Sub Сохранить_Электроэнергия()
   Application.ScreenUpdating = False
   Sheets.Add.Name = "Лист1"
   Sheets("ЭЛЕКТРИЧЕСТВО").Select
   Cells.Select
   Selection.Copy
   Sheets("Лист1").Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False
   Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
       SkipBlanks:=False, Transpose:=False
   Range("A1").Select
   ActiveSheet.Name = [D14]
       On Error Resume Next
       Folder$ = "C:\" & Sheets("ЭЛЕКТРИЧЕСТВО").Range("d20") & " Электроэнергия" & "\"
       Filename = [D14] & ".xls"
           Err.Clear: ActiveSheet.Copy: DoEvents
           If Err Then Exit Sub
           ActiveWorkbook.SaveAs Filename, xlWorkbookNormal
           ActiveWorkbook.Close False
               Sheets("ЭЛЕКТРИЧЕСТВО").Select
               Range("D14").Select
                           Application.DisplayAlerts = False
                           Sheets(Range("D14").Value).Select
                           ActiveWindow.SelectedSheets.Delete
                                       Application.ScreenUpdating = True
                                       Application.DisplayAlerts = True
End Sub


KuklP:

Я не профессионально владею VBA, в те времена, когда я учился в школе и в институте компьютеры занимали помещения в 500 кв.м., а жесткий диск для них был размером с большую кастрюлю (части от этих хард-дисков, можно иногда видеть на дачных участках, их обычно используют в качестве телевизионных антенн :)), поэтому что могу пишу макрорекордером, так мне проще и быстрее.

Poltava

ЦитироватьЯ не профессионально владею VBA,
Поэтому нужно четко и понятно изначально ставить задачу! Для того чтобы вам помочь корректно нужно четко понимать поставленную перед вами задачу а не тот фрагмент который вы даете!
К примеру об этом вы пишите в первый раз!
ЦитироватьСоответственно создается 3 папки (2 за предыдущий месяц и одна за текущий)
мы не владеем телепатией и не можем знать все что вы задумали! по описанной задаче в первых сообщениях Вам был предложен оптимальный код! Но как оказалось задача была поставлена не совсем корректно. Прошу вам описать все что должен делать макрос и желательно еще знать для чего, а не только кусочек поставленной задачи. Позже посмотрю ваши макросы но лучше к тому времени расскажите полную картину!
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

vladturbo

#22
Полная картина:

Макрос создается для автоматизации учета, хранения и печати актов выполненных работ.

1.При открытии рабочего файла Excel "Арендаторы Договора Ресурсы", в диапазоне дат с 01 по 25 число текущего месяца, макрос разово создает 3 папки в корне диска С:\ и присваивает им имена формата 1-я папка: "Название предыдущего месяца текущий год Электроэнергия", 2-я папка: "Название предыдущего месяца текущий год Телефоны", 3-я папка: "Название текущего месяца текущий год Водоснабжение". Папки создаются однократно в текущем месяце, при первом обращении пользователя к файлу "Арендаторы Договора Ресурсы"!
2.При работе с листом "ЭЛЕКТРИЧЕСТВО", после выполнения макроса "Сохранить_электроэнергия" (макрос будет привязан к кнопке) макрос создает новую книгу присваивает созданной книге имя, взятое из ячейки D14 активного листа, на "Лист1" созданной книги копирует значения и форматы с активного листа рабочей книги "Арендаторы Договора Ресурсы", и сохраняет созданную книгу в папку "Название предыдущего месяца текущий год Электроэнергия", аналогично сохраняются данные при работе с листом "ТЕЛЕФОН" только в папку "Название предыдущего месяца текущий год Телефоны" и при работе с листами "ВОДА", "ВОДА КАНАЛИЗАЦИЯ", "ВОДА КАНАЛИЗАЦИЯ ЛИФТ" сохраняется в папку "Название текущего месяца текущий год Водоснабжение".
3.Соответственно, макрос сохраняет все что описано в п.2. в период с первого обращения к файлу "Арендаторы Договора Ресурсы" в текущем месяце до последнего дня текущего месяца, при наступлении следующего месяца, все что было создано остается в корне С:\ в соответствующих папках, и все начинается  заново с п.1

4. Т.К. "Большой брат не дремлет" прошу помочь только в одном:
Почему макрос сохраняет все в "Мои документы", однако, если вначале работы с файлом "Арендаторы Договора Ресурсы" сохранить вручную любой файл в папку "Название предыдущего месяца текущий год Электроэнергия", все начинает правильно работать и сохранять в ту папку, что прописана в макросе.
Вот код:

Sub Сохранить_Электроэнергия()
   Application.ScreenUpdating = False
   Sheets.Add.Name = "Лист1"
   Sheets("ЭЛЕКТРИЧЕСТВО").Select
   Cells.Select
   Selection.Copy
   Sheets("Лист1").Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False
   Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
       SkipBlanks:=False, Transpose:=False
   Range("A1").Select
   ActiveSheet.Name = [D14]
       On Error Resume Next
       Folder$ = "C:\" & Sheets("ЭЛЕКТРИЧЕСТВО").Range("d20") & " Электроэнергия" & "\"
       Filename = [D14] & ".xls"
           Err.Clear: ActiveSheet.Copy: DoEvents
           If Err Then Exit Sub
           ActiveWorkbook.SaveAs Filename, xlWorkbookNormal
           ActiveWorkbook.Close False
               Sheets("ЭЛЕКТРИЧЕСТВО").Select
               Range("D14").Select
                           Application.DisplayAlerts = False
                           Sheets(Range("D14").Value).Select
                           ActiveWindow.SelectedSheets.Delete
                                       Application.ScreenUpdating = True
                                       Application.DisplayAlerts = True
End Sub

kuklp

#23
Я не профессионально владею VBA, в те времена, когда я учился в школе и в институте компьютеры занимали помещения в 500 кв.м.Как трогательно! В мое время о компьютерах вообще никто не знал. А первый свой ПК я собрал в 1993 году на советских микросхемах(проц. кр540) по схеме из журнала "Радио" авторов Сафронова и Сугоняко. И на помойках выискивал материал для корпуса этого чуда техники. Вы еще не в слезах? Я всю жизнь проработал электрогазосварщиком. Понятно, к чему я это?Я не профессионально владею VBAПрофессионализм зависит от Вашего желания, или нежелания освоить предмет.
Перечитайте еще раз мой пост от 05 Октябрь 2012, 22:25:10
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

vladturbo


Poltava

То есть по сути методика сохранения из приложенного выше мною файла вас устраивает не устраивает только то что папки создаются не отдельно а сразу и с другими названиями! Я это к тому что проще переделать предложенный вам макрос чем разбираться и чистить ваш код
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

Poltava

1) Возможно ли назвать листы в соответствии с названиями папок! То есть чтобы лист ЭЛЕКТРИЧЕСТВО сохранялся не в папку с названием  Электроэнергия, а в папку с названием ЭЛЕКТРИЧЕСТВО то есть чтобы та часть которая после даты совпадала с первым словом в названии листа! Это значительно упростит макрос.
2) Что делать если пользователь сохраняет контракт с листа вода а потом для того же арендатора с листа вода канализация ведь имя у них совпадет и папка назначения тоже совпадет!
3) Все равно не понимаю зачем создавать папки при открытии книги, а не при сохранении договора, ведь при открытии на другом компьютере для просмотра файл начнет засорять его ненужными пустыми папками!
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

vladturbo

Добрый вечер!

3) Работает только один пользователь на одном компьютере!
2)По умолчанию контракты не повторяются, т.е. на листе вода привязаны одни арендаторы, на листе вода канализация - другие, если арендатор есть на листе вода, соответственно его нет на листе вода канализация и вода канализация лифт. Для каждого листа перечень арендаторов уникален.
1)Возможно, и с листом и папкой телефон понятно, но в таком случае возникает резонный вопрос, а как быть в случае листов вода, вода канализация и вода канализация лифт, ведь все они должны сохраняться в папку водоснабжение (или как Вы предлагаете вода)

Poltava

Вот посмотрите переделал с учетом новой информации
Изменения:
- При запуске файла проверяем дату и если она не больше 25 и папки с приставкой Электричество не существует то будут созданы все три папки
- На листы добавил кнопку создать договор
- Договор нельзя создать если текущее число месяца больше 25 (я так понял ваши слова о том что папки нужно создавать с 1 по 25 число следовательно в другие числа договора не могут быть заключены поскольку если запустить 26 то папки не будут созданы и сохранять некуда)
- Процедуру из модуля книги предлагаю заменить на Auto_Open(я не понимаю зачем засорять реестр если можно просто проверить существование папки! вдруг у пользователя не окажется прав на работу с реестром!)
- Суффиксы папок соответствуют названиям листов все что связано с водой сохраняется в папку с соответствующим суффиксом
Особенности:
- На листе не должно быть больше 1 вызова функции руб(не встретил у вас потому не стал заморачиваться)
- Лист вода должен быть четвертым (это определено макросом и  может быть изменено)
- Даже если какой то из папок не существует то она будет создана в процессе формирования договора
- Во время создания договора на листе с договором удаляется все графика(так как у вас ее нету то не делал отлов кнопки, а просто удалил все) это для того чтоб не было кнопки в файлах договоров

Для наглядности сейчас договор можно создать только до 5 числа за это отвечает вторая строка в процедуре СоздатьДоговор просто замените в строке If Day(Now) > 5 число 5 на 25
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

Wasilic

Просмотрев тему, хочу и я задать несколько вопросов vladturbo.
1.Сколько всего арендаторов в проекте?
2.Сколько актов (договоров) в течение месяца выписывается на одного арендатора?
3.Если для каждого листа "ТЕЛЕФОН", "ВОДА" и.т.д. арендаторы не повторяются,
  то почему на листе "СПИСОК" только один список для всех листов?
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.