MastroGiannis Δημοσ. 5 Φεβρουαρίου 2009 Δημοσ. 5 Φεβρουαρίου 2009 Καλημέρα φίλε engant! Αντέγραψε τον παρακάτω κώδικα: >Function gfrv(r As Range) As String 'watch for line wrapping in the next two statements 'there should be two nonblank, noncomment lines 'starting with Const followed by a blank line Const crep As String = "(([A-Za-z0-9_]+|'[^']+')!)?\$?[A-Z]{1,2}\$?[0-9]+" Const mrep As String = _ "(([A-Za-z0-9_]+:[A-Za-z0-9_]+|'[^']+:[^']+')\!)|(\$?[A-Z]{1,2}\$?[0-9]+:\$ ?" _ & "[A-Z]{1,2}\$?[0-9]+)" Dim v As Variant, n As Long Dim regex As Object, matches As Object, m As Object Application.Volatile 'modify as needed gfrv = Mid(r.Formula, 2) Set regex = CreateObject("vbscript.regexp") regex.Global = True regex.Pattern = mrep Set matches = regex.Execute(gfrv) If matches.Count > 0 Then Exit Function regex.Pattern = crep Set matches = regex.Execute(gfrv) n = matches.Count - 1 For n = n To 0 Step -1 Set m = matches.Item(n) v = Evaluate(m.Value) gfrv = Left(gfrv, m.FirstIndex) & CStr(v) & _ Mid(gfrv, m.FirstIndex + m.Length + 1) Next n End Function Πάτα δεξί κλικ στο φύλλο και "Προβολή κώδικα" (ή Alt+F11). Στο περιβάλλον της Microsoft Visual Basic πάτα "Insert-->Module". Θα εμφανισθεί μια νέα λειτουργική μονάδα κώδικα (π.χ. Module1). Εκεί πρέπει να επικολλήσεις τον κώδικα που μόλις αντέγραψες. Τώρα πιστεύω θα δουλεύουν όλα σωστά και η συνάρτηση gfrv θα εμφανίζεται στο παράθυρο του Excel "Εισαγωγή συνάρτησης" στην κατηγορία "Συναρτήσεις χρήστη".
engant Δημοσ. 5 Φεβρουαρίου 2009 Μέλος Δημοσ. 5 Φεβρουαρίου 2009 Καλημέρα φίλε engant! Αντέγραψε τον παρακάτω κώδικα: >Function gfrv(r As Range) As String 'watch for line wrapping in the next two statements 'there should be two nonblank, noncomment lines 'starting with Const followed by a blank line Const crep As String = "(([A-Za-z0-9_]+|'[^']+')!)?\$?[A-Z]{1,2}\$?[0-9]+" Const mrep As String = _ "(([A-Za-z0-9_]+:[A-Za-z0-9_]+|'[^']+:[^']+')\!)|(\$?[A-Z]{1,2}\$?[0-9]+:\$ ?" _ & "[A-Z]{1,2}\$?[0-9]+)" Dim v As Variant, n As Long Dim regex As Object, matches As Object, m As Object Application.Volatile 'modify as needed gfrv = Mid(r.Formula, 2) Set regex = CreateObject("vbscript.regexp") regex.Global = True regex.Pattern = mrep Set matches = regex.Execute(gfrv) If matches.Count > 0 Then Exit Function regex.Pattern = crep Set matches = regex.Execute(gfrv) n = matches.Count - 1 For n = n To 0 Step -1 Set m = matches.Item(n) v = Evaluate(m.Value) gfrv = Left(gfrv, m.FirstIndex) & CStr(v) & _ Mid(gfrv, m.FirstIndex + m.Length + 1) Next n End Function Πάτα δεξί κλικ στο φύλλο και "Προβολή κώδικα" (ή Alt+F11). Στο περιβάλλον της Microsoft Visual Basic πάτα "Insert-->Module". Θα εμφανισθεί μια νέα λειτουργική μονάδα κώδικα (π.χ. Module1). Εκεί πρέπει να επικολλήσεις τον κώδικα που μόλις αντέγραψες. Τώρα πιστεύω θα δουλεύουν όλα σωστά και η συνάρτηση gfrv θα εμφανίζεται στο παράθυρο του Excel "Εισαγωγή συνάρτησης" στην κατηγορία "Συναρτήσεις χρήστη". ναι αλλά δεν εμφανιζει αποτέλεσμα...σαν να έχει λάθος αυτός ο κώδικας...
MastroGiannis Δημοσ. 5 Φεβρουαρίου 2009 Δημοσ. 5 Φεβρουαρίου 2009 Προφανώς δεν τρέχουν οι μακροεντολές λόγω υψηλού επιπέδου ασφαλείας. Θέσε αυτό το επίπεδο σε Μεσαίο (Excel2003: "Εργαλεία-->Μακροεντολή-->Ασφάλεια...") και ενεργοποίησε τις μακροεντολές του βιβλίου κατά το άνοιγμά του. Στο συνημμένο θα βρεις και ένα παράδειγμα. gfrv.zip
engant Δημοσ. 5 Φεβρουαρίου 2009 Μέλος Δημοσ. 5 Φεβρουαρίου 2009 Προφανώς δεν τρέχουν οι μακροεντολές λόγω υψηλού επιπέδου ασφαλείας.Θέσε αυτό το επίπεδο σε Μεσαίο (Excel2003: "Εργαλεία-->Μακροεντολή-->Ασφάλεια...") και ενεργοποίησε τις μακροεντολές του βιβλίου κατά το άνοιγμά του. Στο συνημμένο θα βρεις και ένα παράδειγμα. σε ευχαριστω...δουλευει οντως -----Προστέθηκε 5/2/2009 στις 07 : 25 : 00----- δουλευει πάρα πολυ καλά αυτό το module ομως 1. Οταν οι αριθμοι που εισαγουμε ειναι πχ 3.60 μου το βγαζει 3.6...θα ήθελα και τα 2 δεκαδικά να φαίνονται 2. Όταν έχω αριθμο σε μορφή κλάσματος πχ 1/2, μου το βγάζει 0.5...Πως θα γίνει να φαίνονται σαν κλάσμα??
MastroGiannis Δημοσ. 6 Φεβρουαρίου 2009 Δημοσ. 6 Φεβρουαρίου 2009 σε ευχαριστω...δουλευει οντως -----Προστέθηκε 5/2/2009 στις 07 : 25 : 00----- δουλευει πάρα πολυ καλά αυτό το module ομως 1. Οταν οι αριθμοι που εισαγουμε ειναι πχ 3.60 μου το βγαζει 3.6...θα ήθελα και τα 2 δεκαδικά να φαίνονται 2. Όταν έχω αριθμο σε μορφή κλάσματος πχ 1/2, μου το βγάζει 0.5...Πως θα γίνει να φαίνονται σαν κλάσμα?? Το πρώτο θέμα λύνεται με την αντικατάσταση της γραμμής κώδικα v = Evaluate(m.Value) (5η γραμμή από το τέλος) με την παρακάτω: v = Format(Evaluate(m.Value), "#,##0.00") Στο δεύτερο θέμα που θέτεις, sorry αλλά δεν μπορώ να σε παρακολουθήσω. Αν Α1=1 και Β1 = 2 τότε για τον τύπο "=(Α1/Β1)*1/2" μας επιστρέφει "(1,00/2,00)*1/2". Το 0,5 που σου προκύπτει;
engant Δημοσ. 6 Φεβρουαρίου 2009 Μέλος Δημοσ. 6 Φεβρουαρίου 2009 Το πρώτο θέμα λύνεται με την αντικατάσταση της γραμμής κώδικαv = Evaluate(m.Value) (5η γραμμή από το τέλος) με την παρακάτω: v = Format(Evaluate(m.Value), "#,##0.00") Στο δεύτερο θέμα που θέτεις, sorry αλλά δεν μπορώ να σε παρακολουθήσω. Αν Α1=1 και Β1 = 2 τότε για τον τύπο "=(Α1/Β1)*1/2" μας επιστρέφει "(1,00/2,00)*1/2". Το 0,5 που σου προκύπτει; Σε ευχαριστώ για το πρώτο...όσον αναφορά το 2ο σκέλος εγω που το δοκιμασα με το δικο σου παραδειγμα το 1/2 μου επιστρεφει 0.5 και οχι 1/2....Αν c1 = 1/2 και κανω α1*β1*c1=...Αλλά μάλλον θα πρέπει να το αντικαθιστώ στον τύπο το κελί με το 1/2 για να είμαι εντάξει..ούτως άλλωστε πολύ με βοήθησε ο τύπος...Σας ευχαριστώ όλους για τη πολύτιμη βοήθειά σας...
engant Δημοσ. 16 Ιουλίου 2009 Μέλος Δημοσ. 16 Ιουλίου 2009 Το πρώτο θέμα λύνεται με την αντικατάσταση της γραμμής κώδικαv = Evaluate(m.Value) (5η γραμμή από το τέλος) με την παρακάτω: v = Format(Evaluate(m.Value), "#,##0.00") Χρησιμοποιω αυτο για δεκαδικα(2) και δεν μου τα βγαζει οταν πχ βάζω 2 να μου βγάζει 2.00....ξέρει κανείς κάτι??
engant Δημοσ. 18 Αυγούστου 2009 Μέλος Δημοσ. 18 Αυγούστου 2009 Υπάρχει ένα πρόβλημα με τον τυπο αυτόν...όταν το γράφω στο excel που έχω στο pc μου και το ενσωματώνω στο αρχειο, όλα είναι οκ. όταν όμως ανοίξω το ίδιο αρχείο σε κάποιο άλλο pc, είτε με ίδιο excel(πχ 2003) είτε με κάποιο άλλο, τότε βλέπω ότι δεν μου εμφανίζει την παράσταση(στη θέση της βγαίνει #ΟΝΟΜΑ#)...Μήπως μπορεί να βοηθήσιε κάποιος να λυθεί αυτό το ζήτημα??
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.