Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос для защиты - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для защиты (Макросы/Sub)
Макрос для защиты
romanus7 Дата: Среда, 08.07.2015, 09:23 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте, помогите написать макрос. Есть файл. В нем 7 открытых листов и больше 10 очень скрытых. Отличная идея Права доступа , но здесь на каждого пользователя определенная страница, как сделать чтоб происходила проверка имени компьютера и если оно совпадает, то он отображает те 7 открытых листов, если нет, то он все скрывает. Заранее говорю, что в макросах не силен, поэтому желательно подробно. Спасибо.


Сообщение отредактировал romanus7 - Среда, 08.07.2015, 09:23
 
Ответить
СообщениеЗдравствуйте, помогите написать макрос. Есть файл. В нем 7 открытых листов и больше 10 очень скрытых. Отличная идея Права доступа , но здесь на каждого пользователя определенная страница, как сделать чтоб происходила проверка имени компьютера и если оно совпадает, то он отображает те 7 открытых листов, если нет, то он все скрывает. Заранее говорю, что в макросах не силен, поэтому желательно подробно. Спасибо.

Автор - romanus7
Дата добавления - 08.07.2015 в 09:23
китин Дата: Среда, 08.07.2015, 09:36 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 7014
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
Есть файл

нет файла deal


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщение
Есть файл

нет файла deal

Автор - китин
Дата добавления - 08.07.2015 в 09:36
romanus7 Дата: Среда, 08.07.2015, 10:44 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
китин, на примере этого файла, что нужно прописать в "Эта книга"
К сообщению приложен файл: 3903404.xlsx (12.3 Kb)
 
Ответить
Сообщениекитин, на примере этого файла, что нужно прописать в "Эта книга"

Автор - romanus7
Дата добавления - 08.07.2015 в 10:44
Manyasha Дата: Среда, 08.07.2015, 13:11 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
romanus7,
если нет, то он все скрывает
скрыть все листы нельзя, можно скрыть книгу, и, если имя ПК не то - закрыть книгу.

Проверка при открытии файла (в "Эта книга"):[vba]
Код
Private Sub Workbook_Open()
     Dim arrVisibleSheets, arrHiddenSheets
     Windows(ThisWorkbook.Name).Visible = False      'скрываем книгу
     'If Environ("UserName") <> "USER" Then           'Имя пользователя
     If GetComputerName <> "COMP" Then                 'Имя компьютера
         With Application
             .DisplayAlerts = False
             ThisWorkbook.Close
             .DisplayAlerts = True
         End With
     Else
         arrVisibleSheets = Array(Лист1, Лист2, Лист3)   'Видимые листы
         arrHiddenSheets = Array(Лист4, Лист5, Лист6)    'Скрытые листы
         For Each sh In arrVisibleSheets
             sh.Visible = xlSheetVisible
         Next sh
         For Each sh In arrHiddenSheets
             sh.Visible = xlSheetVeryHidden
         Next sh
         Windows(ThisWorkbook.Name).Visible = True
     End If
End Sub
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеromanus7,
если нет, то он все скрывает
скрыть все листы нельзя, можно скрыть книгу, и, если имя ПК не то - закрыть книгу.

Проверка при открытии файла (в "Эта книга"):[vba]
Код
Private Sub Workbook_Open()
     Dim arrVisibleSheets, arrHiddenSheets
     Windows(ThisWorkbook.Name).Visible = False      'скрываем книгу
     'If Environ("UserName") <> "USER" Then           'Имя пользователя
     If GetComputerName <> "COMP" Then                 'Имя компьютера
         With Application
             .DisplayAlerts = False
             ThisWorkbook.Close
             .DisplayAlerts = True
         End With
     Else
         arrVisibleSheets = Array(Лист1, Лист2, Лист3)   'Видимые листы
         arrHiddenSheets = Array(Лист4, Лист5, Лист6)    'Скрытые листы
         For Each sh In arrVisibleSheets
             sh.Visible = xlSheetVisible
         Next sh
         For Each sh In arrHiddenSheets
             sh.Visible = xlSheetVeryHidden
         Next sh
         Windows(ThisWorkbook.Name).Visible = True
     End If
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 08.07.2015 в 13:11
romanus7 Дата: Среда, 08.07.2015, 13:50 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Manyasha, огромное спасибо помогли, но есть еще одна загвоздка, если макросы отключены, книга спокойно открывается, как защитить, если даже макросы выключены и если не правильное имя компьютера книга закрывается или такое невозможно?


Сообщение отредактировал romanus7 - Среда, 08.07.2015, 13:56
 
Ответить
СообщениеManyasha, огромное спасибо помогли, но есть еще одна загвоздка, если макросы отключены, книга спокойно открывается, как защитить, если даже макросы выключены и если не правильное имя компьютера книга закрывается или такое невозможно?

Автор - romanus7
Дата добавления - 08.07.2015 в 13:50
Manyasha Дата: Среда, 08.07.2015, 13:57 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
romanus7, посмотрите тут


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеromanus7, посмотрите тут

Автор - Manyasha
Дата добавления - 08.07.2015 в 13:57
_Boroda_ Дата: Среда, 08.07.2015, 15:06 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Я обычно делаю (если делаю)подобное не по имени компьютера (оно может совпадать), а по серийному номеру диска
Сначала запускаем в любом файле вот такой макрос
[vba]
Код
Sub tt()
     [a1] = CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber
End Sub
[/vba]
Он напишет в ячейке А1 серийник. Списываем его оттуда на бумажку.
А в файле в модуле книги вот так примерно (кусок с массивом нужных листов взял у Маняши). Там принцип такой же, как и по ссылке Маняши, но реализовано немного иначе.
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
     Application.ScreenUpdating = 0
     Лист8.Visible = xlSheetVisible
     sn_ = ThisWorkbook.Sheets.Count
     For i = 1 To sn_
         If Sheets(i).CodeName <> "Лист8" Then
             Sheets(i).Visible = xlSheetVeryHidden
         End If
     Next i
End Sub
Private Sub Workbook_Open()
     nn_ = InputBox("Введи пароль")
     If nn_ = CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber & "" Then
         Da_ = Array(Лист1, Лист2, Лист3)   'Видимые листы
         For Each sh In Da_
             sh.Visible = xlSheetVisible
         Next sh
         Лист8.Visible = xlSheetVeryHidden
         Лист1.Activate
     End If
End Sub
[/vba]
К сообщению приложен файл: 3903404_1.xlsm (24.5 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЯ обычно делаю (если делаю)подобное не по имени компьютера (оно может совпадать), а по серийному номеру диска
Сначала запускаем в любом файле вот такой макрос
[vba]
Код
Sub tt()
     [a1] = CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber
End Sub
[/vba]
Он напишет в ячейке А1 серийник. Списываем его оттуда на бумажку.
А в файле в модуле книги вот так примерно (кусок с массивом нужных листов взял у Маняши). Там принцип такой же, как и по ссылке Маняши, но реализовано немного иначе.
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
     Application.ScreenUpdating = 0
     Лист8.Visible = xlSheetVisible
     sn_ = ThisWorkbook.Sheets.Count
     For i = 1 To sn_
         If Sheets(i).CodeName <> "Лист8" Then
             Sheets(i).Visible = xlSheetVeryHidden
         End If
     Next i
End Sub
Private Sub Workbook_Open()
     nn_ = InputBox("Введи пароль")
     If nn_ = CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber & "" Then
         Da_ = Array(Лист1, Лист2, Лист3)   'Видимые листы
         For Each sh In Da_
             sh.Visible = xlSheetVisible
         Next sh
         Лист8.Visible = xlSheetVeryHidden
         Лист1.Activate
     End If
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 08.07.2015 в 15:06
ShAM Дата: Среда, 08.07.2015, 16:04 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 249 ±
Замечаний: 0% ±

Excel 2010
Саша, привет. ScreenUpdating забыл включить. :)
[offtop]Что, не отдыхается?[/offtop]
 
Ответить
СообщениеСаша, привет. ScreenUpdating забыл включить. :)
[offtop]Что, не отдыхается?[/offtop]

Автор - ShAM
Дата добавления - 08.07.2015 в 16:04
_Boroda_ Дата: Среда, 08.07.2015, 16:44 | Сообщение № 9
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Алишер, приветствую!
Что, не отдыхается?

Ты телевизор смотришь? Я в Сочи был. Как раз тогда, когда там дождик шел.
Сейчас-то уже обратно приехал. Загорелый и накупавшийся - за 2 недели целый один день на пляже был.

ScreenUpdating забыл включить

Не, не забыл. Он после окончания макроса сам включается.
Запусти последовательно
[vba]
Код
Sub tt()
        Application.ScreenUpdating = 0
        MsgBox (Application.ScreenUpdating)
End Sub

Sub ee()
        MsgBox (Application.ScreenUpdating)
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеАлишер, приветствую!
Что, не отдыхается?

Ты телевизор смотришь? Я в Сочи был. Как раз тогда, когда там дождик шел.
Сейчас-то уже обратно приехал. Загорелый и накупавшийся - за 2 недели целый один день на пляже был.

ScreenUpdating забыл включить

Не, не забыл. Он после окончания макроса сам включается.
Запусти последовательно
[vba]
Код
Sub tt()
        Application.ScreenUpdating = 0
        MsgBox (Application.ScreenUpdating)
End Sub

Sub ee()
        MsgBox (Application.ScreenUpdating)
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 08.07.2015 в 16:44
ShAM Дата: Среда, 08.07.2015, 16:57 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 249 ±
Замечаний: 0% ±

Excel 2010
Он после окончания макроса сам включается.
Спасибо, не знал.
[offtop]
Загорелый
Может это не загар, а грязь, если дожди были. :D Хотя дождем должно было и смыть всю грязюку. :)
[/offtop]
 
Ответить
Сообщение
Он после окончания макроса сам включается.
Спасибо, не знал.
[offtop]
Загорелый
Может это не загар, а грязь, если дожди были. :D Хотя дождем должно было и смыть всю грязюку. :)
[/offtop]

Автор - ShAM
Дата добавления - 08.07.2015 в 16:57
romanus7 Дата: Четверг, 09.07.2015, 00:46 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, При вставке серийного номера, почему то никакой реакции, остается на листе 8, а также пытался менять код при вводе серийного номера вообще любого, все видимые листы открываются, может что то не так в коде?



Сообщение отредактировал romanus7 - Четверг, 09.07.2015, 01:15
 
Ответить
Сообщение_Boroda_, При вставке серийного номера, почему то никакой реакции, остается на листе 8, а также пытался менять код при вводе серийного номера вообще любого, все видимые листы открываются, может что то не так в коде?


Автор - romanus7
Дата добавления - 09.07.2015 в 00:46
_Boroda_ Дата: Четверг, 09.07.2015, 01:10 | Сообщение № 12
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Как у Вас выглядит серийный номер? Должно быть что-то типа 942324669. Если он отображается в ячейке А1 в виде 9,42Е+08, то просто ширину ячейки сделайте побольше. Или копируйте его из строки формул.
Кстати, в своей книге кусок с макросом tt сотрите, вернее, перенесите этот макрос в другую книгу, чтобы оттуда можно было списать, если забудете.

Чтобы не увеличивать ширину руками, макрос tt можно переписать так
[vba]
Код
Sub tt()
     [a1] = CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber
     Columns("A:A").EntireColumn.AutoFit
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеКак у Вас выглядит серийный номер? Должно быть что-то типа 942324669. Если он отображается в ячейке А1 в виде 9,42Е+08, то просто ширину ячейки сделайте побольше. Или копируйте его из строки формул.
Кстати, в своей книге кусок с макросом tt сотрите, вернее, перенесите этот макрос в другую книгу, чтобы оттуда можно было списать, если забудете.

Чтобы не увеличивать ширину руками, макрос tt можно переписать так
[vba]
Код
Sub tt()
     [a1] = CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber
     Columns("A:A").EntireColumn.AutoFit
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 09.07.2015 в 01:10
romanus7 Дата: Четверг, 09.07.2015, 01:17 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, с серийным номером разобрался, я для примера произвольный написал, вопрос вот в чем. Правильно ли я его вставил? Туда куда надо? Заранее спасибо. И серийник начинается -2459..... С минуса.


Сообщение отредактировал romanus7 - Четверг, 09.07.2015, 01:19
 
Ответить
Сообщение_Boroda_, с серийным номером разобрался, я для примера произвольный написал, вопрос вот в чем. Правильно ли я его вставил? Туда куда надо? Заранее спасибо. И серийник начинается -2459..... С минуса.

Автор - romanus7
Дата добавления - 09.07.2015 в 01:17
_Boroda_ Дата: Четверг, 09.07.2015, 01:31 | Сообщение № 14
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А я и не заметил, что Вы его в код прописали. Не, в том-то и фишка, что вовнутрь кода номер ни в коем случае нельзя записывать. Он должен быть у Вас где-то в другом месте и Вы каждый раз его должны заводить. Хотя, я так подумал-подумал - и так нормально.
Ну а если так, для поиграться, то замените <> на =
И, если уж Вы убрали кусок & "", то номер пишите без кавычек
[vba]
Код
If CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber = 988888889 Then
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА я и не заметил, что Вы его в код прописали. Не, в том-то и фишка, что вовнутрь кода номер ни в коем случае нельзя записывать. Он должен быть у Вас где-то в другом месте и Вы каждый раз его должны заводить. Хотя, я так подумал-подумал - и так нормально.
Ну а если так, для поиграться, то замените <> на =
И, если уж Вы убрали кусок & "", то номер пишите без кавычек
[vba]
Код
If CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber = 988888889 Then
[/vba]

Автор - _Boroda_
Дата добавления - 09.07.2015 в 01:31
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для защиты (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!