Μετάβαση στο περιεχόμενο

Excel - Για όσους θέλουν να ψάξουν παραπέρα ...


gvarth

Recommended Posts

  • 3 weeks later...

Βελτίωση κώδικα προβολής Σχολίων όταν υπάρχουν παγωμένα κελιά

(show comments ignoring frozen cells)

 

ο κώδικας είναι:

 

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

Application.DisplayCommentIndicator = xlCommentIndicatorOnly

If Not (Target.Comment Is Nothing) Then doThings Target

End Sub

 

 

Χαίρετε συνάδελφοι

επανέρχομαι με μια βελτίωση προκειμένου να δουλεύει και με merged-cells. Απλά αντικαταστήστε τη ρουτίνα που έχω σε παράθεση με τη παρακάτω:

 

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

Application.DisplayCommentIndicator = xlCommentIndicatorOnly

 

' Fix to work on merged cells!!!

Dim StrPos As Integer

If Target.Cells.Count > 1 Then

StrPos = InStr(Target.AddressLocal, ":") - 1

Set a = Range(Left(Target.AddressLocal, StrPos))

Else

Set a = Target

End If

 

If Not (a.Comment Is Nothing) Then doThings Target

 

End Sub

 

ελπίζω να βοηθηθούν κάποιοι.

  • Upvote 2
Link to comment
Share on other sites

Καλημέρα, ξεκίνησα από μια απλή αλλαγή για να δουλεύει με πολύπλοκες επιλογές κελιών (πχ γραμμών ή στηλών) που πριν κόλλαγε, και τελικά με λίγες δοκιμές έφτασα στο απίστευτο!!!

Υπάρχουν πλέον 2 ρουτίνες, η SimpleVersion και η ExtremeVersion. H απλή κάνει τα παραπάνω με την διόρθωση ώστε να μην κολλάει πλέον.

Άλλαξα και την doThings ώστε να μην περιορίζεται στο activeCell αλλά να δουλεύει με το Target.

Σημειώνω μόνο ότι οι ρουτίνες SimpleVersion και ExtremeVersion τρέχουν αυτόματα μόνο αν αφαιρεθεί το header από την 1η τους γραμμή (όχι τα σχόλια) και μετονομαστούν σε Workbook_SheetSelectionChange. Αρχικά θα τρέχει η Simple αλλά με την εν-λόγω μετονομασία τρέχεί όποια θέλετε. Ενδέχεται να κολλήσει αν ξεχαστείτε και έχετε 2 Workbook_SheetSelectionChange(...) ταυτόχρονα.

Δοκιμάστε την Extreme με επιλογή που έχει πολλά κελιά με σχόλια.... και πείτε μου τα σχόλιά σας...

Ιδού ο νέος κώδικας:

 

' Simple version //HEADER:SimpleVERSION_

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

Application.DisplayCommentIndicator = xlCommentIndicatorOnly

 

' Will only work on 1st Cell of any selection-merged ect!!!

If Target.Cells.Count > 1 Then

Set a = Range(Target.Cells(1, 1).AddressLocal)

Else

Set a = Target

End If

 

If Not (a.Comment Is Nothing) Then doThings Target

 

End Sub

 

' Extreme Version //HEADER:ExtremeVERSION_

Private Sub ExtremeVERSION_Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

Application.DisplayCommentIndicator = xlCommentIndicatorOnly

Dim CountMyComments As Integer

 

' Fix to work on 1st item or ALL items of any selection of cells!!!

If Target.Cells.Count >= 1 Then

For Each b In Target

If Not (b.Comment) Is Nothing Then

doThings Range(b.AddressLocal), CountMyComments

CountMyComments = CountMyComments + 1

'Exit For ' Remove Comment at begin for processing of 1st Comment only

End If

Next

End If

 

End Sub

 

' Uppon click move Comment to center of window (almost center)

'

' Edited to Clarify code, Transfer to Workbook (original worked in sheets only)

' so that same code performs for all sheets...

'

' Send SINGLE-CELL Ranges only for the following to work

'

' Original from www.contextures.com/xlcomments03.html

' Edited by Apostolos Goulandris

Sub doThings(ByVal Target As Range, Optional ByVal CmntCount As Integer)

 

Dim cTop As Long, cWidth As Long, HeightAdd As Long, WidthAdd As Long

 

If Not (Target.Comment Is Nothing) Then

With ActiveWindow.VisibleRange

cTop = .Top + .Height / 2

cWidth = .Left + .Width / 2

End With

 

With Target.Comment.Shape

If CmntCount > 0 Then

HeightAdd = .Height / 4 * (Int((11) * Rnd - 7))

WidthAdd = .Width / 4 * (Int((11) * Rnd - 6))

End If

.Top = cTop - .Height / 2 + HeightAdd

.Left = cWidth - .Width / 2 + WidthAdd

End With

Target.Comment.Visible = True

End If

 

End Sub

Edited by apostolos55
  • Upvote 1
Link to comment
Share on other sites

παιδια να ρωτησω κατι δεν πρεπει να ειναι δυσκολο αλλα δεν το βρηκα

 

εχω 3 φυλλα στο 1 βαζω στοιχεια τα αλλα 2 τραβανε τα δεδομενα απο το πρωτο

 

θελω να κλειδωσω την μορφοποίηση των 2 τελευταιων φυλλων για να μπορω να εχω και μια επισκοπηση της εκτυπωσης

εν κατακλειδι θελω να κλειδωσω το zoom in/out και τις αλλαγες στο πλατος στηλης και στο ύψος γραμμης

 

πως το κανω ρε παιδια;

 

 

(πολυ χρησιμος ο νεος κωδικας apostolos55, το δοκιμασα ελπιζω να χρησιμευσει αμεσα keep on good working)

Link to comment
Share on other sites

θελω να κλειδωσω την μορφοποίηση των 2 τελευταιων φυλλων για να μπορω να εχω και μια επισκοπηση της εκτυπωσης

εν κατακλειδι θελω να κλειδωσω το zoom in/out και τις αλλαγες στο πλατος στηλης και στο ύψος γραμμης

 

Κλειδώνεις τα 2 τελευταία φύλλα ολόκληρα και όταν κάνεις την προστασία φύλλου απεπιλέγεις τα: format rows, columns, ίσως και

τα insert rows, columns. Όταν κλειδωθεί το φύλλο τότε κανείς δεν θα μπορεί να αλλάξει το πλάτος ή το ύψος των κελλιών.

 

Σου γράφω να κλειδώσεις ολόκληρο το φύλλο για τον εξής απλό λόγό: αν έχω κλειδωμένα πχ τα κελλιά A1:B2, και έχω αποεπιλέξει

τα format rows, columns, και τα insert rows, columns κατά το κλείδωμα του φύλλου, τότε θα δω ότι δεν μπορώ να αλλάξω το πλάτος ή το ύψος των κελιών (με τον σταυρό που εμφανίζεται στις γραμμές και τις στήλες). Όμως, αν κάποιος πάει στο κελλί Α3 και πχ μεγαλώσει την γραμματοσειρά, τότε θα αλλάξει το ύψος της γραμμής. Δεν ξέρω αν έγινα πλήρως κατανοητός...

 

Όσο για το zoom, μια σκέψη είναι να βάλεις πχ έναν κώδικα (event για την ακρίβεια) στο φύλλο ώστε όταν πχ κάποιος πάει να αλλάξει κάτι αυτό να επιστρέψει στο zoom που θα του έχεις προδιαγράψει:

 

Private Sub Worksheet_Change(ByVal Target As Range)

ActiveWindow.Zoom = 80

End Sub

 

Δεν ξέρω αν σε βοήθησα καθόλου....

  • Upvote 2
Link to comment
Share on other sites

τα κλειδωματα τα ανακαλυψα ποια με βολευουν καλυτερα με δοκιμες

 

 

για το ζοομ δεν ειχα απαντηση αλλα να που υπαρχει λυση (μεσω VBA) θα δοκιμασω και θα επανελθω

 

Samdreamth σε ευχαριστω

Link to comment
Share on other sites

  • 1 month later...

Καλησπέρα σας,

Έχω ένα πίνακα με 3 στήλες και 200 γραμμές. Η 2η στήλη περιέχει όνομα στα Ελληνικά και η 3η στήλη τιμή.

1) Θέλω μέσω list οταν επιλέγεται ένα όνομα από τη 2η στήλη να μου εμφανίζεται στο διπλανό κελί η αντίστοιχη τιμή.

2) Υπάρχει τρόπος τα δεδομένα για τη List να τα παίρνω από άλλο φύλλο? Για να γίνω πιο σαφής έχω 20 φύλλα και πρέπει να χρησιμποιήσω και στα 20 τα ίδια στοιχεία του πίνακα και δε θέλω να τον ενσωματώσω σε κάθε φύλλο καθώς αυτός ο πίνακας θα ενημερώνεται συχνά και θα έιναι δύσκολο να επεμβαίνω σε όλα τα φύλλα.

Μπορεί κάποιος να βοηθήσει?

Link to comment
Share on other sites

Καλησπέρα και σε σας.

 

Στο 1ο σκέλος του ερωτήματός σας , την απάντηση δίνει η VLOOKUP η οποία μάλιστα μπορεί να συνδυαστεί με περιοχή δεδομένων που ΔΕΝ ανήκει στο ίδιο φύλλο με τα "πρωτογενή" δεδομένα .

 

Ουσιαστικά , η απάντηση στο 2ο σκέλος είναι ΝΑΙ . Μάλιστα , μπορεί να υπάρχει ένα ξεχωριστό φύλλο π.χ. DATA_TAB και εκεί να υπάρχει η λίστα των δεδομένων απ' όπου θα "διαβάζονται" και θα αντλούνται τα στοιχεία που επιθυμείτε. Η λίστα αυτή θα πρέπει να είναι ταξινομημένη κατ' αύξουσα σειρά με βάση την αριστερή στήλη της. Καλό θα είναι να είναι ορισμένη με δυναμικό τρόπο έτσι ώστε όταν προσθέτετε δεδομένα , να υπάρχει αυτόματη ενημέρωση ώστε να μην χρειάζεται να δηλώσετε νέα περιοχή λήψης δεδομένων σε κάθε ενημέρωση των δεδομένων σας.

 

Για δυναμικές περιοχές στο Excel , διαβάστε εδώ ή εδώ κατευθείαν από την επίσημη βοήθεια της Microsoft.

 

Πληροφορίες καθώς και κάποιο παράδειγμα για την VLOOKUP θα βρείτε εδώ. Επίσης και εδώ.

 

Αν θέλετε , "ανεβάστε" σαν συνημμένο κάποιο τμήμα του αρχείου σας μήπως και υπάρξει πιο συγκεκριμένη βοήθεια.

Edited by gvarth
Dynamic Ranges
Link to comment
Share on other sites

Ευχαριστώ για την άμεση ανταπόκριση. Όσον αφορά το πρώτο σκέλος με τη βοήθεια σας τα κατάφερα. Για το δεύτερο όμως δεν πως αντλούνται τα δεδομένα από τη στιγμή που η εντολή validation-->list παίζει μόνο με δεδομένα από το ίδιο φύλλο?

Link to comment
Share on other sites

Καλημέρα.

 

Δεν παίζει μόνο με δεδομένα από το ίδιο φύλλο . Ουσιαστικά , ΔΕΝ υπάρχει περιορισμός . Δεν είναι όμως προφανές το πως επιτυγχάνεται αυτό.

 

Τα δεδομένα θα είναι σε ξεχωριστό φύλλο εργασίας . Η περιοχή στο φύλλο όπου αντλούνται τα δεδομένα , και ειδικά τα στοιχεία που ανήκουν στην 1η στήλη, έχει ξεχωριστό όνομα (λέγεται DataColumn και φαίνεται στην 1η εικόνα) και σ' αυτό το όνομα αναφερόμαστε στη λίστα επικύρωσης άσχετα αν καλούμε τα στοιχεία της λίστας από το Sheet1 , Sheet2 κ.λ.π. Δείτε τις εικόνες που επισυνάπτω και ειδικά την 2η , παρατηρείστε το σύμβολο του "=" πριν από το όνομα της περιοχής των δεδομένων της 1ης στήλης και πειραματιστείτε με το αρχείο που ανέβασα (αφού το αποσυμπιέσετε). Προς το παρόν , δεν έχει γίνει κλήση της VLOOKUP , αυτό που σας ανέβασα είναι απλά ένα παράδειγμα. Δείτε το και θα επανέλθουμε.

 

Edit : Πρόσθεσα άλλο ένα αρχείο όπου υπάρχει μια απλή δοκιμή με τη χρήση της VLOOKUP . Δείτε τους τύπους που υπάρχουν ώστε να γίνει περισσότερο κατανοητή η διαδικασία.

post-341-0-40214400-1327644952_thumb.png

post-341-0-97904800-1327644961_thumb.png

Example-ReadData.zip

Example with VLOOKUP.zip

Edited by gvarth
Προσθήκη νέου παραδείγματος
  • Upvote 1
Link to comment
Share on other sites

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε προκειμένου να αφήσετε κάποιο σχόλιο

Πρέπει να είστε μέλος για να μπορέσετε να αφήσετε κάποιο σχόλιο

Δημιουργία λογαριασμού

Κάντε μια δωρεάν εγγραφή στην κοινότητά μας. Είναι εύκολο!

Εγγραφή νέου λογαριασμού

Σύνδεση

Εάν έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
×
×
  • Create New...

Σημαντικό

Χρησιμοποιούμε cookies για να βελτιώνουμε το περιεχόμενο του website μας. Μπορείτε να τροποποιήσετε τις ρυθμίσεις των cookie, ή να δώσετε τη συγκατάθεσή σας για την χρήση τους.