JWalk wrote about a Keyless Entry Hack. “That shouldn’t be too hard to duplicate”, I thought. I get 3,133, but I have four duplicate numbers. Here’s part of my immediate window.
How do I get rid of those duplicates?
Sub MakeKeyCombo()
Dim i As Long, j As Long, k As Long, l As Long, m As Long, n As Long
Dim sResult As String, sFinal As String
Dim sCurrent As String
For i = 9 To 1 Step -2
For j = 9 To 1 Step -2
For k = 9 To 1 Step -2
For l = 9 To 1 Step -2
For m = 9 To 1 Step -2
sCurrent = i & j & k & l & m
If InStr(1, sResult, sCurrent) = 0 Then
For n = 4 To 0 Step -1
If Right$(sResult, n) = Left$(sCurrent, n) Then
sResult = sResult & Right$(sCurrent, 5 – n)
Exit For
End If
Next n
End If
Next m
Next l
Next k
Next j
Next i
Debug.Print sResult
Debug.Print Len(sResult)
TestResult sResult
End Sub
Sub TestResult(sResult As String)
Dim i As Long, j As Long, k As Long, l As Long, m As Long
Dim sCurr As String
For i = 1 To 9 Step 2
For j = 1 To 9 Step 2
For k = 1 To 9 Step 2
For l = 1 To 9 Step 2
For m = 1 To 9 Step 2
sCurr = i & j & k & l & m
If InStr(1, sResult, sCurr) = 0 Then
Debug.Print sCurr & ” : Missing”
ElseIf Len(sResult) – Len(Replace(sResult, sCurr, “”)) > 5 Then
Debug.Print sCurr & ” : Duplicate”
End If
Next m
Next l
Next k
Next j
Next i
End Sub
Dim i As Long, j As Long, k As Long, l As Long, m As Long, n As Long
Dim sResult As String, sFinal As String
Dim sCurrent As String
For i = 9 To 1 Step -2
For j = 9 To 1 Step -2
For k = 9 To 1 Step -2
For l = 9 To 1 Step -2
For m = 9 To 1 Step -2
sCurrent = i & j & k & l & m
If InStr(1, sResult, sCurrent) = 0 Then
For n = 4 To 0 Step -1
If Right$(sResult, n) = Left$(sCurrent, n) Then
sResult = sResult & Right$(sCurrent, 5 – n)
Exit For
End If
Next n
End If
Next m
Next l
Next k
Next j
Next i
Debug.Print sResult
Debug.Print Len(sResult)
TestResult sResult
End Sub
Sub TestResult(sResult As String)
Dim i As Long, j As Long, k As Long, l As Long, m As Long
Dim sCurr As String
For i = 1 To 9 Step 2
For j = 1 To 9 Step 2
For k = 1 To 9 Step 2
For l = 1 To 9 Step 2
For m = 1 To 9 Step 2
sCurr = i & j & k & l & m
If InStr(1, sResult, sCurr) = 0 Then
Debug.Print sCurr & ” : Missing”
ElseIf Len(sResult) – Len(Replace(sResult, sCurr, “”)) > 5 Then
Debug.Print sCurr & ” : Duplicate”
End If
Next m
Next l
Next k
Next j
Next i
End Sub
Replace this statement:
sResult = sResult & Right$(sCurrent, 5 – n)
With these two statements:
Cells(r + 1, 1) = Right$(sCurrent, 5 – n)
r = r + 1
That puts the results in the worksheet. You get 3,125, with no duplicates.
Why does the immediate window still produce a long list of “missing” which are not missing?
Thanks very much,
Brett
Brett: I don’t get any missing when I run it.
Oh. I ran the test result after the MakeKeyCombo, but maybe the line -TestResult sResult calls the sub TestResult and passes the sResult string to it. I thought you had to use a Call statement; not true?
Thanks,
Brett
Brett: No, you don’t. Call is still available for backward compatability, though. Some people still use it for clarity, but not me. Appropriately named subs should make it obvious that another sub is being called.
Mr. K:
Sorry to ask a newbie question, but I need your advice on a reinstallation issue.
I have lost the install code from my backup CD copy of Excel (the original was lost long ago), and I need to reinstall it. Is there a way to get the code out of the 20 digit Product ID?
Any thoughts for a humble newbie?
Thanks
DB