Εμφάνιση ενός μόνο μηνύματος
  #2  
Παλιά 12-09-16, 16:32
Το avatar του χρήστη Spirosgr
Spirosgr Ο χρήστης Spirosgr δεν είναι συνδεδεμένος
Συντονιστής
Όνομα: Σπύρος Τσιλιγιάννης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010, Ms-Office 2013, Ms-Office 2016, Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 22-11-2011
Περιοχή: Αθήνα
Μηνύματα: 2.321
Προεπιλογή

Ο κώδικας «διορθωμένος»

Κώδικας:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim _
            rng As Range, _
              c As Range, _
                WFcnt As Integer

    Set rng = Range("B2:G12")

    If Not Intersect(Target, rng) Is Nothing Then
        For Each c In rng
            If Not IsNumeric(c) Then

                WFcnt = WorksheetFunction.CountA(Sh1.Range("B2:G12"), c) - _
                        WorksheetFunction.Count(Sh1.Range("B2:G12"), c) - 1

                MsgBox ("Μη έγκυρη καταχώριση, δεν αντιστοιχεί σε αριθμό!" _
                      & vbLf & "Παρακαλώ πληκτρολογήστε ακέραιο ή δεκαδικό αριθμό.") _
                      & vbLf & ("") _
                      & vbLf & ("Σφάλματα: ") & WFcnt, vbExclamation, "Επικύρωση δεδομένων"
                Exit Sub

            End If
        Next c
    End If
End Sub 
Σημείωση:
Θεωρώ, ότι το σκεπτικό, είναι λάθος.
Θα έπρεπε, να απαγορεύεις την εγγραφή μη αριθμητικών τιμών και όχι να τις μετράς...

Παράδειγμα 1.
Με το σκεπτικό σου, γράφω:
4 με αφήνει
15 με αφήνει
32,5 με αφήνει
α μετράει 1 σφάλμα
5 μετράει 1 σφάλμα...κλπ

Παράδειγμα 2.
Με πιο ορθό σκεπτικό, γράφω:
4 με αφήνει
15 με αφήνει
32,5 με αφήνει
α «απαγορεύει» να συνεχίσω, αν δεν διορθώσω...
Υποδεικνύει το σφάλμα, το διαγράφει και «περιμένει» να εισάγω σωστή τιμή...
Απάντηση με παράθεση