PDA

Επιστροφή στο Forum : vba excel πρόβλημα με συναρτήσεις



soulhealer
25-02-11, 01:51
γειά σας θέλω να κάνω μια εφαρμογή στο excel όπου να μου αθροίζει τιμές κελιών που έχουν το ίδιο χρώμα (π.χ. κόκκινο)...
έχω αυτό αλλά δεν μου κάνει τις αλλαγές μόνο του...


Function SumRed(SelectedCells As Range)
' Adds the values of the cells where the font colour is red(3).
Dim Cell As Object
Dim x As Double
x = 0
For Each Cell In SelectedCells
If Cell.Font.ColorIndex = 3 Then
x = x + Cell.Value
End If
Next Cell
SumRed = x
End Function

aeonios
25-02-11, 08:16
Θα το έγραφα ως εξής:
Function SumRed(rColor As Range, rRange As Range)

Dim rCell As Range
Dim lCol As Long
Dim vResult
lCol = rColor.Interior.ColorIndex

For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = WorksheetFunction.SUM(rCell,vResult)
End If
Next rCell
SumRed = vResult

End Function

Oπότε αν εγώ γράψω =SumRed($A$1,$A$1:$A$12) θα ψάξει στο range a1:a12 να βρει το χρώμα που ψάχνω και υποθέτω πως κόκκινο έχει το a1 κελί αθροίζοντας τις τιμές των κελιών. Μπορείς φυσικά να το γενικεύσεις για κάθε επιθυμητό χρώμα.

soulhealer
25-02-11, 11:46
Νικ ευχαριστώ για την απάντηση αλλά αν κάνω αυτό τότε μου βγάζει σφάλμα..:crying:
εγώ στην αρχή θέλω να γράφω με μαύρη γραμματοσειρά.. και πιθανώς μετά από μερικές μέρες να θελήσω να αλλάξω χρώμα στην γραμματοσειρά (για ευδιάκριτο αποτέλεσμα) σε μερικά κελιά.. όταν λοιπόν αλλάζει χρώμα η γραμματοσειρά τότε θέλω να κάνει το άθροισμα.. όπως το έχω κάνει εγώ, την κάνει την αλλαγή χωρίς σφάλματα, απλά πρέπει μόλις αλλάξω χρώμα στο κελί να πατήσω σε διπλανό κελί το πλήκτρο "delete" (φαντάζομαι κάτι σαν refresh στο range που πατήθηκε το delete)..

aeonios
25-02-11, 12:13
Νικ ευχαριστώ για την απάντηση αλλά αν κάνω αυτό τότε μου βγάζει σφάλμα..:crying:
εγώ στην αρχή θέλω να γράφω με μαύρη γραμματοσειρά.. και πιθανώς μετά από μερικές μέρες να θελήσω να αλλάξω χρώμα στην γραμματοσειρά (για ευδιάκριτο αποτέλεσμα) σε μερικά κελιά.. όταν λοιπόν αλλάζει χρώμα η γραμματοσειρά τότε θέλω να κάνει το άθροισμα.. όπως το έχω κάνει εγώ, την κάνει την αλλαγή χωρίς σφάλματα, απλά πρέπει μόλις αλλάξω χρώμα στο κελί να πατήσω σε διπλανό κελί το πλήκτρο "delete" (φαντάζομαι κάτι σαν refresh στο range που πατήθηκε το delete)..

Παλιότερα αυτό που ήθελες το έκανα με τη δήλωση Application.Volatile στην αρχή των δηλώσεων της vba οπότε πατώντας το F9 θεωρητικά θα μπορείς να κάνεις το datasheet recalculation χωρίς να χρειάζεται να πατάς στο διπλανό κελί κτλ. Sorry για τον δικό μου κώδικα αλλά δεν έχω το excel να τον τσεκάρω εδώ θα το δω το βράδυ στο σπίτι τι πάει στραβά. Δες και ένα σχετικό λινκ για το πως υπολογίζει το engine του Excel τις τιμές στα κελιά: http://www.decisionmodels.com/calcsecrets.htm

soulhealer
27-02-11, 10:04
nik το Application.Volatile δουλέυει μια χαρά πατώντας F9 κανει recalc... αναρωτιόμουν πως αυτό θα μπορούσε να γίνει τελείως αυτόματα...
δηλαδή κάθε φορά που θα επιλέξω το κέλι (για να αλλάξω χρώμα στην τιμή του), τότε να τρέχει μια συνάρτηση και να κάνει recalc σε όλο το
εύρως τιμών που θα είχα (π.χ. Β2:Β14)

aeonios
27-02-11, 16:41
Χρειάζεσαι κάτι στο στύλ ActiveSheet.Calculate ή πιθανόν να παίζει και το Activesheet.recalcκαι θα κάνεις αυτόματα recalculation στο φύλλο.
Ποιο κομψά γραμμένο:
With ActiveSheet
.EnableCalculation = True
.Calculate
End With

soulhealer
01-03-11, 00:28
ευχαριστώ νικ... το θέμα είναι ότι το calculation δουλεύει μόνο αν αλλάξει μια τιμή σε ένα κελί.. και όχι μόνο με αλλαγή στο χρώμα..
αλλά αν αλλάξω το χρώμα, σώσω το .xls και το ξανανοίξω τότε έχουν τοποθετηθεί όλες οι αλλαγές με τα σωστά νούμερα και χρώματα..!!
άρα το πρόβλημα λύθηκε!!