2013-06-07 2 views
0

Второе сообщение здесь. Все, что я хочу сделать, это изменить пароль для защиты и снятия защиты с моей книги, как это определено в моем коде здесь ...Изменение переменной в одном макросе с другим макросом в vba

Dim myPassword As String 
myPassword = "yogurt"      'defines the password 

For Each sh In ActiveWorkbook.Worksheets 'unprotects the sheet for editing 
    sh.Unprotect Password:=myPassword 
Next sh 

... используя другой макрос под названием что-то вроде «Изменить пароль», в котором пользователь будет введите текущий пароль и затем введите новый пароль.

Я хочу, чтобы макрос «сменить пароль» работал, если пользователь дважды вводит новый пароль для обеспечения точности.

любые быстрые предложения?

Большое спасибо.

Sub change_password() 
Dim OldPassword, MyPassword, NewPassword As String 
Dim pass1, pass2 
MyPassword = monkey 
OldPassword = InputBox("Please enter the old password.") 
    If OldPassword = MyPassword Then 
     pass1 = InputBox("Enter the new password.") 
     pass2 = InputBox("Enter the new password again to ensure accuracy.") 
    If pass1 = pass2 Then 
     MyPassword = pass1 
    Else 
     MsgBox "The new password you entered was not entered correctly both times." 
    End If 
End If 
MsgBox ("Your new password is" & MyPassword) 
End Sub 
+1

0 Не думаю, что тогда я был ясен в своем вопросе. Я хотел бы, чтобы пароль был изменен в первом суб, введя в поле ввода. Здесь я напишу немного кода, который поможет уточнить. – FinanceMajor

+0

Sub change_password() Dim OldPassword, MyPassword, NewPassword As String Dim pass1, pass2 MyPassword = обезьяна OldPassword = InputBox ("Пожалуйста, введите старый пароль.") If OldPassword = MyPassword Тогда pass1 = InputBox ("Введите новый пароль.") pass2 = InputBox ("Введите новый пароль еще раз для обеспечения точности.") Если pass1 = pass2 Тогда MyPassword = pass1 Else MsgBox «Введенный вами новый пароль не был введен правильно оба раза». End If End If MsgBox ("Ваш новый пароль" и MyPassword) End Sub – FinanceMajor

+2

Редактировать ваш вопрос - код в комментариях трудно следовать. –

ответ

1

Когда его пароль должен быть где-то сохранен. Я использовал в нижнем коде диапазон и назвал его пароль Range("password").

Dim OldPassword As String 
Dim NewPassword As String 

Sub change_password(ByRef blnIsChanged) 

    Dim pass1 As String, pass2 As String, myPassword As String 

    myPassword = Range("password") 
    OldPassword = InputBox("Please enter the old password.") 

    If OldPassword = myPassword Then 
     pass1 = InputBox("Enter the new password.") 
    Else 
     MsgBox "Old password not matching", vbInformation 
     Exit Sub 
    End If 

    pass2 = InputBox("Enter the new password again to ensure accuracy.") 
    If pass1 = pass2 Then 
     Range("password") = pass1 
     NewPassword = pass1 
     blnIsChanged = True 
     MsgBox ("Your new password is " & myPassword) 
    Else 
     MsgBox "The new password you entered was not entered correctly both times." 
    End If 


End Sub 


Sub btnGO() 

    Dim blnPassword As Boolean 
    change_password blnPassword 

    If blnPassword Then 
     For Each sh In ActiveWorkbook.Worksheets 
      sh.Unprotect Password:=OldPassword ' Unprotect with old password 
      'your cod here 
      sh.Protect Password:=NewPassword 
     Next sh 
    End If 
End Sub 
+0

Это выглядит великолепно! Я думаю, что смогу это сделать. Я попытаюсь все это поработать в моей книге в эти выходные! Пока я назову его. – FinanceMajor

+0

Если вы храните пароль в Именованном диапазоне, он потенциально может быть видимым для любого, какой тип поражения защищает листы. Или я чего-то не хватает? –

+0

Им нужно только защитить от непреднамеренных изменений, которые могут повредить лист. Я программирую это для цепочки менеджеров магазинов мороженого. В любом случае у них есть пароли. – FinanceMajor

0

Хотя это, вероятно, проще просто вызвать диалоговое окно для установки защиты рабочей книги (то есть, этот метод будет иметь ошибки, если разные листы требуют разных паролей, я попытался поймать такого рода ошибок) и использование встроенные диалоги, это будет делать в значительной степени то, о чем вы просите.

Как всегда, помните свои пароли. Я не предоставляю никаких средств для получения потерянного пароля.

Option Explicit 
Public badpassword As Boolean 

Sub changepassword() 
    Dim sh As Worksheet 
    Dim pw1 As String 

    Dim newpw As String 
    Dim newpw2 As String 
    badpassword = True 
    'enter the current password, twice 
    pw1 = enterpassword("Please enter the password to UNPROTECT the sheets") 

    'prompt for a new password 
    newpw = enterpassword("Please enter the new password") 
    newpw2 = enterpassword("Please re-enter the new password") 
    If newpw <> newpw2 Then 
     '## inform the user that the passwords don't match 
     MsgBox "The passwords are not the same", vbCritical 
    Else: 
     '## Attempt to change the password on each sheet 
     For Each sh In ActiveWorkbook.Worksheets 
      On Error GoTo badpassword '## provide a means of escaping error if password is incorrect 
      protectsheet sh, pw1, newpw 
      On Error GoTo 0 
      If badpassword Then 
       MsgBox "The password you entered is incorrect for sheet:" & sh.Name _ 
        , vbCritical 
       '## allow the macro to continue on other worksheets: 
       badpassword = False 
      End If 
     Next 
    End If 

    Exit Sub 
badpassword: 
    '## Trap errors if the supplied password is invalid 
    badpassword = True 
    Resume Next 
End Sub 

Function enterpassword(Optional msg As String = "Please enter the password") 
    Dim pw$ 
    pw = InputBox(msg, "Password?") 
    enterpassword = pw 
End Function 

Sub protectsheet(sh As Worksheet, pw As String, newpw As String) 
    sh.Unprotect pw 
    sh.protect newpw 
    badpassword = False 'indicates a success 
End Sub 
+0

спасибо! Я новичок, поэтому код не имеет для меня никакого смысла.Я не сомневаюсь, что это работает, но мне будет легче работать с кодом, который предоставил Сантош. Я бы проголосовал, но у меня недостаточно репутации ... – FinanceMajor

+0

Это не имеет смысла для вас, это просто должно работать :) Я считаю, что проблема безопасности с подхода Сантоша заключается в том, что пароль будет потенциально быть видимым для всех. –

+1

@DavidZemens Ofcousrse есть способы скрыть ячейку с паролем, и вам лучше знать об этом. – Santosh

Смежные вопросы