Εμφάνιση ενός μόνο μηνύματος
  #2  
Παλιά 07-02-13, 00:03
Το avatar του χρήστη Tasos
Tasos Ο χρήστης Tasos δεν είναι συνδεδεμένος
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή

Πέρασε τον παρακάτω κώδικα σε μια φόρμα με ένα σύνθετο πλαίσιο με το όνομα "Combobox1" και δοκίμασε.

Ο κώδικας αυτός:
  • Γεμίζει και ταξινομεί τα στοιχεία του "Combobox1" με δεδομένα από τη στήλη C του φύλλου με το
    κωδικό όνομα Sheet1 αγνοώντας τυχόν κενά κελιά.
  • Αν πληκτρολογηθεί τιμή που δεν υπάρχει στη λίστα, μετά από πάτημα του Enter θα ερωτηθεί ο
    χρήστης αν θέλει να καταχωρηθεί νέα εγγραφή στο φύλλο.
  • Μετά από την καταχώρηση το σύνθετο πλαίσιο ενημερώνεται, ταξινομείται εκ νέου και η νέα εγγραφή θα επιλεγεί.

Option Explicit
Private rng As Range, c As Range

Private Sub UserForm_Initialize()
With Sheet1
If Application.CountA(Range(.Cells(2, 3), .Cells(2, 3).End(xlDown))) Then
Set rng = Range(.Cells(2, 3), .Cells(Rows.Count, 3).End(xlUp))
FillCombo ComboBox1, rng
Else
Set rng = .Cells(1, 3)
End If
End With
End Sub

Private Sub ComboBox1_KeyUp( _
ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)

If Trim(ComboBox1.Text) = "" Then Exit Sub
ComboBox1.Text = Trim(ComboBox1.Text)
If KeyCode = vbKeyReturn Then
Set c = rng.Find(ComboBox1.Text, LookIn:=xlValues)
If c Is Nothing Then
If MsgBox("Η εγγραφή αυτή δεν υπάρχει στη λίστα." & _
" Να την καταχωρήσω;", vbQuestion + vbYesNo) = vbYes Then
Set rng = rng.Resize(rng.Rows.Count + 1, 1)
If rng.Row = 1 Then
Set rng = rng.Offset(1).Resize(1, 1)
rng.Value = ComboBox1.Text
'rng.Value = Application.Proper(ComboBox1.Text) 'το πρώτο γράμμα της λέξης κεφαλαίο
ComboBox1.AddItem rng.Text
Else
rng(rng.Rows.Count).Value = ComboBox1.Text
'rng(rng.Rows.Count).Value = Application.Proper(ComboBox1.Text) 'το πρώτο γράμμα της λέξης κεφαλαίο
FillCombo ComboBox1, rng
End If
ComboBox1.Value = rng(rng.Rows.Count).Text
End If
End If
End If
End Sub

Private Sub FillCombo( _
ByVal cbo As MSForms.ComboBox, _
ByVal rng As Range)
Dim c As Range, i As Long, x As Long, sw1, sw2, Itm
Dim Coll As New Collection
On Error Resume Next
For Each c In rng
Coll.Add c.Value, c.Text
Next
On Error GoTo 0
For i = 1 To Coll.Count - 1
For x = i + 1 To Coll.Count
If UCase(Coll(i)) > UCase(Coll(x)) Then
sw1 = Coll(i)
sw2 = Coll(x)
Coll.Add sw1, before:=x
Coll.Add sw2, before:=i
Coll.Remove i + 1
Coll.Remove x + 1
End If
Next x
Next i
cbo.Clear
For Each Itm In Coll
cbo.AddItem Itm
Next Itm
End Sub
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 07-02-13 στις 09:29.
Απάντηση με παράθεση