Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2014, 22:37   #11
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Лови,думаю разберешься
Код:
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Boolean

Function FolderCreate(ByVal path As String) As Boolean
    On Error GoTo ErrFailed
    FolderCreate = MakeSureDirectoryPathExists(path)
    Exit Function
ErrFailed:
    FolderCreate = False
End Function

Function FolderExists(ByVal path As String) As Boolean
    FolderExists = False
    Set fso = CreateObject("Scripting.FileSystemObject")
  
    If fso.FolderExists(path) Then
        FolderExists = True
    Else
        FolderExists = FolderCreate(path)
    End If
     Set fso = Nothing
End Function

Function Путь(Папка As String)
 Путь = Папка & "\" & Format(Date, "MMMM") & "\"
FolderExists Путь
End Function

Sub Проверка()
Dim Имя As String, Папка As String
Имя = "35 18.02.14 Шаповалов"
Папка = "D:\MMM"
Имяфайла = Путь(Папка) & Имя
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 18.02.2014, 22:46   #12
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Лови,думаю разберешься
Спасибо, попробую...
А вот моё решение, вернее staniiislav + я
Код:
Private Sub Workbook_Open()
    Sheets("ПУТЁВКА").Select
           If [h6] = "" Then [h6] = Date 'вставляем дату
    [a5].Activate 
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim msg$, iFileName$, iPath$, iPathSeparator$, iSaveName$, месяц$
        месяц = MonthName(Month(Now))
        MyPath = "G:\Путёвки\2014\" & месяц & ""
Application.EnableEvents = False
On Error Resume Next
msg = "Сохранить изменения в файле '" & ActiveWorkbook.Name & "'?"
    Select Case MsgBox(msg, vbExclamation + vbYesNoCancel)
        Case vbYes
            iFileName = ActiveWorkbook.Name
            iPath = MyPath 'ActiveWorkbook.Path '''
            iPathSeparator = Application.PathSeparator '"\"
            iFileNameSplit = Split(Sheets("ПУТЁВКА").Range("M11").Value, " ")
            iSaveName = Sheets("ПУТЁВКА").Range("G6") & " " & Sheets("ПУТЁВКА").Range("H6") & " " & iFileNameSplit(0) & " " & ".xlsm"
            ActiveWorkbook.SaveCopyAs _
            Filename:=iPath & iPathSeparator & iSaveName
            ThisWorkbook.Save
        Case vbNo
            ThisWorkbook.Saved = True   'не сохраняя книгу, показывает приложению, что она сохранена!!!
        Case vbCancel
            Cancel = True
    End Select
End Sub
valerij вне форума Ответить с цитированием
Старый 18.02.2014, 23:23   #13
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Валера, ну подарили тебе очередной макрос... поздравляю!!!

если мне подарят трактор, вспахать огород у мамы, не вспашу я, я не умею управлять трактором, да еще с навесным оборудованием, скорее всего поломаю заборы, а то еще и дом зацеплю

ой, тревожно мне... за акваторию Азова в районе Мариуполя.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.02.2014, 00:06   #14
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Валера, ну подарили тебе очередной макрос... поздравляю!!!

если мне подарят трактор, вспахать огород у мамы, не вспашу я, я не умею управлять трактором, да еще с навесным оборудованием, скорее всего поломаю заборы, а то еще и дом зацеплю

ой, тревожно мне... за акваторию Азова в районе Мариуполя.
Игорь, чё за бред несёшь?
Майдан вплывает?
Поражён, не ожидал.

Удачи.
valerij вне форума Ответить с цитированием
Старый 19.02.2014, 07:46   #15
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

стало вот интересно:
Код:
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Boolean
Цитата:
Перевод: (автоматический, с помощью Microsoft Translate API)
IMAGEHLP.dll представляет собой модуль, принадлежащих к рекламной программы. Этот модуль отслеживает ваши привычки просмотра и распространяет их обратно на серверы автора для анализа. Это также заставляет всплывающие рекламные окна. Этот процесс представляет собой угрозу безопасности и должны быть удалены из вашей системы.
maksim_serg вне форума Ответить с цитированием
Старый 19.02.2014, 11:38   #16
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Создайте модель и в него поместите:

Код:
Option Explicit

Declare Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" _
                                     (ByVal hwnd As Long, ByVal pszPath As String, _
                                      ByVal psa As Any) As Long
                                      
Sub Macros_Close()
Dim msg$, iFileNameSplit, iPath_1$, iPath_2$, iPathSeparator$, iSaveName$, iYear$, iMonth$, Cancel As Boolean, Wb As Workbook
On Error Resume Next
Set Wb = ThisWorkbook
iFileNameSplit = Split(Sheets("ПУТЁВКА").Range("M11").Value, " ")
iSaveName = Sheets("ПУТЁВКА").Range("G6") & " " & Sheets("ПУТЁВКА").Range("H6") & " " & iFileNameSplit(0) & ".xlsx"

msg = "Сохранить файл '" & iSaveName & "'?"
    Select Case MsgBox(msg, vbExclamation + vbYesNoCancel)
        Case vbYes
            iYear = Format(Now, "yyyy"): iMonth = Format(Now, "mmmm")
            iPath_1 = Wb.Path '''
            iPath_2 = iPath_1 & "\" & iYear & "\" & iMonth
            CreateFolderWithSubfolders iPath_2
            
            
            iPathSeparator = Application.PathSeparator '"\"
            
            Application.DisplayAlerts = False
            Wb.SaveAs _
            Filename:=iPath_2 & iPathSeparator & iSaveName, FileFormat:=51
            Application.DisplayAlerts = False
            Wb.Save
        Case vbNo
            ThisWorkbook.Saved = True   'не сохраняя книгу, показывает приложению, что она сохранена!!!
        Case vbCancel
            Cancel = True
    End Select
End Sub

'Макрос взяот от сюда:
'http://excelvba.ru/code/MkDir
Sub CreateFolderWithSubfolders(ByVal ПутьСоздаваемойПапки$)
    ' функция получает в качестве параметра путь к папке
   ' если такой папки ещё нет - она создаётся
   ' может создаваться сразу несколько подпапок
   If Len(Dir(ПутьСоздаваемойПапки$, vbDirectory)) = 0 Then    ' если папка отсутствует
       SHCreateDirectoryEx Application.hwnd, ПутьСоздаваемойПапки$, ByVal 0&    ' создаём путь
   End If
End Sub
В модуле книге:

Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call Macros_Close
End Sub
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 20.02.2014, 01:46   #17
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от staniiislav Посмотреть сообщение
Создайте модель
staniiislav!
Модель или модуль??
Если модель, то это точно не для меня.

А если модуль, то попробовал, понравилось, но у меня - это разово получилось.
Т. к. все макросы исчезли.
Странно, почему так произошло(тоже понял почему, так ), а потом всё ОК!!

У меня в макросе возникла проблема с датой, т. е. как выше - не пойдёт.
Получается, что есть шаблон - имя файла "ПУТЁВКИ" и созданные файлы при закрытии, распиханные по месяцам.
файл "ПУТЁВКИ" может находится где угодно, а остальные строго по указанному пути в макросе.
Так вот дата при открытии(If [h6] = "" Then [h6] = Date) подходит к вновь созданным, но не к шаблону, т. е. если открыть их в любое время дата сохранится.
Поэтому я в шаблоне в конце закрытия удаляю дату и № путёвки.
Код:
Private Sub Workbook_Open()
    Sheets("ПУТЁВКА").Select
        If [h6] = "" Then [h6] = Date
    [a5].Activate
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim msg$, iFileName$, iPath$, iPathSeparator$, iSaveName$, месяц$
        месяц = MonthName(Month(Now))
        MyPath = "G:\Путёвки\2014\" & месяц & ""
Application.EnableEvents = False
Application.ScreenUpdating = False
On Error Resume Next
            iFileName = ActiveWorkbook.Name
            iPath = MyPath 'ActiveWorkbook.Path '''
            iPathSeparator = Application.PathSeparator '"\"
            iFileNameSplit = Split(Sheets("ПУТЁВКА").Range("M11").Value, " ")
            iSaveName = Sheets("ПУТЁВКА").Range("G6") & " " & Sheets("ПУТЁВКА").Range("H6") & " " & iFileNameSplit(0) & " " & ".xlsm"
            ActiveWorkbook.SaveCopyAs _
            Filename:=iPath & iPathSeparator & iSaveName
            ThisWorkbook.Save
    Sheets("ПУТЁВКА").[g6:h6] = ""
    Application.EnableEvents = True
    Application.ScreenUpdating = False
End Sub
Но, ненаю, чего -то мне не очень нравится моё произведение.
Теперь понял, почему.

Всё разобрался, всё получилось, только добавил при открытии дату.
Код:
Private Sub Workbook_Open()
    Sheets("ПУТЁВКА").Select
        [h6] = Date
    [a5].Activate
End Sub
staniiislav!!!!
Спасибо, всё супер.
---------------
| ^^пиво^^ \\|""\\_,_
|___________||___|__|)
(@)(@)""*|(@)(@)**(@)

Последний раз редактировалось valerij; 20.02.2014 в 02:13.
valerij вне форума Ответить с цитированием
Старый 20.02.2014, 03:23   #18
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Сообщение от maksim_serg Посмотреть сообщение
стало вот интересно:
Предохраняйтесь при загрузке винды,она опасна.
magehlp.dll является DLL-файлом, который отвечает за компонент Windows NT Image Helper в ОС Windows системы
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение ячеек при вставки в разных диапазонах Guren Microsoft Office Excel 10 04.03.2013 11:33
подсчет суммы ячеек с разных страниц при выполнении условия sttafi Microsoft Office Excel 27 07.12.2012 17:50
Сохранение при закрытии файла. Snekich Microsoft Office Excel 10 07.02.2012 07:39
Создание HTML Файла при закрытии самого Excel DaMadQuest Microsoft Office Excel 8 06.06.2010 20:41
сохранение файла при закрытии robotov Microsoft Office Excel 23 18.09.2009 10:40