Forum

Forum (https://www.ms-office.gr/forum/)
-   Visual Basic for Applications (VBA) (https://www.ms-office.gr/forum/visual-basic-applications-vba/)
-   -   [Excel - VBA] Εύρεση δεδομένων σε UserForm (https://www.ms-office.gr/forum/visual-basic-applications-vba/5964-eiresi-dedomenon-se-userform.html)

Γιώργος Κοντούλης 20-09-21 14:30

Εύρεση δεδομένων σε UserForm
 
Αγαπημένοι και χρήσιμοι φίλοι μου,

Έχω φτιάξει μία φόρμα στην οποία καταχωρώ τα δεδομένα των μελών ενός συλλόγου (Επίθετο, όνομα κ.λ.π., κ.λ.π.) και η οποία με τη σειρά της (πατώντας ένα commandbutton “Αποθήκευση”) μεταφέρει τα δεδομένα σε ένα φύλλο excel (“Αρχείο Μελών”).
Παράλληλα, ήθελα να έχω τη δυνατότητα αναζήτησης των στοιχείων ενός μέλους, όχι στο φύλλο excel, αλλά στην ίδια τη φόρμα. Έχοντας λοιπόν κενά όλα τα πεδία της φόρμας, ήθελα να μπορώ πληκτρολογώντας το επίθετο στο textbox “txtSurename” και πατώντας στο πλήκτρο “cmndSearch” να συμπληρώνεται αυτόματα το Όνομα στο txtbox “Name” καθώς και τα διάφορα άλλα πεδία της φόρμας (με λίγα λόγια θέλω να κάνω κάτι σαν αυτό που κάνει το "Φιλτράρισμα με βάση τη φόρμα της Access).
Επειδή όμως υπάρχει η περίπτωση δύο (ή περισσοτέρων) μελών με το ίδιο επίθετο, έπρεπε να έχω τη δυνατότητα μιας διαδικασίας «Find Next».
Το μόνο που μου επέτρεπαν οι φτωχές μου γνώσεις στο αντικείμενο της vba, ήταν να googl-άρω και να βρω το εξής:

Private Sub cmndSearch_Click()

Dim FindValue As String
FindValue = txtSurename.Text

Dim Rng As Range
Set Rng = Range("A2:A200")

Dim FindRng As Range
Set FindRng = Rng.Find(FindValue)

Dim FirstCell As String

txtName.Text = Sheets("Αρχείο Μελών").Cells(FindRng.Row, 2).Value
.
.
.
(Ομοίως για τα υπόλοιπα πεδία της φόρμας (ημερ. Γέννησης, διεύθυνση κ.λ.π.).

Do
MsgBox FindRng.Address
Set FindRng = Rng.FindNext(FindRng)
FirstCell = FindRng.Address
txtName.Text = Sheets("Αρχείο Μελών").Cells(FindRng.Row, 2).Value
Loop While FirstCell <> FindRng.Address
MsgBox "Search is over"

End Sub

Έτσι, κάθε φορά που πατάω το πλήκτρο “OK” του MsgBox, εφόσον η διαδικασία εντοπίζει μέλη με το ίδιο επίθετο, προβάλει με τη σειρά τα στοιχεία τους στα πεδία της φόρμας.
Το πρόβλημά μου (ανάμεσα στα άλλα που δεν είναι της παρούσης), είναι ότι δεν θέλω να εμφανίζεται το MsgBox, αλλά να κάνω εύρεση της επόμενης εγγραφής με το πλήκτρο cmndSearch (ή με κάποιο άλλο πλήκτρο cmndNext) και μόνον εφόσον δεν υπάρχουν άλλες εγγραφές να παίρνω το μήνυμα “Search is over”.

Προσπάθησα σκληρά, αλλά ... τζίφος!!!
Πάσα βοήθεια δεκτή...

Υπάρχει τρόπος να γίνει εύρεση με χρήση πολλαπλών κριτηρίων (π.χ. txtSurename & txtName & txtDateOfBirth κλπ); Αν ναι, ξεφεύγει κατά πολύ από τα όρια της παραπάνω περίπτωσης;

Ευχαριστώ προκαταβολικά για τη βοήθεια…

Γιώργος Κοντούλης 20-09-21 22:55

Το πρόβλημα λύθηκε.
Δεν γνωρίζω αν μπορώ να διαγράψω το θέμα.
Αν θέλει κάποιος διαχειριστής ας το κάνει.
Ευχαριστώ


Η ώρα είναι 04:55.

Ms-Office.gr - ©2000 - 2024, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2