Solved

Another array question

Posted on 2000-03-23
9
154 Views
Last Modified: 2010-05-18
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

0
Comment
Question by:ptran2000
9 Comments
 
LVL 32

Expert Comment

by:Erick37
ID: 2650731
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
 
LVL 32

Expert Comment

by:Erick37
ID: 2650739
Forgot this:
>>I would like a msgbox stating which values are duplicated.

MsgBox "Duplicate entries: " & CStr(i) & " " & CStr(j) & ", Value: " & txtOrder(i).Text
0
 
LVL 28

Expert Comment

by:AzraSound
ID: 2650793
Wont that pop up a message box for every occurrence of a duplicate?
0
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 32

Expert Comment

by:Erick37
ID: 2650804
Note
Exit Sub
exits on first occurance of duplicate.
0
 
LVL 32

Accepted Solution

by:
Erick37 earned 100 total points
ID: 2650840
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
 
LVL 54

Expert Comment

by:nico5038
ID: 2651096
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
 
LVL 14

Expert Comment

by:wsh2
ID: 2651136
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
 

Author Comment

by:ptran2000
ID: 2651264
I am testing out these answers to see who gets the points
0
 

Author Comment

by:ptran2000
ID: 2651333
Thanks Erick37,

!This site has been most helpful!
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

There are many ways to remove duplicate entries in an SQL or Access database. Most make you temporarily insert an ID field, make a temp table and copy data back and forth, and/or are slow. Here is an easy way in VB6 using ADO to remove duplicate row…
Introduction In a recent article (http://www.experts-exchange.com/A_7811-A-Better-Concatenate-Function.html) for the Excel community, I showed an improved version of the Excel Concatenate() function.  While writing that article I realized that no o…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

821 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question