Another array question

I have an array of 32 textboxes,

txtOrder(0)
txtOrder(1)
txtOrder(2).....txtOrder(31)

Users can put a value in these textboxes ranging from 1-32.  However, no two textbox may have the same value once saved.  When a user clicks Save, if there are duplicate values I would like a msgbox stating which values are duplicated.  

If this question should have a higher point value, let me know and I will increase it to 200.

thanks much

ptran2000Asked:
Who is Participating?
 
Erick37Connect With a Mentor Commented:
New and improved:

Private Sub Command1_Click()
    Dim i As Long, j As Long
    For i = 0 To txtOrder.UBound - 1
        For j = i + 1 To txtOrder.UBound
            Debug.Print i; j
            If (Val(txtOrder(i).Text) = Val(txtOrder(j).Text)) Then
                MsgBox "Duplicate entries: " & CStr(i) & " & " & CStr(j) & ", Value: " & txtOrder(i).Text
                Exit Sub
            End If
        Next
    Next
End Sub
0
 
Erick37Commented:
Try this:


Private Sub Command1_Click()
    Dim i As Long, j As Long
    For i = 0 To txtOrder.UBound
        For j = i To txtOrder.UBound
            If i <> j Then
                If (Val(txtOrder(i).Text) = Val(txtOrder(j).Text)) Then
                    MsgBox "Duplicate entries: " & CStr(i) & " " & CStr(j)
                    Exit Sub
                End If
            End If
        Next
    Next
End Sub
0
 
Erick37Commented:
Forgot this:
>>I would like a msgbox stating which values are duplicated.

MsgBox "Duplicate entries: " & CStr(i) & " " & CStr(j) & ", Value: " & txtOrder(i).Text
0
Cloud Class® Course: CompTIA Healthcare IT Tech

This course will help prep you to earn the CompTIA Healthcare IT Technician certification showing that you have the knowledge and skills needed to succeed in installing, managing, and troubleshooting IT systems in medical and clinical settings.

 
AzraSoundCommented:
Wont that pop up a message box for every occurrence of a duplicate?
0
 
Erick37Commented:
Note
Exit Sub
exits on first occurance of duplicate.
0
 
nico5038Commented:
Bit late this check afterwards. Why no check on the lostfocus or afterupdate event per text box.

1) You don't need a double loop.
2) You don't have to check on more then one duplicate entry
3) the user can react instantly and the cursor can be located on the erroneous field. (perhaps even with highlighting the duplicate!)
0
 
wsh2Commented:
ptran2000 writes: "Users can put a value in these textboxes ranging from 1-32'"

As the user is entering the data, you can test for duplicates as they out in.. Catch it at the source. No need to go through the table multi times!!

In the code below.. when a duplicate occurs.. it issues a message, returns focus to the textbox and selects the offending text.

<----- Code Begin ----->

Private Sub Text1_LostFocus(Index As Integer)
   
If Val(Text1(Index).Text) < 1 _
Or Val(Text1(Index).Text) > 32 _
Then
  Text1(Index).SelLength = Len(Text1(Index).Text)
  Text1(Index).SelStart = 0
  Text1(Index).SetFocus
  MsgBox "Values must be between 1 - 32"
  Exit Sub
End If

Dim lngIndex As Long
For lngIndex = 0 To Text1.Count - 1
  If lngIndex <> Index _
  Then
    If Text1(lngIndex).Text = Text1(Index).Text _
    Then
      Text1(Index).SelLength = Len(Text1(Index).Text)
      Text1(Index).SelStart = 0
      Text1(Index).SetFocus
      MsgBox "The Data You Just Entered Is A Duplicate, Please Re-Enter"
      Exit Sub
    End If
  End If
Next lngIndex

End Sub

<----- Code End ----->

A comment to the above solutions:
If the Text1 array is not yet full, then all initialized only (0) fields are gonna match out.. you have to test for this.
0
 
ptran2000Author Commented:
I am testing out these answers to see who gets the points
0
 
ptran2000Author Commented:
Thanks Erick37,

!This site has been most helpful!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.