Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2019, 14:10   #1
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию ввод пароля из текстового файла

Ребята! не судите строго но как смог придумать тему так и навоял, может кто поможет:
суть моего кода такой маневр:
при файла XL запускается :
1. формируется файл pass.txt в котором
2. запускается генератор, формирует строку с паролем
3. строка записывается в память переменной Spp
в InputBox вводится пароль из файла pass.txt в ручную

и при каждом открывании файла генератор формирует новый пароль
и записывается в файл pass.txt

загвоздка в том что при каждом открытии файла pass.txt запись
остается одна и та же. а по замыслу генератор должен формировать разную строку в текстовом файле
1. работа генератора функции
Код:
Public Function генератор(Optional Lenght As Integer = 8)
    For S = 1 To Lenght
        choice = Int(Rnd * 3)
        If choice = 0 Then
            nextsymbol = Int(Rnd * 9)
        End If
        If choice = 1 Then
            nextsymbol = Chr(Int((90 - 65 + 1) * Rnd + 65))
        End If
        If choice = 2 Then
            nextsymbol = Chr(Int((122 - 97 + 1) * Rnd + 97))
        End If
        PassTxt = PassTxt & nextsymbol
    Next S
    генератор = PassTxt
End Function
2. создание/запись в текстовый файл
Код:
Sub записьфайл()
    Spp = генератор 'ЗАНОШУ ДАННЫЕ В ПЕРЕМЕННУЮ
Dim ff As Integer
'Получаем свобод номер для открываемого файла
ff = FreeFile
'создаем файл для чтения и записи
Open ThisWorkbook.Path & "\pass.txt" For Output As ff
'Записываем в файл
Write #ff, Spp
'Закрываем файл
Close ff
End Sub
3. Проверка пароля
Код:
Private Sub Workbook_Open() 'проверка пароля
Call записьфайл
ActiveWorkbook.Windows(1).Visible = False
Dim password As String
Do
If PassCorr Then Exit Sub
        password = InputBox("Доступ по паролю: генератор сформировал  пароль", "Сообщение")
If StrPtr(password) = 0 Then 'если нажата кнопка отмена
    MsgBox "Нажата кнопка Отмена.", vbExclamation, "Сообщение"
'========== закрываем приложение
        sName = "ПЕРЕОФОРМЛЕНИЕ.xlsm"
            Workbooks(sName).Close
                Documents.Close wdDoNotSaveChanges
'=============
Exit Do
ElseIf password = "" Then 'проверка поля на наличие значения пусто
    MsgBox "Поле пароля имеет значение ПУСТО, повторите ввод пароля!", vbCritical, "Сообщение"

ElseIf password = Spp Then 'ПРОВЕРКА ПРАВИЛЬНОСТИ ПАРОЛЯ
'========== цикл для отображение всех листов
For Each wb In Workbooks
  For Each w In wb.Windows
      w.Visible = True
  Next
Next
Sheets("0000").Select
Exit Sub

'====
ElseIf password = "911" Then
        MsgBox " ПОЗДРАВЛЯЕМ!", 16, "Важная информация"
        .........................
        Exit Sub
Exit Do
'====
Else
    MsgBox "Пароль" & " - " & password & " - " & ", НЕ ВЕРНЫЙ, " & vbCrLf & _
    "нажмите кнопку ОТМЕНА !", vbInformation, "Сообщение"
End If
Loop
End Sub
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!

Последний раз редактировалось DMITRIY_78; 18.11.2019 в 14:26.
DMITRIY_78 вне форума Ответить с цитированием
Старый 18.11.2019, 14:29   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от DMITRIY_78 Посмотреть сообщение
загвоздка в том что при каждом открытии файла pass.txt запись
остается одна и та же. а по замыслу генератор должен формировать разную строку в текстовом файле
а где и когда Вы вызываете записьфайл() ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.11.2019, 14:31   #3
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию

п 3.
кода открываю файл xl
Код:
Private Sub Workbook_Open() 'проверка пароля
Call записьфайл
.....
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!
DMITRIY_78 вне форума Ответить с цитированием
Старый 18.11.2019, 14:44   #4
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию

если напрямую запускать записьфайл() все нормально
может в закрытие файла xl поместить
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
хрень не получается
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!

Последний раз редактировалось DMITRIY_78; 18.11.2019 в 14:47.
DMITRIY_78 вне форума Ответить с цитированием
Старый 18.11.2019, 15:26   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от DMITRIY_78 Посмотреть сообщение
кода открываю файл xl
Код:
Private Sub Workbook_Open() 'проверка пароля
Call записьфайл
этой строчки в коде в сообщении изначально не было, вы ещё добавили потом.

ну ладно.

не смотрел, что происходит, а какой в этой схеме смысл.
Перед открытием книги сгенерировать новый пароль, записать его в файл и потом ждать его ввода?
Зачем это всё надо?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.11.2019, 15:32   #6
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию

так я когда отвечал на ваш вопрос скопировал с сайта странички этот код..ну да ладно, вы правы , правы, да, именно ввод пароля из текстового файла в ручную, это так для себя хотел, другой человек не знает что таким образом формируется новый пароль каждый раз
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!
DMITRIY_78 вне форума Ответить с цитированием
Старый 18.11.2019, 15:36   #7
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию

если пускаю stop - F8. все работает как надо
а по нормальному нифига
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!
DMITRIY_78 вне форума Ответить с цитированием
Старый 18.11.2019, 15:37   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, банальное отключение макросов в настройках MS Excel полностью отключит вашу "парольную защиту"

во-вторых, приведённый код НЕ РАБОЧИЙ
Цитата:
Сообщение от DMITRIY_78 Посмотреть сообщение
If PassCorr Then Exit Sub
откуда взялась необъявленная и не иницилизированная переменная PassCorr?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.11.2019, 15:41   #9
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию

сдается мне что из памяти переменной не удаляется запись первоночальная
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!
DMITRIY_78 вне форума Ответить с цитированием
Старый 18.11.2019, 15:43   #10
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию

да это лишнее убрал но код работает, у меня как то работает,
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!
DMITRIY_78 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
-программа в которой ввод осуществляется из текстового файла и вывод выполняется в текстовый файл; CeBpIk Помощь студентам 0 12.12.2016 20:46
Помощь с Pascal. Ввод инфы из текстового файла в массив указателей Casha12 Помощь студентам 6 05.05.2016 17:05
Ввод с текстового файла faiter_on Паскаль, Turbo Pascal, PascalABC.NET 3 25.12.2014 16:55
Ввод из текстового файла bygoga Паскаль, Turbo Pascal, PascalABC.NET 14 23.11.2008 13:37