Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ. |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
Αυτόματη συμπλήρωση κωδικών
Παρακαλώ αν κάποιος μπορεί να βοηθήσει......... Εχω ένα αρχείο με το όνομα Βιβλίo 4 ΤΕΣΤ.xlsm Εχει δύο φύλα εργασίας με ονόματα : ΚΩΔΙΚΟΣ & ΑΝΤΙΚΕΙΜΕΝΑ. Στο φύλλο ΚΩΔΙΚΟΣ υπάρχει ένας κατάλογος αντικειμένων στην στήλη C και η συντομογραφία τους στην στήλη B. Στο φύλλο ΑΝΤΙΚΕΙΜΕΝΑ στην στήλη Κ υπάρχει μια λίστα με αντικείμενα. Σκοπός είναι να μεταφέρεται στην στήλη J (μετά απο αναζήτηση στο φύλλο ΚΩΔΙΚΟΣ) αυτόματα η συντομογραφία που αντιστοιχεί στην κάθε λέξη ή φράση που μόλις έχω πληκτρολογήσει στην στήλη K. Αν δεν υπάρχει αντιστοίχιση (εκ παραλείψεως ή λάθους) μεταξύ του αντικειμένου και συντομογραφίας τότε το αντίστοιχο κελί γίνεται κόκκινο. Δημιουργήθηκε ένας κώδικας VBA με την βοήθεια της τεχνητής νοημοσύνης (δηλώνω ότι με την VBA είμαι άσχετος). Παρ όλα αυτά ο κώδικας δεν λειτουργεί. Ο κώδικας είναι ο ακόλουθος: Function RemoveMultipleSpaces(text As String) As String On Error Resume Next Do While InStr(1, text, " ") > 0 text = Replace(text, " ", " ") Loop RemoveMultipleSpaces = Trim(text) On Error GoTo 0 End Function Function RemoveZeroWidthSpaces(text As String) As String On Error Resume Next RemoveZeroWidthSpaces = Replace(text, ChrW(8203), "") On Error GoTo 0 End Function Function CleanString(text As Variant) As String On Error Resume Next If IsNull(text) Then CleanString = "" Exit Function End If If IsError(text) Then CleanString = "" Exit Function End If If IsEmpty(text) Then CleanString = "" Exit Function End If CleanString = RemoveMultipleSpaces(CStr(text)) CleanString = RemoveZeroWidthSpaces(CleanString) On Error GoTo 0 End Function Function FindCode(deviceName As String, codeSheet As Worksheet) As String On Error Resume Next Dim lastRow As Long, i As Long Dim cellValue As Variant deviceName = CleanString(deviceName) deviceName = StrConv(deviceName, vbUnicode) With codeSheet lastRow = .Cells(.Rows.Count, "C").End(xlUp).Row For i = 2 To lastRow cellValue = .Cells(i, "C").Value If Not IsError(cellValue) Then If Not IsEmpty(cellValue) Then cellValue = StrConv(CleanString(CStr(cellValue)), vbUnicode) If StrComp(deviceName, cellValue, vbBinaryCompare) = 0 Then FindCode = StrConv(CStr(.Cells(i, "B").Value), vbUnicode) Exit Function End If End If End If Next i End With FindCode = "" On Error GoTo 0 End Function Sub ApplyFindCode() Dim wsObjects As Worksheet, wsCodes As Worksheet Dim lastRow As Long, i As Long Dim abbreviation As String Dim cellValueK As Variant On Error GoTo 0 'Καθαρισμός τυχόν προηγούμενων σφαλμάτων 'Έλεγχος ύπαρξης φύλλων If Not SheetExists("ΚΩΔΙΚΟΣ") Then MsgBox "Δεν βρέθηκε το φύλλο 'ΚΩΔΙΚΟΣ'.", vbCritical Exit Sub End If If Not SheetExists("ΑΝΤΙΚΕΙΜΕΝΑ") Then MsgBox "Δεν βρέθηκε το φύλλο 'ΑΝΤΙΚΕΙΜΕΝΑ'.", vbCritical Exit Sub End If Set wsCodes = ThisWorkbook.Worksheets("ΚΩΔΙΚΟΣ") Set wsObjects = ThisWorkbook.Worksheets("ΑΝΤΙΚΕΙΜΕΝΑ") With wsObjects lastRow = .Cells(.Rows.Count, "K").End(xlUp).Row For i = 2 To lastRow abbreviation = "" ' ***ΑΠΟΛΥΤΟΣ ΧΕΙΡΙΣΜΟΣ ΣΦΑΛΜΑΤΩΝ: ΑΚΡΙΒΩΣ ΠΡΙΝ ΤΗΝ ΑΝΑΓΝΩΣΗ ΤΗΣ ΤΙΜΗΣ*** On Error Resume Next ' ΕΝΕΡΓΟΠΟΙΗΣΗ ΧΕΙΡΙΣΜΟΥ ΣΦΑΛΜΑΤΩΝ cellValueK = .Cells(i, "K").Value ' ΠΡΟΣΠΑΘΟΥΜΕ ΝΑ ΠΑΡΟΥΜΕ ΤΗΝ ΤΙΜΗ If Err.Number <> 0 Then ' ΕΛΕΓΧΟΣ ΑΝ ΠΡΟΕΚΥΨΕ ΣΦΑΛΜΑ Debug.Print "ApplyFindCode: Σφάλμα στο κελί K" & i & ": " & Err.Description & " - Τύπος: " & TypeName(.Cells(i, "K")) Err.Clear ' ΚΑΘΑΡΙΣΜΟΣ ΤΟΥ ΣΦΑΛΜΑΤΟΣ On Error GoTo 0 'Απενεργοποίηση χειρισμού σφαλμάτων GoTo NextIteration 'Πάμε στην επόμενη επανάληψη End If On Error GoTo 0 'Απενεργοποίηση χειρισμού σφαλμάτων 'Συνεχίζουμε μόνο αν δεν υπήρξε σφάλμα στην ανάγνωση If Not IsEmpty(cellValueK) And Not IsNull(cellValueK) Then If VarType(cellValueK) <> vbString Then On Error Resume Next cellValueK = CStr(cellValueK) If Err.Number <> 0 Then Debug.Print "ApplyFindCode: Σφάλμα CStr στο κελί K" & i & ": " & Err.Description Err.Clear ElseIf IsNull(cellValueK) Then Debug.Print "ApplyFindCode: Μετά την CStr το κελί K" & i & " είναι Null." Else cellValueK = Trim(cellValueK) cellValueK = StrConv(CleanString(cellValueK), vbUnicode) abbreviation = FindCode(cellValueK, wsCodes) If abbreviation = "" Then Debug.Print "ApplyFindCode: Δεν βρέθηκε αντιστοιχία για το κελί K" & i End If End If On Error GoTo 0 Else cellValueK = Trim(cellValueK) cellValueK = StrConv(CleanString(cellValueK), vbUnicode) abbreviation = FindCode(cellValueK, wsCodes) If abbreviation = "" Then Debug.Print "ApplyFindCode: Δεν βρέθηκε αντιστοιχία για το κελί K" & i End If End If End If NextIteration: .Cells(i, "J").Value = abbreviation If abbreviation = "" Then .Cells(i, "J").Interior.Color = vbRed Else .Cells(i, "J").Interior.Color = xlNone End If Next i End With End Sub Function SheetExists(sheetName As String) As Boolean On Error Resume Next SheetExists = Not IsError(ThisWorkbook.Worksheets(sheetName)) On Error GoTo 0 End Function Όταν τον εκτελώ με την εντολή Run επιστρέφει το εξής: Compile error: ByRef argument type mismatch Επίσης μου εμφανίζει με κίτρινο χρώμα το: Sub ApplyFindCode() και με μπέ χρώμα το: cellValueK . Αν κάποιος ανακαλύψει τι φταίει: παράκληση ας μου δώσει ολόκληρο τον κώδικα και όχι αποσπασματικές διορθώσεις. Ευχαριστώ |
#2
| ||||
| ||||
Καλησπέρα Στέλιο, Θεωρώ πως το ζητούμενό σου όπως το περιγράφεις, είναι πολύ απλό για να χρησιμοποιήσεις τόσο πολύπλοκο κώδικα. Για αρχή, δοκίμασε στο ΑΝΤΙΚΕΙΜΕΝΑ!J2 τον τύπο: Κώδικας: =INDEX(Φύλλο2!B:B;MATCH(K2;Φύλλο2!C:C;0)) Αν παρόλα αυτά χρειάζεσαι υποχρεωτικά τον κώδικα, τότε θα τον ελέγξω για τα λάθη που αναφέρεις.
__________________ Your Curiosity Will Be The Death Of You! |
#3
| ||||
| ||||
Καλό μεσημέρι σε όλους! Στέλιο θα πρέπει να χρησιμοποιήσεις μια πιο αποδοτική και αξιόπιστη μέθοδο καταχώρησης ενός προϊόντος. Υπάρχουν πολλές πιθανότητες τυπογραφικού/ορθογραφικού σφάλματος κατά την καταχώρηση ενός όρου, πχ. "Ραδιόφώνου παρελκόμενα". Ωστόσο νομίζω ότι το ζητούμενο σου λύνεται με απλές συναρτήσεις αναφοράς του Excel. Έστω ότι στο παράδειγμα που επισύναψες υπάρχει το φύλλο "ΚΩΔΙΚΟΣ". Στο κελί J2 του φύλλου "ΑΝΤΙΚΕΙΜΕΝΑ" επικόλλησε τον παρακάτω τύπο: Κώδικας: =IFERROR(INDEX(ΚΩΔΙΚΟΣ!B:B;MATCH(K2;ΚΩΔΙΚΟΣ!C:C;0));"??") Αν δεν υπάρχει ο κωδικός θα σου επιστρέψει μηδέν (0) ενώ αν δεν ταιριάζει η περιγραφή του προϊόντος που θα πληκτρολογήσεις, θα σου επιστρέψει "??". Όσο για την επισήμανση σφάλματος στη στήλη J, μπορείς να χρησιμοποιήσεις μορφοποίηση υπό όρους. Αν χρειαστείς κάτι άλλο δώσε μας περισσότερα στοιχεία για να σε βοηθήσουμε. Καλή συνέχεια! Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
#4
| |||
| |||
Ευχαριστώ και πάλι Λειτουργεί η προτεινόμενη λύση σου, όμως όλες οι καταχωρήσεις που έχω είναι με κεφαλαία γράμματα και ορισμένες με μικρά ή και τα δύο. Πως το αντιμετωπίζουμε αυτό ?. |
#5
| ||||
| ||||
Δεν υπάρχει πρόβλημα αφού δεν γίνεται διάκριση ανάμεσα σε πεζά-κεφαλαία. Θα έχεις πρόβλημα αν δεν συμφωνούν τα φωνήεντα με σημεία στίξης. Φιλικά Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
#6
| |||
| |||
Αγαπητέ Τάσσο Ο η συνάρτηση: =IFERROR(INDEX(ΚΩΔΙΚΟΣ!B:B;MATCH(K2;ΚΩΔ? ?ΚΟΣ!C:C;0));"??") σε μένα δεν λειτουργεί. Μου επιστρέφει "??" Η λέξη "ΚΩΔΙΚΟΣ" γραφτηκε σωστά. Κοίταξε σε παρακαλώ τι δεν πάει καλά. Ευχαριστώ Ακυρο ΛΕΙΤΟΥΡΓΕΙ. είχα γράψει κατα λάθος "ΚΩΔΙΚΟΣ" αντί για το σωστό "ΚΩΔΙΚΟΙ" Ευχαριστώ Έχω να επισημάνω ότι θα ήταν πιό πρόσφορο και πολύ εύκολα αντιληπτό ότι αν : 1. Το επιστρεφόμενο "0" γινόταν κόκκινο και (περίπτωση που δεν υπάρχει κωδικός) 2. το "??" γινόταν κίτρινο. (περίπτωση λανθασμένου κωδικού) |
#7
| ||||
| ||||
Στέλιο μου όλα καλά. Η συνάρτηση θα λειτουργήσει μόνο αν στο παράδειγμα που επισύναψες υπάρχει το φύλλο "ΚΩΔΙΚΟΣ". Μάλλον θα πρέπει να μετονομάσεις το Φύλλο2 σε "ΚΩΔΙΚΟΣ" για να έχεις αποτελέσματα. Δες παράδειγμα στο συνημμένο. Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
#8
| |||
| |||
Χρώματα
Μπορείς να το κάνεις να βγάζει χρώματα ?
|
#9
| ||||
| ||||
Για την επισήμανση σφάλματος στη στήλη K, μπορείς να χρησιμοποιήσεις μορφοποίηση υπό όρους.
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
[VBA] Αυτόματη συμπλήρωση | mdragon | Excel - Ερωτήσεις / Απαντήσεις | 5 | 30-01-23 22:26 |
[Γενικά] Αυτόματη συμπλήρωση | beck | Excel - Ερωτήσεις / Απαντήσεις | 0 | 13-09-21 00:19 |
[Συναρτήσεις] Αυτόματη συμπλήρωση κελιού | Παναγιώτης Χρ | Excel - Ερωτήσεις / Απαντήσεις | 0 | 25-03-16 14:38 |
[ Φόρμες ] αυτόματη συμπλήρωση | eparast | Access - Ερωτήσεις / Απαντήσεις | 0 | 04-04-14 00:19 |
[Excel07] Αυτόματη Συμπλήρωση ΑΦΜ | ippotis | Excel - Ερωτήσεις / Απαντήσεις | 2 | 10-02-11 21:14 |
Η ώρα είναι 07:14.