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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2009, 00:32   #1
IFRSoff
Форумчанин
 
Аватар для IFRSoff
 
Регистрация: 23.02.2009
Сообщений: 306
По умолчанию Сохранение книги Excel по названию ячейки и по пути ячейки

Уважаемые профессионалы. Подскажите, пожалуйста. Можно ли закрывая книгу Excel, сделать так, чтобы она сохранялась под именем допустим ячейки A1, а путь сохранения ячейка А2? Это необходимо для актуального ведения журнала книг. Вообщем, чтоб ламеры не тупили соими разными шрифтами и не проявляли свою фантазию. А документы имели строгое название допутим контрагент и номер договора и списков и ничего другого. Ну я думаю, вы меня понимаете Папка сохранения тоже будет, конкретного контрагента.
Лень - двигатель прогресса!
IFRSoff вне форума Ответить с цитированием
Старый 24.02.2009, 01:02   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Можно. Но есть несколько нюансов.

1) Что делать, если пользователь пытается сохранить файл под другим именем (или в другую папку)?
Выводить сообщение о невозможности данного действия, или просто блокировать возможность сохранения?
А, может, предлагать сохранить под нужным именем?

2) А если пользователь изменит значения ячеек A1 и A2?
3) Что делать, если путь, указанный в ячейке A2, не существует?
4) Что делать, если файловая система откажет в сохранении по нужному пути (из-за разграничения прав)?
5) Что мешает пользователю закрыть этот файл, и вручную скопировать в нужную папку?

Я бы сделал проще - просто запретил бы команду Сохранить как...
Это делается макросом из одной строки:
Код:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Cancel = SaveAsUI
End Sub
Всё вышеперечисленное не будет работать, если макросы отключены.
EducatedFool вне форума Ответить с цитированием
Старый 03.03.2009, 18:42   #3
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию

и как же, всё-таки, задать такое имя?
в таком вот случае:
сначала листы из книги1 перемещаются в новую книгу2, вот так:
Sheets(Array("лист", "ещё лист")).Move
далее нужно сделать чтобы сразу выскакивало окошко сохранения книги2, при чем имя должно быть задано как сцепка значений двух ячеек из старой книги1 (ну или можно значение одной ячеки взять), а вот куда у себя на компе эту книгу сохранят мне всё равно
eto вне форума Ответить с цитированием
Старый 04.03.2009, 05:17   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

После того, как переместили листы, выполните код:
Код:
With Workbooks("Книга1.xls").Sheets("Лист1")
    Имя_для_сохранения$ = .[A1] & .[A2] 'Формируем имя, сцепляя нужные ячейки
End With

FName = Application.GetSaveAsFilename(InitialFileName:=Имя_для_сохранения)
P.S. Обратите внимание, чтобы в "Книга1" существовал "Лист1".
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 04.03.2009 в 05:20. Причина: Добавлено
SAS888 вне форума Ответить с цитированием
Старый 04.03.2009, 11:01   #5
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию

работает, спасибо!

Последний раз редактировалось eto; 04.03.2009 в 16:49.
eto вне форума Ответить с цитированием
Старый 04.03.2009, 16:50   #6
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию

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

если нажать ОК, окошко молча закроется, имя у книги останется прежним и нового файла в папке, куда сохранялось не появится.
eto вне форума Ответить с цитированием
Старый 04.03.2009, 18:50   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуйте так:
Код:
Sub test()
    Имя_для_сохранения = [A1] & [A2]    'Формируем имя, сцепляя нужные ячейки

    FName = Application.GetSaveAsFilename(InitialFileName:=Имя_для_сохранения, _
                                          FileFilter:="Excel Files (*.xls), *.xls", _
                                          Title:="Выберите имя файла для сохранения")
    
    If VarType(FName) <> vbBoolean Then Workbooks("Книга1.xls").SaveAs FName
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 04.03.2009, 19:20   #8
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию

собрала код из двух, но все равно пока не получается, выдаёт ошибку вот здесь:

Код:
With Workbooks("Таблички.xlsm").Sheets("вводная")
    Имя_для_сохранения = .[G18] & "_" & .[G22]   'Формируем имя, сцепляя нужные ячейки из старой книги, откуда были перемещены листы в новую книгу, которую и нужно сохранить
    End With
        
    FName = Application.GetSaveAsFilename(InitialFileName:=Имя_для_сохранения, _
                                          FileFilter:="Excel Files (*.xls), *.xls", _
                                          Title:="Выберите имя файла для сохранения")
    
    If VarType(FName) <> vbBoolean Then Workbooks("Книга1.xls").SaveAs FName
соответственно, при переносе страниц новая книга может быть с разным порядковым номером, т.к. операция извлечения страниц может производиться несколько раз, да и пользователь может не только с моим документом работать
eto вне форума Ответить с цитированием
Старый 04.03.2009, 19:27   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
выдаёт ошибку вот здесь:
Workbooks("Книга1.xls").SaveAs FName
Так попробуйте заменить имя файла Книга1.xls на имя своего файла...

Если книга, которую Вы пытаетесь сохранить, в момент работы макроса активна, то можно написать так:
If VarType(FName) <> vbBoolean Then ActiveWorkbook.SaveAs FName

Если же этот макрос запускается как раз из сохраняемой книги - тогда лучше так:
If VarType(FName) <> vbBoolean Then ThisWorkbook.SaveAs FName

И не забывайте - раз уж у Вас Excel 2007, то, соответственно, измените строку с фильтром -
вместо FileFilter:="Excel Files (*.xls), *.xls"
поставьте что-то вроде FileFilter:="Excel Files (*.xlsm), *.xlsm"

Последний раз редактировалось EducatedFool; 04.03.2009 в 19:30.
EducatedFool вне форума Ответить с цитированием
Старый 05.03.2009, 10:57   #10
eto
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 29
По умолчанию

спасибо, с сохранением всё получилось. ^.^_b

остался такой нюанс - при открытии нового сохраненного файла слетает запрет на выделение защищенных ячеек
пока работаешь с этим файлом не закрывая его после создания - всё ок, но если закрыть, а потом снова открыть - разрешает выделять все ячейки, хотя они по-прежнему остаются заблокированными, в чем может быть дело?
в приложении пример
Вложения
Тип файла: rar пример.rar (24.4 Кб, 258 просмотров)
eto вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги по графам. нахождение пути Rusl92 Паскаль, Turbo Pascal, PascalABC.NET 3 17.12.2008 14:44
Значение ячейки по названию листа VadimSh Microsoft Office Excel 4 02.12.2008 15:29
Как задать свойства ячейки в Excel? Dux Microsoft Office Excel 6 16.08.2008 17:03
Защитить ячейки в Excel Т@тьян@ Общие вопросы Delphi 2 29.04.2008 14:47
Как разделить число и текст в одной ячейки на две ячейки. neboskreb Microsoft Office Excel 2 15.04.2008 19:39