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

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

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

Activate

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

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

К автору, а вдруг понравится???
...
Рейтинг: 0 / 0
Запрос пароля на каждом листе.
    #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
Запрос пароля на каждом листе.
    #37414644
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так где одна просьба там и больше....
Знаем такое.
...
Рейтинг: 0 / 0
Запрос пароля на каждом листе.
    #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
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запрос пароля на каждом листе.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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