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

Вход

Регистрация

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

 

= Мир MS Excel/-=Макрос прав доступа=- - Мир MS Excel

Старая форма входа
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » -=Макрос прав доступа=-
-=Макрос прав доступа=-
Serge_007 Дата: Воскресенье, 29.05.2011, 11:39 | Сообщение № 1
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Всем привет.

Файла пока нет, но выглядеть он будет так:
Пустой лист с надписью "У Вас нет прав доступа";
Несколько "очень скрытых" листов (количество всегда разное) названных по User Name адресатов.

Цель макроса: При получении файла юзером, должен скрываться пустой лист и отображаться лист соответствующий User Namе. Если такого User Name в названиях листов нет - то ничего не происходит.

Спасибо.


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеВсем привет.

Файла пока нет, но выглядеть он будет так:
Пустой лист с надписью "У Вас нет прав доступа";
Несколько "очень скрытых" листов (количество всегда разное) названных по User Name адресатов.

Цель макроса: При получении файла юзером, должен скрываться пустой лист и отображаться лист соответствующий User Namе. Если такого User Name в названиях листов нет - то ничего не происходит.

Спасибо.

Автор - Serge_007
Дата добавления - 29.05.2011 в 11:39
Саня Дата: Воскресенье, 29.05.2011, 14:30 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
Здоров, Серега.
предлагаю на пустом листе написать - "У Вас нет прав доступа либо отключены макросы" - была такая проблема...
[vba]
Код

Private Sub Workbook_Open()
       Dim sh0 As Worksheet, shUser As Worksheet

       Set sh0 = ActiveSheet 'узкое место - лучше указать на "пустого" поконкретней

       On Error Resume Next
       Set shUser = Sheets(Environ("UserName"))
       If Err = 0 Then
           shUser.Visible = xlSheetVisible
           sh0.Visible = xlSheetVeryHidden
       End If
       On Error GoTo 0

End Sub
[/vba]
 
Ответить
СообщениеЗдоров, Серега.
предлагаю на пустом листе написать - "У Вас нет прав доступа либо отключены макросы" - была такая проблема...
[vba]
Код

Private Sub Workbook_Open()
       Dim sh0 As Worksheet, shUser As Worksheet

       Set sh0 = ActiveSheet 'узкое место - лучше указать на "пустого" поконкретней

       On Error Resume Next
       Set shUser = Sheets(Environ("UserName"))
       If Err = 0 Then
           shUser.Visible = xlSheetVisible
           sh0.Visible = xlSheetVeryHidden
       End If
       On Error GoTo 0

End Sub
[/vba]

Автор - Саня
Дата добавления - 29.05.2011 в 14:30
Serge_007 Дата: Воскресенье, 29.05.2011, 14:38 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Саня)
все это добро в обработчик Workbook_Open

Ага, ты пост подредактировал wink

Блин, а проверить-то его как?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Саня)
все это добро в обработчик Workbook_Open

Ага, ты пост подредактировал wink

Блин, а проверить-то его как?

Автор - Serge_007
Дата добавления - 29.05.2011 в 14:38
Саня Дата: Воскресенье, 29.05.2011, 15:02 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
Quote (Serge_007)
Блин, а проверить-то его как?

я надеюсь первое слово - это не обращение biggrin
что и на что проверить?
 
Ответить
Сообщение
Quote (Serge_007)
Блин, а проверить-то его как?

я надеюсь первое слово - это не обращение biggrin
что и на что проверить?

Автор - Саня
Дата добавления - 29.05.2011 в 15:02
Serge_007 Дата: Воскресенье, 29.05.2011, 15:11 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Саня)
я надеюсь первое слово - это не обращение

Правильно надеешься smile


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Саня)
я надеюсь первое слово - это не обращение

Правильно надеешься smile

Автор - Serge_007
Дата добавления - 29.05.2011 в 15:11
Serge_007 Дата: Воскресенье, 29.05.2011, 15:19 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Работает, да не совсем...

Лист 1 скрывает, а вот лист "фыфыы" - остаётся.
К сообщению приложен файл: Analitica.xls (31.0 Kb)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеРаботает, да не совсем...

Лист 1 скрывает, а вот лист "фыфыы" - остаётся.

Автор - Serge_007
Дата добавления - 29.05.2011 в 15:19
Саня Дата: Воскресенье, 29.05.2011, 19:48 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
Quote (Serge_007)
а вот лист "фыфыы" - остаётся.

макрос скрывает только твой лист-заставку и открывает лист с названием логина пользователя,
остальные листы изначально (я так думал и это правильно, т.к. макросы "вырублены" и все листы напоказ, если не скрыты изначально - на макросы так уж сильно надеяться нельзя) "очень" скрыты и с ними он ничего не делает...
 
Ответить
Сообщение
Quote (Serge_007)
а вот лист "фыфыы" - остаётся.

макрос скрывает только твой лист-заставку и открывает лист с названием логина пользователя,
остальные листы изначально (я так думал и это правильно, т.к. макросы "вырублены" и все листы напоказ, если не скрыты изначально - на макросы так уж сильно надеяться нельзя) "очень" скрыты и с ними он ничего не делает...

Автор - Саня
Дата добавления - 29.05.2011 в 19:48
Serge_007 Дата: Воскресенье, 29.05.2011, 20:09 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Саня)
макрос скрывает только твой лист-заставку и открывает лист с названием логина пользователя

Точно, так и надо.
Но всё равно что-то не так...
Смотри, я прикладываю файл. Измени название листа Serge 007 на своё, сохрани файл и открой его.
У меня файл открывается на листе Лист 1, а не на Serge 007, как должно быть...
К сообщению приложен файл: 7887899.xls (32.0 Kb)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Саня)
макрос скрывает только твой лист-заставку и открывает лист с названием логина пользователя

Точно, так и надо.
Но всё равно что-то не так...
Смотри, я прикладываю файл. Измени название листа Serge 007 на своё, сохрани файл и открой его.
У меня файл открывается на листе Лист 1, а не на Serge 007, как должно быть...

Автор - Serge_007
Дата добавления - 29.05.2011 в 20:09
Саня Дата: Воскресенье, 29.05.2011, 20:34 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
проверь свой логин -
Environ("UserName")
К сообщению приложен файл: 3127543.xls (28.5 Kb)
 
Ответить
Сообщениепроверь свой логин -
Environ("UserName")

Автор - Саня
Дата добавления - 29.05.2011 в 20:34
Serge_007 Дата: Воскресенье, 29.05.2011, 20:42 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Саня)
проверь свой логин
Логин у меня всегда один smile
И в первом варианте кода - работало...

И сейчас работает. Но ты явно в коде логин прописал, а надо что бы макрос сам получал его...


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Саня)
проверь свой логин
Логин у меня всегда один smile
И в первом варианте кода - работало...

И сейчас работает. Но ты явно в коде логин прописал, а надо что бы макрос сам получал его...

Автор - Serge_007
Дата добавления - 29.05.2011 в 20:42
Саня Дата: Воскресенье, 29.05.2011, 21:17 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
в редакторе VB нажми Ctrl+G и напиши там
?Environ("UserName")
нажми ввод. Что у тебя получилось?
 
Ответить
Сообщениев редакторе VB нажми Ctrl+G и напиши там
?Environ("UserName")
нажми ввод. Что у тебя получилось?

Автор - Саня
Дата добавления - 29.05.2011 в 21:17
Serge_007 Дата: Воскресенье, 29.05.2011, 21:27 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Саня)
в редакторе VB нажми Ctrl+G и напиши там
?Environ("UserName")
нажми ввод. Что у тебя получилось?

Serge 007

Я же прежде чем лист называть формулами проверил какой у меня User Name


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Саня)
в редакторе VB нажми Ctrl+G и напиши там
?Environ("UserName")
нажми ввод. Что у тебя получилось?

Serge 007

Я же прежде чем лист называть формулами проверил какой у меня User Name

Автор - Serge_007
Дата добавления - 29.05.2011 в 21:27
Саня Дата: Воскресенье, 29.05.2011, 21:30 | Сообщение № 13
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
тогда все должно работать как надо, а я написал непосредственно "Serge 007", чтобы сэмулировать твой логин...
 
Ответить
Сообщениетогда все должно работать как надо, а я написал непосредственно "Serge 007", чтобы сэмулировать твой логин...

Автор - Саня
Дата добавления - 29.05.2011 в 21:30
Serge_007 Дата: Понедельник, 30.05.2011, 23:25 | Сообщение № 14
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Саня, сегодня проверить не удалось - слишком много работы...


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеСаня, сегодня проверить не удалось - слишком много работы...

Автор - Serge_007
Дата добавления - 30.05.2011 в 23:25
Alex_ST Дата: Вторник, 31.05.2011, 12:26 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3208
Репутация: 609 ±
Замечаний: 0% ±

2003
Серёга, а в продолжение идеи Сани попробуй-ка в модуле ЭтаКнига размести такой код:
[vba]
Код
Private Sub Workbook_Open()
     Dim iSht As Worksheet
     On Error Resume Next
     For Each iSht In ThisWorkbook.Sheets
        iSht.Visible = IIf(iSht.Name = Environ("UserName"), xlSheetVisible, xlSheetVeryHidden)
     Next
     If Err Then ThisWorkbook.Close SaveChanges:=False
End Sub
[/vba]

Только для первой пробы лучше сделать последний If так:   [vba]
Код
If Err Then MsgBox "Sheet " & Environ("UserName") & " not found!"
'   If Err Then ThisWorkbook.Close SaveChanges:=False
[/vba]

У меня почему-то со своим UserName работало отлично, а когда я вместо Environ("UserName") при тестировании указывал напрямую Serge_007, то не всегда хотела открываться и приходилось извращаться - макросы запрещать чтобы книгу открыть biggrin
Может, пробел в имени как-то мешает? Кстати, а разве в UserName допустимы пробелы?



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСерёга, а в продолжение идеи Сани попробуй-ка в модуле ЭтаКнига размести такой код:
[vba]
Код
Private Sub Workbook_Open()
     Dim iSht As Worksheet
     On Error Resume Next
     For Each iSht In ThisWorkbook.Sheets
        iSht.Visible = IIf(iSht.Name = Environ("UserName"), xlSheetVisible, xlSheetVeryHidden)
     Next
     If Err Then ThisWorkbook.Close SaveChanges:=False
End Sub
[/vba]

Только для первой пробы лучше сделать последний If так:   [vba]
Код
If Err Then MsgBox "Sheet " & Environ("UserName") & " not found!"
'   If Err Then ThisWorkbook.Close SaveChanges:=False
[/vba]

У меня почему-то со своим UserName работало отлично, а когда я вместо Environ("UserName") при тестировании указывал напрямую Serge_007, то не всегда хотела открываться и приходилось извращаться - макросы запрещать чтобы книгу открыть biggrin
Может, пробел в имени как-то мешает? Кстати, а разве в UserName допустимы пробелы?

Автор - Alex_ST
Дата добавления - 31.05.2011 в 12:26
Serge_007 Дата: Вторник, 31.05.2011, 12:36 | Сообщение № 16
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Спасибо Алекс.

Цитата Alex_ST ()
а разве в UserName допустимы пробелы?

У меня есть. Проверял функцией ЯЧЕЙКА.


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеСпасибо Алекс.

Цитата Alex_ST ()
а разве в UserName допустимы пробелы?

У меня есть. Проверял функцией ЯЧЕЙКА.

Автор - Serge_007
Дата добавления - 31.05.2011 в 12:36
Alex_ST Дата: Вторник, 31.05.2011, 13:45 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3208
Репутация: 609 ±
Замечаний: 0% ±

2003
А мой-то макрос проверил?
У меня пашет настолько нормально, что открыть книгу, где нет твоего листа можно только предварительно отключив макросы



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеА мой-то макрос проверил?
У меня пашет настолько нормально, что открыть книгу, где нет твоего листа можно только предварительно отключив макросы

Автор - Alex_ST
Дата добавления - 31.05.2011 в 13:45
Serge_007 Дата: Вторник, 31.05.2011, 13:59 | Сообщение № 18
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Alex_ST)
А мой-то макрос проверил?

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


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Alex_ST)
А мой-то макрос проверил?

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

Автор - Serge_007
Дата добавления - 31.05.2011 в 13:59
Alex_ST Дата: Вторник, 31.05.2011, 14:20 | Сообщение № 19
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3208
Репутация: 609 ±
Замечаний: 0% ±

2003
У меня, кстати, тоже с твоим персональным листом были проблемы.
Попробуй когда дойдут руки до отладки добавить персональный лист так:
[vba]
Код
Sub AddUserSheet()
     ThisWorkbook.Sheets.Add
     ActiveSheet.Name = Environ("UserName")
End Sub
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеУ меня, кстати, тоже с твоим персональным листом были проблемы.
Попробуй когда дойдут руки до отладки добавить персональный лист так:
[vba]
Код
Sub AddUserSheet()
     ThisWorkbook.Sheets.Add
     ActiveSheet.Name = Environ("UserName")
End Sub
[/vba]

Автор - Alex_ST
Дата добавления - 31.05.2011 в 14:20
Alex_ST Дата: Вторник, 31.05.2011, 17:09 | Сообщение № 20
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3208
Репутация: 609 ±
Замечаний: 0% ±

2003
Серёга, у меня сегодня на работе было свободное время и вот что я накрутил:
Для каждого из "нужных" юзеров в книге есть свой лист, имя которого совпадает с именем пользователя компьютера (переменная окружения "UserName" ).
Перед закрытием книги все листы пользователей сильно скрываются (SheetVeryHidden).
Лист Access_Denied (имя задаётся константой в декларациях модуля ЭтаКнига) показывается (SheetVisible) и книга сохраняется.
Лист Access_Denied Защищен от изменений паролем.
Проект VBA защищен паролем.
ОБА ПАРОЛЯ - пробел.
Поэтому даже если на компьютере макросы, пользователь, для которого в книге нет персонального листа, открыть спрятанные листы книги не сможет, а увидит только лист Access_Denied.
Если же макросы включены, то книга просто закроется.
(для этого нужно исправить последние строки процедуры Workbook_Open так:[vba]
Код
'If Err Then MsgBox "Sheet " & UName & " not found!" ' пытаемся скрыть PublicSheet. Если будет ошибка, то значит все другие уже скрыты
If Err Then ThisWorkbook.Close SaveChanges:=False
[/vba]

Единственное, что пока не смог сделать: если с "левого" компа открыть книгу при отключенных макросах, искалечить имя листа Access_Denied и сохраниться, то после следующего открытия со включенными макросами может заглючить, т.к. не найдёт нужный лист.
К сообщению приложен файл: CheckUserName.xls (70.0 Kb)



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСерёга, у меня сегодня на работе было свободное время и вот что я накрутил:
Для каждого из "нужных" юзеров в книге есть свой лист, имя которого совпадает с именем пользователя компьютера (переменная окружения "UserName" ).
Перед закрытием книги все листы пользователей сильно скрываются (SheetVeryHidden).
Лист Access_Denied (имя задаётся константой в декларациях модуля ЭтаКнига) показывается (SheetVisible) и книга сохраняется.
Лист Access_Denied Защищен от изменений паролем.
Проект VBA защищен паролем.
ОБА ПАРОЛЯ - пробел.
Поэтому даже если на компьютере макросы, пользователь, для которого в книге нет персонального листа, открыть спрятанные листы книги не сможет, а увидит только лист Access_Denied.
Если же макросы включены, то книга просто закроется.
(для этого нужно исправить последние строки процедуры Workbook_Open так:[vba]
Код
'If Err Then MsgBox "Sheet " & UName & " not found!" ' пытаемся скрыть PublicSheet. Если будет ошибка, то значит все другие уже скрыты
If Err Then ThisWorkbook.Close SaveChanges:=False
[/vba]

Единственное, что пока не смог сделать: если с "левого" компа открыть книгу при отключенных макросах, искалечить имя листа Access_Denied и сохраниться, то после следующего открытия со включенными макросами может заглючить, т.к. не найдёт нужный лист.

Автор - Alex_ST
Дата добавления - 31.05.2011 в 17:09
Мир MS Excel » Вопросы и решения » Вопросы по VBA » -=Макрос прав доступа=-
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

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