Excel пароль на открытие программно

Макрос предназначен для замены паролей на открытие, для большого количества файлов Excel.

В качестве исходных данных, задаётся старый и новый пароли.

Если поле «старый пароль» — пустое, подразумевается, что у файлов нет пароля.
Если поле «новый пароль» — пустое, подразумевается, что с файлов снимается пароль.

Нажимаем кнопку, — появляется диалоговое окно выбора папки, — после чего макрос в цикле открывает всё файлы,
и пересохраняет их с новым паролем.

Возможно, у некоторых файлов не получится изменить пароль
(например, у тех, где пароль на открытие отличается от заданного в поле «Старый пароль»)
Список таких файлов программа выводит в таблицу, в виде гиперссылок.

ВНИМАНИЕ: Это очень опасный макрос, — если вы случайно забудете, какой пароль вы установили на файлы,
— все обработанные макросом файлы Excel станут недоступны!

Так что, пользуйтесь макросом на свой страх и риск.

Напоминаю: снять (сбросить) пароль н а открытие файла невозможно!
(только полным перебором, — а это очень долго)

Часть кода макроса: (см. прикреплённый файл)

Sub ChangePasswords()
    On Error Resume Next
    PassOld$ = shs.Range("PassOld").Text
    PassNew$ = shs.Range("PassNew").Text
 
    folder$ = GetFolder(777, True)        ' запрашиваем имя папки
    If folder$ = "" Then Exit Sub        ' выход, если пользователь отказался от выбора папки

    Dim coll As Collection
    ' считываем в колекцию coll имена файлов XLS*
    Set coll = FilenamesCollection(folder$, "*.xls*")
    If coll.Count = 0 Then
        MsgBox "В выбранной папке не найдено ни одного файла Excel", vbExclamation
        Exit Sub
    End If
 
    Dim WB As Workbook, nOK&, nErr&
    ' очистка таблицы ошибок
    Intersect(shs.UsedRange, shs.Range("b11:b" & shs.Rows.Count)).ClearContents
    Application.ScreenUpdating = False        ' отключаем обновление экрана

    For Each Filename In coll        ' перебираем найденные в папке файлы
        Err.Clear: Set WB = Nothing
        Set WB = Workbooks.Open(Filename, , , , PassOld$)        ' пробуем открыть очередной файл
        If Not WB Is Nothing Then        ' если файл открылся
            WB.Password = PassNew$        ' ставим новый пароль
            WB.Close True        ' закрываем файл с сохранением изменений
            nOK& = nOK& - (Err = 0)        ' считаем количество успешно сохранённых файлов

        Else        ' файл не открылся - выводим в список ошибок
            nErr& = nErr& + 1
            With shs.Range("b" & 10 + nErr&)
                .Value = Filename
                .Hyperlinks.Add .Resize(, 1), Filename, "", "Попробовать открыть файл вручную"
            End With
        End If
        DoEvents
    Next
 
    Application.ScreenUpdating = True
    msg$ = "Найдено файлов в папке: " & coll.Count & vbNewLine & _
           "Удалось заменить пароли на файлах: " & nOK&
    MsgBox msg, vbInformation, "Готово"
End Sub

Вложение

Размер

Загрузки

Последняя загрузка

SetPasswords.xlsb

27.69 КБ

56

52 недели 9 часов назад

Ø

Я
   smilerZ

27.10.05 — 09:30

Добрый день.
подскажите, плиз как можно поставить защиту с паролем на лист и книгу Excel из 1с.
Эксель = СоздатьОбъект(«Excel.Application»);
// снимаем защиту
Эксель.ActiveWorkbook.Unprotect(пароль);
Эксель.ActiveSheet.Unprotect(пароль);
// заполнение Excel файла

// ставим защиту
Эксель.ActiveWorkbook.Рrotect(пароль);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
вылетает с ошибкой !
Эксель.ActiveSheet.Рrotect(пароль);
как правильно установить пароль ?

   Sasha

1 — 27.10.05 — 09:38

Эксель.ActiveWorkbook.Password = Пароль;

   Sasha

2 — 27.10.05 — 09:44

Даже лучше наверное так:
Эксель.ActiveWorkbook.Password = Строка(Пароль);

   Gloom

3 — 27.10.05 — 09:48

(1,2)Это установка пароля на открытие книги, а не на защиту.
(0)Похоже, у тебя в «ActiveSheet.Рrotect» кириллица затесалась…

   smilerZ

4 — 27.10.05 — 09:54

спасибо.
а как быть с
Эксель.ActiveSheet.Рrotect(пароль);
Эксель.ActiveSheet.Password = — не работает.

   Sasha

5 — 27.10.05 — 09:58

(3)Хм, а все моя невнимательность %-)

   smilerZ

6 — 27.10.05 — 10:02

to 3
Protect([Password], [Structure], [Windows])
в таком варианте не отрабатывает
Эксель.ActiveWorkbook.Protect(«12345678»,1,0);

   Sasha

7 — 27.10.05 — 10:05

(6) а разве не так?
Эксель.ActiveWorkBook.Protect(Structure, Windows, Password);

   smilerZ

8 — 27.10.05 — 10:13

возможно, но и так то же не работает
Эксель.ActiveWorkbook.Protect(Structure,Windows,»12345678″);
без ошибок отрабатывает только в варианте
Эксель.ActiveWorkbook.Protect(Structure,Windows);

   Zhuri

9 — 27.10.05 — 10:13

Реально работает
ВходExcel.Worksheets(«мат»).Activate();
ВходExcel.ActiveSheet.UnProtect(Пароль);
//трали вали, тили тили
ВходExcel.ActiveSheet.Protect(Пароль);

   smaharbA

10 — 27.10.05 — 10:21

Эксель = СоздатьОбъект(«Excel.Application»);
ИмяКниги = Эксель.Workbooks.Open(«c:1.xls»).Name();
///Код
Эксель.Workbooks(ИмяКниги).Protect («123»);
____________________________
Я конечно далек от мысли…(с)

   smaharbA

11 — 27.10.05 — 10:24

+(10) 4 (0) потомучто у тебя книга/лист стала неактивной, можно как в (9) но (10) лучче

   smilerZ

12 — 27.10.05 — 10:35

Эксель.ActiveSheet.Protect(«12345678»);
работает, спасибо.
но не могу понять как включить опцию, что бы нельзя было выделять защищенные ячейки.

   Gloom

13 — 27.10.05 — 10:43

(12)Свойство EnableSelection относится к т.н. «does not stick», т.е. не запоминаются при программной установке, только при ручной установке через интерфейс…

  

smilerZ

14 — 27.10.05 — 11:00

to 10, 12
спасибо, все заработало.

Andrey72

4 / 4 / 2

Регистрация: 04.05.2013

Сообщений: 62

1

13.05.2014, 12:08. Показов 2157. Ответов 6

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Прошу помочь с вопросом:
Есть книга Excel с установленным паролем на ее открытие. Эта книга хранится в ресурсах программы, и в определенный момент времени она копируется из файлов ресурсов на компьютер и открывается программно (должна). Вопрос в том как вводить пароль программно.
Открываю так

VB.NET
1
2
aExcel = CreateObject("Excel.Application")
aBook = aExcel.Workbooks.Open(put)



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

13.05.2014, 12:08

6

Памирыч

Почетный модератор

21371 / 9105 / 1082

Регистрация: 11.04.2010

Сообщений: 11,014

13.05.2014, 12:53

2

Как-то так

VB.NET
1
aExcel.Workbooks(0)ActiveSheet.Unprotect ("пароль")

С коленки



0



Andrey72

4 / 4 / 2

Регистрация: 04.05.2013

Сообщений: 62

13.05.2014, 13:02

 [ТС]

3

Не работает. в таком виде пишет что должно быть приравнено или использовано…
Если так:

VB.NET
1
aExcel.Workbooks(0).ActiveSheet.Unprotect ("пароль")

то не работает



0



Памирыч

Почетный модератор

21371 / 9105 / 1082

Регистрация: 11.04.2010

Сообщений: 11,014

13.05.2014, 13:07

4

Цитата
Сообщение от Andrey72
Посмотреть сообщение

в таком виде

Так я Вам принцип даю, а не готовый код.
Вот решил на рабочем примере показать

VB.NET
1
2
3
4
5
6
7
8
9
        appExcel = CreateObject("Excel.Application")
        appExcel.Workbooks.Open("C:1.xls")
        appExcel.Visible = False
        With appExcel.ActiveSheet
            .Unprotect("000")
            .Range("A1").Value = "12321"
        End With
        appExcel.Workbooks(1).Close(True)
        appExcel.Quit()



0



Юпатов Дмитрий

1706 / 1194 / 227

Регистрация: 23.12.2010

Сообщений: 1,526

13.05.2014, 13:18

5

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Раз уж пошла свистопляска с поздним связыванием, не сочти за труд попользоваться браузером объектов в VBA Excel.

Цитата
Сообщение от Excel

Function Open(Filename As String, [UpdateLinks], [ReadOnly], [Format], [Password], [WriteResPassword], [IgnoreReadOnlyRecommended], [Origin], [Delimiter], [Editable], [Notify], [Converter], [AddToMru], [Local], [CorruptLoad]) As Workbook
Member of Excel.Workbooks

Filename As String — обязательный параметр
прочие — факультативно.
Итого:

VB.NET
1
aBook = aExcel.Workbooks.Open("путь к файлу", Password:="пароль книги")

Добавлено через 1 минуту

Цитата
Сообщение от Памирыч
Посмотреть сообщение

Так я Вам принцип даю, а не готовый код

Та у него вроде как книга зашифрована. В 2007 это «Главное меню -Подготовить-Зашифровать документ».
Защита листов — несколько иное.



2



4 / 4 / 2

Регистрация: 04.05.2013

Сообщений: 62

13.05.2014, 13:25

 [ТС]

6

Цитата
Сообщение от Юпатов Дмитрий
Посмотреть сообщение

Та у него вроде как книга зашифрована. В 2007 это «Главное меню -Подготовить-Зашифровать документ».
Защита листов — несколько иное.

Вот именно, необходимо было ввести пароль при открытии книги, спасибо Дмитрию.



0



Памирыч

13.05.2014, 13:26


    Работа с Excel. Ввод пароля книги

Не по теме:

Цитата
Сообщение от Юпатов Дмитрий
Посмотреть сообщение

книга зашифрована

аа… Дошло



0



 

marker_mc

Пользователь

Сообщений: 228
Регистрация: 24.12.2012

Всем доброе утро. Подскажите как реализовать следующее: есть файл с листами в примере их 3, в реале будет 6. Нужно сделать так, чтоб при открытии данного файла, эксель запрашивал пароль, и в зависимости от веденного пароля, открывало только тот лист, к которому будет привязан этот пароль, а все остальные листы ставали недоступными этому пользователю. Файл приложил, хотя это обычный только созданный док с 3-мя листами.

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

насколько квалифицированны и любознательны Ваши пользователи?  
ибо любые защиты в Excel’е не слишком стойки для пытливых умов и шаловливых ручек.  
а такая обходится вообще довольно просто — отключением макросов.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

marker_mc

Пользователь

Сообщений: 228
Регистрация: 24.12.2012

Не очень любознательны, уровень у людей работающих с екселем ниже среднего. До моего прихода в компанию про макросы и не слышали даже))))  

  Впринципи нужно чтоб листы по умолчанию были в режиме xlSheetVeryHiden — этого будет достаточно чтоб они не знали про их наличие))) но при вводе пароля (при открыти доккумента) видимым ставал тот лист которому пароль соответствует.

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

тупо в лоб, как-то так:  
в модуле «Эта Книга»  

  Private Sub Workbook_Open()  
 for i=1 to 6: sheets(i).visible=xlveryhidden: next i  
 x = InputBox(«введите пароль»)  
 Select Case x  
   Case «пароль1»: Sheets(1).Visible = True  
   Case «пароль2»: Sheets(2).Visible = True  
   ‘…  
 End Select  
End Sub  

  на проект можно поставить защиту — должно хватить.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

marker_mc

Пользователь

Сообщений: 228
Регистрация: 24.12.2012

Этого вполне достаточно. Большое спасибо

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

Вообще-то все скрыть не получится, один с инструкцией нужно оставить.  
И перед закрытием листы «выводить на исходную» и сохраняться.  
И в момент сохранения тоже. Иначе может получиться, что человек сохранит файл с открытым своим листом, и вдруг электричество пропало :(  
Потом появилось, и при открытии этого файла с отключенными макросами будет что? Сплошной геморрой…  
А если человек назаводил непойми что и это сохранять не хочет и нельзя?  
В общем, может лучше каждому свой файл? А начальство собирает данные для просмотра в сводный макросом или формулами.  
Или вообще сразу Access?

 

marker_mc

Пользователь

Сообщений: 228
Регистрация: 24.12.2012

Та у нас тут вообще всё запутано)))) Насчет одного листа я это уже успел заметить))) плюс ко мне только дошло насчет отключенных макросов((( реально тогда ничего не получиться. Остановлюсь пожалуй на разных файлах, которые подвязаны к основному. Благодарю за помощь.

 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Как вариант:

<EM>Каждому пользователю свой лист/диапазон</EM>  

  Возможность защиты от глаз при отключенных макросах предусмотрена.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

вот это — уже по-серьезному.  
The_Prist, спасибо.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

Проверил — сохранился под петровым и симитировал отключение электричества (нет, не выдернул 220 — просто снял задачу :))  
Открываю файл без макросов — вуаля… Геморой.

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

И опять же — книга при закрытии сохраняется. А если не хочу/нельзя сохранять?

 

marker_mc

Пользователь

Сообщений: 228
Регистрация: 24.12.2012

The_Prist, очень интересный пример.  
У Вас написано «Каждому пользователю свой лист/диапазон»,  
Дело в том что, у меня впринципи ситуация в которой нужно разрешить просмотр только определённых строк, тобеж диапазона. Может есть что то подобное, для того чтоб можно было скрывать отображать не листы, а именно строки одного листа? это было бы тоже полезно.

 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Только что обновил статью — можно указывать для каждого листа еще и диапазоны.  
marker_mc — в Вашем случае можно для всех указать ВСЕ листы как разрешенные, а диапазоны для них уже свои.  
А еще есть такая стандартная опция — «Разрешить изменение диапазонов»  

  Hugo — проблему можно сделать всегда. И отключение электричества и пр. Я предложил решение, а пользоваться им или поискать стандартные методы — дело каждого.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

marker_mc

Пользователь

Сообщений: 228
Регистрация: 24.12.2012

Вы не множко видно не поняли что я имел ввиду. Я хотел чтоб лист был к примеру 1, но в зависимости от от введенного пользователя/пароля, отображался исключительно определённый диапазон таблицы.  

  Например таблица у нас А1:С10, по умолчания строки с 1 по 10 скрыты и отобразить вручную чтоб их было не возможно. Теперь выбираем пользователя/пароль, и вуаля открываються только те строки которые заданы данному пользователю. А остальный отобразить по прежнему нельзя.

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

Мне кажется, что это вообще всё шатко и ненадёжно…  
Сделать можно, и работать будет. Если соблюдать много других если.  
Ну а например вдруг пользователь стёр важные данные, а про UNDO или Ctrl+Z он не знает (или эти хоткеи заняты чем-то другим, было такое).  
Или UNDO не помогает (удалил например свой лист случайно… :) )  

  Первое желание — закрыть без сохранения и открыть файл заново. Тут и попали.  
А единственный выход (если удалили лист или напортачили так, что на UNDO надеяться не приходится) — сохранить файл под другим именем. Тогда оригинал не пострадает.  

  Т.е. думаю нужно поменять «листы на исходную» с закрытия книги на сохранение изменений. Правда тогда после сохранения снова нужно заводить пароли, ну или как-то код усложнять дальше…  
А по закрытию файла просто предложить сохраниться — если отказ, то файл будет как был, с скрытыми листами. В общем, пока сыро…

 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Здесь надо писать код заново.  
Если коротко: просто вместо защиты диапазонов надо вставить такие строки:  
Sheets(sSheets(li)).Rows.Hidden = True  
Sheets(sSheets(li)).Range(sRng(li)).Hidden = False  

  Но необходимо доработать проверку на скрытие строк или столбцов.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#17

12.06.2012 14:43:35

Я как раз делаю такой проектик: каждому — свой лист по паролю.  

Код
Private Sub Workbook_Open()   
Dim shts As Worksheet   
       ' отобразить лист "начало"   
      Worksheets("начало").Visible = True   
      Worksheets("начало").Activate   
  
      ' другие листы спрятать   
      For Each shts In ThisWorkbook.Worksheets   
            ­If shts.Name <> "начало" Then shts.Visible = 2   
      Next   
  
     ufStart.Show ' открыть форму   
End Sub     

Можно  прятать листы при закрытии книги. При старте — только форма для ввода пароля на фоне информационного листа.  
При правильном пароле открывается нужный лист. Как открывать по паролю — неограниченное поле деятельности.

 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Добавил в статью файл, в котором реализована возможность отображать только указанные строки/столбцы в указанных листах.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Guest

Гость

#19

12.06.2012 15:20:53

очень полезно. Спасибо.

@amitmahapatra 

VBA and macro scripting

You cannot create macros with VBA in Excel for the web, but you can open and edit VBA-enabled spreadsheets without removing (or corrupting) the VBA contained in the file. Learn more about getting started with macros.

You could use this code with other versions.
Only if it is your own file, otherwise you could be liable to prosecution.

Hope I was able to help you.

Nikolino

I know I don’t know anything (Socrates)

* Kindly Mark and Vote this reply if it helps please, as it will be beneficial to more Community members reading here

Понравилась статья? Поделить с друзьями:
  • Excel отобразить значения в сводной таблице
  • Excel пароль на миф
  • Excel пароль на кнопку
  • Excel отобразить дату как текст
  • Excel пароль на каждый лист