Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Excel - Break function...

2.6K
11 марта 2004 года
Lev_ru
35 / / 05.03.2004
Как известно, если при выполнении какого-либо макроса, нажать ctrl+break, то макрос остановится, как программно убрать эту функцию? Дело в том, что есть в книге ввод пароля, но если нажать ctrl+break, то надобность этой функции пропадает...
266
11 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Lev_ru
Как известно, если при выполнении какого-либо макроса, нажать ctrl+break, то макрос остановится, как программно убрать эту функцию? Дело в том, что есть в книге ввод пароля, но если нажать ctrl+break, то надобность этой функции пропадает...


Прямых решений, боюсь, нет.
Я бы сделал следующим образм: при запуске макроса вызывал бы внешний резидент, который "глушил" бы Ctrl + Break, а по окончании работы "критичной" части отрубал бы эьтого резидента. Хотя, с другой стороны, резидента легко вырубить через диспетчер задач. Тоеть, нужно его как-то запускать так, чтобы он или в диспетчер не попадал. или с такм приоритетом, чтобы его срубить нельзя было. Но тогда возможны проблемы со стороны установленных на машине антивирусов...
Но, думаю, придумать что-нибудь можно... Я подумаю ещё.

258
11 марта 2004 года
SergeySV
1.5K / / 19.03.2003
Помойму в Application была возможсность блокировок некоторых клавиш, ща попробую поискать, но если не успею, попробуйте покапать в этом направлении, где-то я такое видел ..... блин, чем больше знаешь, тем труднее вспомнить откуда ты это знаешь :)
258
11 марта 2004 года
SergeySV
1.5K / / 19.03.2003
О, кажись вспомнил, шутка была в том, чтобы просто занять эту комбинацию своей процедурой (ну или пустотой соотв.) через метод Application.OnKey()
2.6K
11 марта 2004 года
Lev_ru
35 / / 05.03.2004
Цитата:
Originally posted by SergeySV
О, кажись вспомнил, шутка была в том, чтобы просто занять эту комбинацию своей процедурой (ну или пустотой соотв.) через метод Application.OnKey()



А как дальше задать именно CtrlBreak? Application.OnKey(???)

258
12 марта 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Lev_ru


А как дальше задать именно CtrlBreak? Application.OnKey(???)



Ща у себя потестирую и напишу...

258
12 марта 2004 года
SergeySV
1.5K / / 19.03.2003
Мдам, пока не утешительно.
Вообщем комбинацию я забиваю, но она отрабатывает мою пустышку-функцию только если если Excel не занимается вычислениями, а если нажать Ctrl-Break во время работы кода, то все равно вначале вываливается в дебагер - видно у него приоритет выше.
258
12 марта 2004 года
SergeySV
1.5K / / 19.03.2003
А почему ты не хочешь поставить пароль на проект, тогда Ctrl-Break конечно можно активизировать, но вот к коду уже не подлезешь, максимум что, это только вообще остановить выполнение макроса или продложить его дальше, все.... чем тебе такой вариант не устраивает
258
12 марта 2004 года
SergeySV
1.5K / / 19.03.2003
Все короче, нашел, для Ctrl-Break есть специальное свойство:
Application.EnableCancelKey = xlDisabled; xlErrorHandler; xlInterrupt

xlDisabled - отключает дебагер и на Ctrl-Break программа не реагирует

xlErrorHandler - очень прикольное свойство; на нажатие Ctrl-Break генерит в коде ошибку №18 и и если у тебя стоит On Error Goto ErrHandle, то соответственно код вываливается на метку ErrHandle. Т.о. можно узнать что пользователь хотел прервать программу, поругать его хорошенько и прекратить работать (или вернуться куда-нибудь).

xlInterrupt - ну это то что по умолчанию, т.е. диалоговое окно с предожением подебажить код и т.д.

Маленький нюанс: менять это свойство необходимо прям в коде функции, потому что по моим наблюдениям, изменение Application.EnableCancelKey в одной процедуре никак не влияет на другую процедуру. Судя по всему, по окончании функции Excel просто сбрасывает это свойство на умолч.
2.6K
12 марта 2004 года
Lev_ru
35 / / 05.03.2004
Цитата:
Originally posted by SergeySV
А почему ты не хочешь поставить пароль на проект, тогда Ctrl-Break конечно можно активизировать, но вот к коду уже не подлезешь, максимум что, это только вообще остановить выполнение макроса или продложить его дальше, все.... чем тебе такой вариант не устраивает



На книге тоже стоит пароль, но мне нужно, чтобы пользователь ввел свое имя и пароль. То есть я сделал распределение прав (администраторы и пользователи). Самое гнусное в этом деле, что если книгу открыть в обычном блокноте, то там открыт весь код VBA-проекта, даже если в свойствах книги поставить лпцию шифрования... Вот такой вот Excel "Мощный продукт"...

266
12 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Lev_ru


На книге тоже стоит пароль, но мне нужно, чтобы пользователь ввел свое имя и пароль. То есть я сделал распределение прав (администраторы и пользователи). Самое гнусное в этом деле, что если книгу открыть в обычном блокноте, то там открыт весь код VBA-проекта, даже если в свойствах книги поставить лпцию шифрования... Вот такой вот Excel "Мощный продукт"...


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

266
12 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by mhaturov

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


Библиотека шифрования:

Код:
'МАХ библиотека шифрования паролей (спасибо А.Ларину http://yxine.km.ru)
Option Explicit

Public Function IsPrime(ByVal P As Long) As Boolean
'МАХ функция определения простоты числа
Dim Max As Long, F As Long

    IsPrime = False 'МАХ пока число считаем сложным

    If P < 2 Then Exit Function

    'МАХ по методу Эрастосфена определяем простоту числа
    If ((P And 1) = 0) Then
       IsPrime = (P = 2)
       Exit Function
    End If

    If ((P Mod 3) = 0) Then
       IsPrime = (P = 3)
       Exit Function
    End If

    Max = CLng(Int(Sqr(P)))

    For F = 5 To Max Step 6
        If (((P Mod F) = 0) Or ((P Mod (F + 2)) = 0)) Then Exit Function
    Next

    IsPrime = True 'МАх считаем число простым

End Function

Public Function SNBEM(Text)
'МАХ шифровка односторонним ключём
 Dim I As Long, J As Long, K As Long, L As Long, P As Long, R As String, T As String
   T = Text
   For P = 1 To 2
     R = ""
     L = Len(Text)
     For I = 1 To L
       J = (L * I + 723) Mod (L + I)
       For K = I To Len(Text)
        J = ((J * Asc(Mid(Text, K, 1))) Mod 256)
        Do While Not IsPrime(J)
          J = J + 1
        Loop
       Next
      J = J Mod 256
      R = Chr(J) & R
    Next
    Text = R
  Next
  Text = T
  SNBEM = R
End Function

Public Function OnceTimeNotepad(ByVal Text As String) As String
'МАХ Метод одноразового блокнота
Dim Res As String, I As Long
Dim AsN As Long
Dim Password As String

  Password = SNBEM("/.,mnbvcxz’;lkjhgfdsa][poiuytrewq=-0987654321!@#$%^&*()_+|QWERTYUIOP{}ASDFGHJKL:”ZXCVBNM<>?")
  Do While Len(Password) < Len(Text)
    Password = Password & Password ' создаём цикличный ключ
  Loop
  For I = 1 To Len(Text)
    AsN = (CLng(Asc(Mid$(Text, I, 1))) + CLng(Asc(Mid$(Password, I, 1))))
    Res = Res & Chr(AsN Mod 256)
  Next
  OnceTimeNotepad = Res
 
End Function

Public Function ReOnceTimeNotepad(ByVal Text As String) As String
'МАХ Метод одноразового блокнота (расшифровка)
Dim Res As String, I As Long
Dim AsN As Long
Dim Password As String

  Password = SNBEM("/.,mnbvcxz’;lkjhgfdsa][poiuytrewq=-0987654321!@#$%^&*()_+|QWERTYUIOP{}ASDFGHJKL:”ZXCVBNM<>?")
  Do While Len(Password) < Len(Text)
    Password = Password & Password ' создаём цикличный ключ
  Loop
  For I = 1 To Len(Text)
    AsN = (CLng(Asc(Mid$(Text, I, 1))) - CLng(Asc(Mid$(Password, I, 1))))
    Res = Res & Chr((AsN + 256) Mod 256)
  Next
  ReOnceTimeNotepad = Res
 
End Function
266
12 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Lev_ru


На книге тоже стоит пароль, но мне нужно, чтобы пользователь ввел свое имя и пароль. То есть я сделал распределение прав (администраторы и пользователи). Самое гнусное в этом деле, что если книгу открыть в обычном блокноте, то там открыт весь код VBA-проекта, даже если в свойствах книги поставить лпцию шифрования... Вот такой вот Excel "Мощный продукт"...


А по поводу "мощьного продукта" посмотри:
http://forum.codenet.ru/showthread.php?threadid=15740
Там хорошо показана вся безопастность "офиса" :D :D:D

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог