Страницы: 1
RSS
Программное изменение строки кода при изменении пароля e-mail
 
Уважаемые гуру форума, помогите решить небольшую проблемку возникшую у меня. Итак, необходимо по срабатыванию СheckBox-a изменить указанную строку кода активной UserForm. Делать я это предполагал (найдя в сети похожий материал об изменении кода модуля) так:    
Код
...
If MsgBox("Вы подтверждаете смену пароля на Вашем почтовом аккаунте?", vbCritical + vbYesNo, "Внимание! Подумайте перед ответом") = vbYes Then ThisWorkbook.VBProject.VBComponents.Item("Mail").CodeModule.ReplaceLine 9, "sPass = new_пароль"
...
В принципе частично срабатывает, НО есть 2 момента:
1. В реальном коде эта строка выглядит как sPass ="пароль" (пароль заключен в кавычки), а после отработки кода выглядит как sPass = new_пароль (без кавычек), что, как я понимаю будет неправильно использовано кодом в дальнейшем. Попытка использовать CSrt(new_пароль) к положительным результатам не привела
2. Более главное. Для смены пароля (чтобы не прописывать новый пароль заранее, что лишает сам смысл смены) предполагалось использовать InputBox:
Код
 ... 
 sNewPass = CStr(InputBox("Введите НОВЫЙ пароль к вашему почтовому аккаунту", "Ввод нового пароля"))
 If MsgBox("Вы подтверждаете смену пароля на Вашем почтовом аккаунте?", vbCritical + vbYesNo, "Внимание! Подумайте перед ответом") = vbYes Then ThisWorkbook.VBProject.VBComponents.Item("Mail").CodeModule.ReplaceLine 9, "sPass = sNewPass"
...
но в таком случае строка после отработки кода выглядит как sPass = sNewPass, т.е. во-первых без кавычек и во-вторых со значение sNewPass, а не с данными InputBox-а. Здесь так же использование CStr не помогло.
В обоих случаях вариант sPass = new_пароль или sPass = sNewPass приводит к результату False
Как можно решить данный вопрос, причем если он решается, то строго в варианте с InputBox? Правильным ответом должна стать строка
sPass = данные InputBox, причем данные обязательно в кавычках.
Заранее спасибо всем откликнувшимся
 
OlegO, Это просто технологический эксперимент уровня садомаза или  ….. Почему не использовать нормальный алгоритм ветвлением? Проверка вашего Checkbox и принятие решения по какой ветке идти - элементарно.
По вопросам из тем форума, личку не читаю.
 
Код
Private Sub CheckBox1_Click()
    sNewPass = CStr(InputBox("Введите НОВЫЙ пароль к вашему почтовому аккаунту", "Ввод нового пароля"))
'    If MsgBox("Вы подтверждаете смену пароля на Вашем почтовом аккаунте?", vbCritical + vbYesNo, "Внимание! Подумайте перед ответом") = vbYes Then ThisWorkbook.VBProject.VBComponents.Item("Mail").CodeModule.ReplaceLine 9, "sPass = new_пароль"
    If MsgBox("Вы подтверждаете смену пароля на Вашем почтовом аккаунте?", vbCritical + vbYesNo, "Внимание! Подумайте перед ответом") = vbYes Then ThisWorkbook.VBProject.VBComponents.Item("Mail").CodeModule.ReplaceLine 9, "sPass = " + sNewPass
End Sub
Изменено: skais675 - 05.06.2018 08:59:56
 
Цитата
БМВ написал:
Проверка вашего Checkbox и принятие решения по какой ветке идти - элементарно
Наверное плохо объяснил. Ситуация-то такая получилась. Пользователь сменил пароль на своем почтовом ящике, после этого перестала отправляться рассылка из Excel, может быть такая ситуация и не возникнет никогда больше, но я решил попробовать предусмотреть и такое. По идее, в случае смены пароля пользователь сможет изменить кусочек кода
 
Спасибо, skais675, сейчас проверю. Надо же как хитро может быть код написан ;)  
 
Цитата
OlegO написал:
По идее, в случае смены пароля пользователь сможет изменить кусочек кода
Предусмотреть это можно и нужно, только не код нужно менять и уж тем более пароль хранить в открытом виде прямо в коде не стоит. Но ответ skais675, прямо по теме.

Как производится отправка? Через какие механизмы? Если MAPI клиент, то одно если прямо на SMTP - другое.
По вопросам из тем форума, личку не читаю.
 
Проверил, почти правильно получилось, только что без нужных кавычек, но с этим я и сам справился (а мог бы и раньше догадаться как :oops: ). В окончательном варианте код выглядит так:
Код
Private Sub CheckBox1_Click()
    If MsgBox("Вы подтверждаете смену пароля на Вашем почтовом аккаунте?", vbCritical + vbYesNo, "Внимание! Подумайте перед ответом") = vbYes Then ThisWorkbook.VBProject.VBComponents.Item("Mail").CodeModule.ReplaceLine 8, "sPass = " & Chr(34) & InputBox("Введите НОВЫЙ пароль к вашему почтовому аккаунту", "Ввод нового пароля") & Chr(34)
End Sub
Спасибо за помощь.
 
Цитата
БМВ написал: хранить в открытом виде прямо в коде не стоит
БМВ, а где на Ваш взгляд лучше хранить пароль?

Цитата
Как производится отправка?
А что касается отправки, то я использую CDO (понравилось, то что не задействуется  OUTLOOK)[/CODE]
 
Цитата
OlegO написал:
где на Ваш взгляд лучше хранить пароль?
в специальной программе с шифрованием или в голове. А при первом запуске программы просто его запрашивать :) Или пусть человек на свой страх и риск записывает пароль в специально отведенную ячейку в книге и хранит там сколько посчитает нужным. При необходимости просто удалит и все.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
OlegO,  Дмитрий Щербаков описал идеальное решение, и если хранить, то уж действительно на листе, скрытом или очень скрытом, уровень защиты от его угона не лучше и не хуже.
Если это сервисная отправка, то уж лучше обозначить доверенный хост и не требовать SMTP авторизацию, позволив с него отправлять анонимно, чем хранить пароль. Конечно это доступно только для собственного SMTP сервиса и требует настроек на нем силами админов.
По вопросам из тем форума, личку не читаю.
 
OlegO, тема о чем?
Цитата
Программное изменение кода UserForm

Пароль записать на лист, лист суперскрыть, на книгу поставить пароль, хранящийся в другой книге. Две книги поместить в один архив, запаролить его. Пароль от архива в текстовом файле, но зашифрован в прямоугольнике Вижинера. Текстовый файл и архив перенести на флешку. После этого форматнуть диск, дабы уничтожить следы. Флешку запаковать в Киндер-сюрприз, который запрятать в рождественской утке. Утку  - в морозильник, морозильник - на Северный полюс под лед.
 
vikttur,  Бризом безопасности навеяло? :-)
По вопросам из тем форума, личку не читаю.
 
А потом придет Михаил и откроет файл в Либре :):):)
 
Цитата
vikttur написал: запаролить его. Пароль от архива в текстовом файле, но зашифрован в прямоугольнике...
откроет файл в Либре
:D
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
Пароль записать на лист, лист суперскрыть, на книгу поставить пароль, хранящийся в другой книге. Две книги поместить в один архив, запаролить его. Пароль от архива в текстовом файле, но зашифрован в прямоугольнике Вижинера. Текстовый файл и архив перенести на флешку. После этого форматнуть диск, дабы уничтожить следы. Флешку запаковать в Киндер-сюрприз, который запрятать в рождественской утке. Утку  - в морозильник, морозильник - на Северный полюс под лед.
если что-то одно в этой цепочне рухнет - забудьте о былых данных. начните их собирать с начала
да кстати, а это реально - программно изменить код UserForm? или этот вопрос так и остался покрыт обильным мраком сообщений
Изменено: Ігор Гончаренко - 05.06.2018 21:54:31
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
это реально - программно изменить код UserForm?
а почему нет? Все реально, но надо ли?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
допустим.
а почему в теме 16 сообщений и НИ ОДНОГО с примером программого изменения кода UserForm. закрадываются сомнения...
если на "планете" не смогли может это не возможно вообще?
всего в теме сообщений 17, по теме 0. отличный КПД = 0/17 даже сразу и не посчитаешь сколько это.
давайте для точного результата вычекнем оба мои сообщения, включая текущее, получаем КПД = 0/15 - что не на много больше, чем предыдущий результат
Изменено: Ігор Гончаренко - 05.06.2018 23:52:47
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко,  Игорь, да еще в  #3. Остальные попытка отговорить от использования :-)
Изменено: БМВ - 05.06.2018 23:51:56
По вопросам из тем форума, личку не читаю.
 
Цитата
Ігор Гончаренко написал:
а это реально - программно изменить код UserForm?
Может быть я неудачно сформулировал название темы, но я имел ввиду именно то в чем мне помогли: ведь после выполнения кода изменится одна из строк кода UserForm (да и другие строки по такому же принципу наверное можно изменить?)
 
Цитата
Ігор Гончаренко написал:
НИ ОДНОГО с примером программого изменения кода UserForm
в общем-то, пример оного есть прямо в первом же сообщении от автора:
Код
If MsgBox("Вы подтверждаете смену пароля на Вашем почтовом аккаунте?", vbCritical + vbYesNo, "Внимание! Подумайте перед ответом") = vbYes Then ThisWorkbook.VBProject.VBComponents.Item("Mail").CodeModule.ReplaceLine 9, "sPass = new_пароль"
единственное, там бы кавычек добавить и переменную правильно воткнуть и все будет работать:
Код
If MsgBox("Вы подтверждаете смену пароля на Вашем почтовом аккаунте?", vbCritical + vbYesNo, "Внимание! Подумайте перед ответом") = vbYes Then _
ThisWorkbook.VBProject.VBComponents.Item("Mail").CodeModule.ReplaceLine 9, "sPass = """ & new_пароль & """"

да в общем-то там и далее есть несколько сообщений, которые нацелены именно на допиливание строки по программному изменению кода. Единственное, не нашел где там UserForm, но может это как раз "Mail".
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
OFF:
Цитата
vikttur написал:
Пароль записать на лист … морозильник - на Северный полюс под лед. А потом придет Михаил и откроет файл в Либре
это было мощно  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Дмитрий Щербаков написал:
где там UserForm, но может это как раз "Mail"
Именно так!
Страницы: 1
Наверх