Первый раз на вашем сайте и первая попытка открыть тему. Если криво получится, - не бейте сильно ! * * * В наследство досталось большое к-во документов, наработанных в Exel. Документы необходимо выложить в сеть организации для общего внутреннего пользования. Перед этим желательно бы запретить рядовым пользователям вносить изменения в эти документы? Объём документов значительный, - более тысячи... Попробовал написать макрос, но не могу заставить макрос воспринимать различные по названию файлы, собранные в дереве папок, заполненных файлами. Короче, - макрос не работает.
Моих знаний на такой макрос не хватает... Пожалуйста, помогите...
С уважением, ко всем, кто не останется равнодушным...
Здравствуйте!
Первый раз на вашем сайте и первая попытка открыть тему. Если криво получится, - не бейте сильно ! * * * В наследство досталось большое к-во документов, наработанных в Exel. Документы необходимо выложить в сеть организации для общего внутреннего пользования. Перед этим желательно бы запретить рядовым пользователям вносить изменения в эти документы? Объём документов значительный, - более тысячи... Попробовал написать макрос, но не могу заставить макрос воспринимать различные по названию файлы, собранные в дереве папок, заполненных файлами. Короче, - макрос не работает.
Моих знаний на такой макрос не хватает... Пожалуйста, помогите...
С уважением, ко всем, кто не останется равнодушным...MATADOR
Если вопрос касается запрета на изменение в файлах, то толкните своих сисадминов. Пускай создадут где нибудь на серваке папку и для нее настроят права доступа, кому в нее вообще нельзя заходить, кому можно заходить и редактировать, а кому можно только просматривать и открывать документы в режиме ТОЛЬКО ЧТЕНИЕ. Это более красивое решение чем защита каждого файла.
Если вопрос касается запрета на изменение в файлах, то толкните своих сисадминов. Пускай создадут где нибудь на серваке папку и для нее настроят права доступа, кому в нее вообще нельзя заходить, кому можно заходить и редактировать, а кому можно только просматривать и открывать документы в режиме ТОЛЬКО ЧТЕНИЕ. Это более красивое решение чем защита каждого файла.DJ_Marker_MC
Спасибо DJ_Marker_MC за Ваше участие. ... Тут есть специфический момент... ... Начальству почти всегда нужно: "оказывается ещё вчера"... И частенько подталкают (назовём это в спину... ), - типа: "давай-быстрей"... Поэтому есть такое опасение, что могу сам в запарке тупонуть и накриворучить. И хотя эта документация на моей машине, чтобы голову разгрузить от контроля над этими вопросами, считаю, будет совсем не лишне, блокировать все файлы базы данных паролем. Прошу простить мне мою настойчивость, но вопрос меня уже зацепил... ... В других программах такой приём называется "пакетная обработка файлов". Это заложено в настройках меню - в том же Photoshop'е, например. В Exel, если я это понимаю правильно, - необходимо написать Макрос. Я записал простенький Макрос, который блокирует редактирование данных в одном конкретном файле.
Чтобы не быть голословным - ниже привожу тело Макроса:
[vba]
Код
Sub Макрос2() ' ' Макрос2 Макрос ' ЗАПРЕТ РЕДАКТИРОВАНИЯ ДАННЫХ ' ' Сочетание клавиш: Ctrl+Shift+Y ' ChDir "C:\Documents and Settings\user\Рабочий стол\БАЗА ДАННЫХ" Workbooks.Open Filename:= _ "C:\Documents and Settings\user\Рабочий стол\БАЗА ДАННЫХ\ЭЛ.ЭНЕРГИЯ.xls" Cells.Select Range("BG78").Activate Sheets("ЭЛ.ЭНЕРГИЯ").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Range("BL77:BP77").Select ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\user\Рабочий стол\БАЗА ДАННЫХ\ЭЛ.ЭНЕРГИЯ.xls", _ FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False ActiveWindow.Close End Sub
[/vba]
Здесь Exel прекрасно справляется с одним файлом, который я открываю в процессе создания Макроса.
И все последующие запуски Макроса Exel отрабатывает. Есть правда один момент: После выполнения процесса защиты данных от редактирования, Макрос останавливается и просит вручную подтвердить перезапись файла. Как это исправить у меня знаний и опыта не хватает... ... Теперь бы, на сколько я понимаю, в теле Макроса надо заменить название файла ЭЛ.ЭНЕРГИЯ.xls на шаблон... что-то типа всем известного: *.* ... Конкретный вопрос: "Каким набором команд или командой или оператором (прошу извинить если ошибся в терминологии), можно заменить в теле Макроса имя файла ЭЛ.ЭНЕРГИЯ.xls, чтобы макрос отрабатывал все разноимённые файлы в конкретной папке, или дереве папок ??? И после окончания процесса защиты не просил ручного подтверждения на перезапись?
С уважением и благодарностью ко всем, кто не останется равнодушным... [moder]Код оформляйте тегами (кнопка #)[/moder]
Здравствуйте!
Спасибо DJ_Marker_MC за Ваше участие. ... Тут есть специфический момент... ... Начальству почти всегда нужно: "оказывается ещё вчера"... И частенько подталкают (назовём это в спину... ), - типа: "давай-быстрей"... Поэтому есть такое опасение, что могу сам в запарке тупонуть и накриворучить. И хотя эта документация на моей машине, чтобы голову разгрузить от контроля над этими вопросами, считаю, будет совсем не лишне, блокировать все файлы базы данных паролем. Прошу простить мне мою настойчивость, но вопрос меня уже зацепил... ... В других программах такой приём называется "пакетная обработка файлов". Это заложено в настройках меню - в том же Photoshop'е, например. В Exel, если я это понимаю правильно, - необходимо написать Макрос. Я записал простенький Макрос, который блокирует редактирование данных в одном конкретном файле.
Чтобы не быть голословным - ниже привожу тело Макроса:
[vba]
Код
Sub Макрос2() ' ' Макрос2 Макрос ' ЗАПРЕТ РЕДАКТИРОВАНИЯ ДАННЫХ ' ' Сочетание клавиш: Ctrl+Shift+Y ' ChDir "C:\Documents and Settings\user\Рабочий стол\БАЗА ДАННЫХ" Workbooks.Open Filename:= _ "C:\Documents and Settings\user\Рабочий стол\БАЗА ДАННЫХ\ЭЛ.ЭНЕРГИЯ.xls" Cells.Select Range("BG78").Activate Sheets("ЭЛ.ЭНЕРГИЯ").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Range("BL77:BP77").Select ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\user\Рабочий стол\БАЗА ДАННЫХ\ЭЛ.ЭНЕРГИЯ.xls", _ FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False ActiveWindow.Close End Sub
[/vba]
Здесь Exel прекрасно справляется с одним файлом, который я открываю в процессе создания Макроса.
И все последующие запуски Макроса Exel отрабатывает. Есть правда один момент: После выполнения процесса защиты данных от редактирования, Макрос останавливается и просит вручную подтвердить перезапись файла. Как это исправить у меня знаний и опыта не хватает... ... Теперь бы, на сколько я понимаю, в теле Макроса надо заменить название файла ЭЛ.ЭНЕРГИЯ.xls на шаблон... что-то типа всем известного: *.* ... Конкретный вопрос: "Каким набором команд или командой или оператором (прошу извинить если ошибся в терминологии), можно заменить в теле Макроса имя файла ЭЛ.ЭНЕРГИЯ.xls, чтобы макрос отрабатывал все разноимённые файлы в конкретной папке, или дереве папок ??? И после окончания процесса защиты не просил ручного подтверждения на перезапись?
С уважением и благодарностью ко всем, кто не останется равнодушным... [moder]Код оформляйте тегами (кнопка #)[/moder]MATADOR
Сообщение отредактировал Pelena - Пятница, 08.05.2015, 13:23
Но, вообще-то, все ещё проще: для того, чтобы перебрать все файлы в папке, достаточно воспользоваться процедурой Dir [vba]
Код
Sub test() Dim cPath$, cName$, cFiles$, arrDir cPath = "C:\" cFiles = "" cName = Dir(cPath & "*.xls?") While cName <> "" cFiles = cFiles & Chr(1) & cName cName = Dir Wend If Len(cFiles) > 0 Then arrDir = Split(Mid(cFiles, 2), Chr(1)) MsgBox cFiles End If End Sub
[/vba]
Чтобы отключить подтверждения, - просто "обрамляете" нужную часть кода вызовами Applcation.DisplayAlerts [vba]
Но, вообще-то, все ещё проще: для того, чтобы перебрать все файлы в папке, достаточно воспользоваться процедурой Dir [vba]
Код
Sub test() Dim cPath$, cName$, cFiles$, arrDir cPath = "C:\" cFiles = "" cName = Dir(cPath & "*.xls?") While cName <> "" cFiles = cFiles & Chr(1) & cName cName = Dir Wend If Len(cFiles) > 0 Then arrDir = Split(Mid(cFiles, 2), Chr(1)) MsgBox cFiles End If End Sub
[/vba]
Чтобы отключить подтверждения, - просто "обрамляете" нужную часть кода вызовами Applcation.DisplayAlerts [vba]