[color=darkblue]Dim[/color] count [color=darkblue]As[/color] [color=darkblue]Integer[/color] [color=green]'Incrementing row # for displaying generated passwords[/color]
[color=darkblue]Dim[/color] prevArr(14) [color=darkblue]As[/color] [color=darkblue]String[/color]
[color=darkblue]Dim[/color] lppwd [color=darkblue]As[/color] [color=darkblue]Integer[/color] [color=green]'Length of previous pwd[/color]
[color=darkblue]Private[/color] [color=darkblue]Sub[/color] GeneratePwd_Click()
[color=darkblue]Dim[/color] lpwd [color=darkblue]As[/color] [color=darkblue]Integer[/color] [color=green]'Pre-established[/color]
[color=darkblue]Dim[/color] arr(14) [color=darkblue]As[/color] [color=darkblue]String[/color]
[color=darkblue]Dim[/color] randomChar [color=darkblue]As[/color] [color=darkblue]String[/color]
[color=darkblue]Dim[/color] alphaCounter, notAlphaCounter, randomNum [color=darkblue]As[/color] [color=darkblue]Integer[/color]
[color=green]'When A1 Cell is empty, delete entire column and set count as 1[/color]
[color=darkblue]If[/color] Range("A1").Value = "" [color=darkblue]Then[/color]
Application.ScreenUpdating = [color=darkblue]False[/color]
Columns(1).EntireColumn.Clear
count = 1
Application.ScreenUpdating = [color=darkblue]True[/color]
[color=darkblue]End[/color] [color=darkblue]If[/color]
[color=green]'When the program is initialized[/color]
[color=darkblue]If[/color] count = 0 [color=darkblue]Then[/color]
count = 1
[color=darkblue]End[/color] [color=darkblue]If[/color]
[color=green]'Minimum of 8 characters in length, Maximum of 14 characters in length[/color]
lpwd = Int((14 - 8 + 1) * Rnd + 8)
CheckBlank:
[color=darkblue]If[/color] Range("A" & count) <> "" [color=darkblue]Then[/color]
count = count + 1
[color=darkblue]GoTo[/color] CheckBlank
[color=darkblue]End[/color] [color=darkblue]If[/color]
GeneratePassword:
alphaCounter = 0
notAlphaCounter = 0
[color=green]'Generate Password[/color]
[color=darkblue]For[/color] c = 1 [color=darkblue]To[/color] lpwd
[color=green]'Generate random characters[/color]
randomNum = Int((126 - 33 + 1) * Rnd + 33)
randomChar = Chr(randomNum)
[color=green]'Counting alphabets and non-alphabets[/color]
[color=darkblue]If[/color] randomNum >= 65 And randomNum <= 90 [color=darkblue]Then[/color]
alphaCounter = alphaCounter + 1
[color=darkblue]ElseIf[/color] randomNum >= 97 And randomNum <= 122 [color=darkblue]Then[/color]
alphaCounter = alphaCounter + 1
[color=darkblue]Else[/color]
notAlphaCounter = notAlphaCounter + 1
[color=darkblue]End[/color] [color=darkblue]If[/color]
Range("A" & count) = Range("A" & count) & randomChar
arr(c) = randomChar
[color=darkblue]Next[/color] c
[color=green]'Minimum of 3 alphabets[/color]
[color=darkblue]If[/color] alphaCounter < 3 [color=darkblue]Then[/color]
[color=darkblue]GoTo[/color] GeneratePassword
[color=darkblue]End[/color] [color=darkblue]If[/color]
[color=green]'Minimum of 2 non-alphabets[/color]
[color=darkblue]If[/color] notAlphaCounter < 2 [color=darkblue]Then[/color]
[color=darkblue]GoTo[/color] GeneratePassword
[color=darkblue]End[/color] [color=darkblue]If[/color]
[color=green]'Maximum of 2 repeated characters[/color]
[color=darkblue]Dim[/color] Repeat_Switch [color=darkblue]As[/color] [color=darkblue]Integer[/color]
[color=darkblue]For[/color] i = 1 [color=darkblue]To[/color] lpwd - 1
Repeat_Switch = 0
[color=darkblue]For[/color] j = i + 1 [color=darkblue]To[/color] lpwd
[color=darkblue]If[/color] Repeat_Switch = 2 [color=darkblue]Then[/color]
[color=darkblue]GoTo[/color] GeneratePassword
[color=darkblue]End[/color] [color=darkblue]If[/color]
[color=darkblue]If[/color] arr(i) = arr(j) [color=darkblue]Then[/color]
Repeat_Switch = Repeat_Switch + 1
[color=darkblue]End[/color] [color=darkblue]If[/color]
[color=darkblue]Next[/color] j
[color=darkblue]Next[/color] i
[color=green]'Minimum of 3 characters not found in previous password[/color]
[color=darkblue]If[/color] count > 1 [color=darkblue]Then[/color]
[color=darkblue]Dim[/color] Prev_Switch [color=darkblue]As[/color] [color=darkblue]Integer[/color]
[color=darkblue]Dim[/color] Equal_Switch [color=darkblue]As[/color] [color=darkblue]Boolean[/color]
Prev_Switch = 0
[color=darkblue]For[/color] i = 1 [color=darkblue]To[/color] lpwd
Equal_Switch = [color=darkblue]False[/color]
[color=darkblue]For[/color] j = 1 [color=darkblue]To[/color] lppwd
[color=darkblue]If[/color] arr(i) = prevArr(j) [color=darkblue]Then[/color]
Equal_Switch = [color=darkblue]True[/color]
[color=darkblue]End[/color] [color=darkblue]If[/color]
[color=darkblue]Next[/color] j
[color=darkblue]If[/color] Equal_Switch = [color=darkblue]False[/color] [color=darkblue]Then[/color]
Prev_Switch = Prev_Switch + 1
[color=darkblue]End[/color] [color=darkblue]If[/color]
[color=darkblue]Next[/color] i
[color=darkblue]If[/color] Prev_Switch < 3 [color=darkblue]Then[/color]
[color=darkblue]GoTo[/color] GeneratePassword
[color=darkblue]End[/color] [color=darkblue]If[/color]
[color=darkblue]End[/color] [color=darkblue]If[/color]
[color=green]'Cannot be same as previous 20 pwds[/color]
[color=darkblue]For[/color] c = count - 1 [color=darkblue]To[/color] count - 20 [color=darkblue]Step[/color] -1
[color=darkblue]If[/color] Range("A" & count) = Range("A" & c) [color=darkblue]Then[/color]
[color=darkblue]GoTo[/color] GeneratePassword
[color=darkblue]End[/color] [color=darkblue]If[/color]
[color=darkblue]Next[/color] c
count = count + 1
[color=green]'Copying Arr to prevArr[/color]
[color=darkblue]For[/color] i = 1 [color=darkblue]To[/color] lpwd
prevArr(i) = arr(i)
lppwd = lpwd
[color=darkblue]Next[/color] i
[color=darkblue]End[/color] [color=darkblue]Sub[/color]