Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запрос пароля на каждом листе. / 8 сообщений из 8, страница 1 из 1
27.08.2011, 08:54
    #37414456
excel_sheet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос пароля на каждом листе.
Добрый день!

Есть Excel файл c большим количеством листов, все листы запоролены, как сделать так, чтобы при переходе на каждый новый лист происходил запрос пароля?
Есть ли что-нибудь аналогичное Workbook_Open() например Worksheet_Open()?
Чтобы можно было повесить туда вызов формы с запросом пароля?
...
Рейтинг: 0 / 0
27.08.2011, 09:00
    #37414459
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос пароля на каждом листе.
excel_sheetЕсть ли что-нибудь аналогичное Workbook_Open() например Worksheet_Open()?
Так сложно заглянуть в перечень событий листа?

Activate
...
Рейтинг: 0 / 0
27.08.2011, 09:15
    #37414466
excel_sheet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос пароля на каждом листе.
Shocker.Proexcel_sheetЕсть ли что-нибудь аналогичное Workbook_Open() например Worksheet_Open()?
Так сложно заглянуть в перечень событий листа?

Activate

C VBA работаю первый раз и надеюсь что последний.
Если не сложно, можно небольшой примерчик.
...
Рейтинг: 0 / 0
27.08.2011, 09:21
    #37414472
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос пароля на каждом листе.
Код: plaintext
1.
2.
Private Sub Worksheet_Activate()
  Form1.Show
End Sub

Располагать в модуле листа.
...
Рейтинг: 0 / 0
27.08.2011, 09:25
    #37414474
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос пароля на каждом листе.
Shocker.Pro, неа, если сказано
C VBA работаю первый раз и надеюсь что последний
Тогда ИнпутБокс

К автору, а вдруг понравится???
...
Рейтинг: 0 / 0
27.08.2011, 09:36
    #37414478
excel_sheet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос пароля на каждом листе.
Shocker.Pro
Код: plaintext
1.
2.
Private Sub Worksheet_Activate()
  Form1.Show
End Sub

Располагать в модуле листа.
Спасибо!

Убрал форму, сделал так:
Код: plaintext
1.
2.
3.
4.
Private Sub Worksheet_Activate()
    Dim strPassword As String
    strPassword = InputBox("Enter the password for the worksheet")
    Sheets("Лист3").Unprotect Password:=strPassword
End Sub
вроде работает.

Ципихович ЭндрюК автору, а вдруг понравится???
Всё возможно, но не думаю что мне часто этим прийдётся заниматься т.к. в основном работаю с БД., а это просто просьба красивой девочки из бизнесов ))
...
Рейтинг: 0 / 0
27.08.2011, 14:35
    #37414644
Диклевич Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос пароля на каждом листе.
так где одна просьба там и больше....
Знаем такое.
...
Рейтинг: 0 / 0
28.08.2011, 03:18
    #37414937
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос пароля на каждом листе.
excel_sheet,
авторУбрал форму, сделал так:
Код: plaintext
1.
2.
3.
4.
Private Sub Worksheet_Activate()
    Dim strPassword As String
    strPassword = InputBox("Enter the password for the worksheet")
    Sheets("Лист3").Unprotect Password:=strPassword
End Sub
1. В итоге красивая девочка из бизнесов при кажом переключении на этот лист будет лицезреть требование "Enter the password for the worksheet".
Меня бы взбесило разу так на втором.
2. имхо, копипастить этот код в модуль каждлго листа - моветон.
3. Ввели правильный пароль, чего-то поменяли на листе (или не поменяли, не суть важно). Сохранили книгу, - получили незащищенный лист.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
' ===================================
' модуль книги
' ===================================

' недостаток противоположный описаному в п.3
' книга принудительно сохраняется при закрытии
' при этом все листы, с которыми работали, становятся защищенными

Option Explicit

Dim col As Collection
Dim oldSheet

' ===================================
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    With oldSheet
    If Not IsNull(col(.Name)) Then _
        .Protect Password:=col(.Name)
    End With
    Set oldSheet = Nothing: Set col = Nothing
    ThisWorkbook.Save
End Sub
' ===================================
Private Sub Workbook_Open()
    Dim w
    Set col = New Collection
    For Each w In Worksheets
        col.Add Null, w.Name
    Next w
    Set oldSheet = ActiveSheet
End Sub
' ===================================
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim s$
    'Exit Sub
    With oldSheet
    If Not IsNull(col(.Name)) Then _
        .Protect Password:=col(.Name)
    End With
    
    Set oldSheet = Sh
    
    With Sh
        If IsNull(col(.Name)) Then
            s = InputBox("Enter the password for the worksheet")
        Else
            s = col(.Name)
        End If
        
        On Error Resume Next
        .Unprotect Password:=s
        If Err.Number =  0  Then
            If IsNull(col(.Name)) Then
' извращение с удалением и созданием элемента потому
' что так и не нашел как изменить существующий элемент :(
' вариант col(.name)=s не сработал
' может у меня руки не так заточены?
                col.Remove .Name: col.Add s, .Name
            End If
        End If
        Err.Clear
    End With 'Sh
    
End Sub
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запрос пароля на каждом листе. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]