Το ακόλουθο άρθρο δείχνει τον τρόπο σήμανσης και ανάκρισης ενός ημερολογίου με το ποντίκι. 
* Στον πραγματικό κόσμο, θα ανοίγαμε μια φόρμα για να διαβάζουμε και να γράφουμε σημαντικές καταχωρήσεις ημερολογίου σε μια βάση δεδομένων. Αυτή η άσκηση απλώς αποκαλύπτει τους μηχανισμούς του δεξιού κλικ και βρίσκει τις λεπτομέρειες από το ίδιο το φύλλο εργασίας.
Πριν ξεκινήσουμε, μπορούμε να βρούμε μερικά λόγια εξήγησης για το υπολογιστικό φύλλο, ένα λειτουργικό μοντέλο εδώ.
Η διαδικασία
Κάνοντας κλικ σε ένα κελί εντός του πλέγματος θα επισημανθεί αυτό το κελί και θα αλλάξει την αξία του. Το Click-and-drag θα επισημάνει ένα εύρος και θα αλλάξει τις τιμές του. Εάν ένα κελί συμπληρώνεται, θα εκκαθαριστεί, διαφορετικά θα συμπληρωθεί, στην περίπτωση αυτή από ένα "*".
Ένα δεξί κλικ σε αντίθεση είναι ένα αίτημα για πληροφορίες από το επιλεγμένο κελί.
Υπάρχουν ουσιαστικά δύο συμβάντα που χρησιμοποιούνται, μαζί με πολλές ενότητες.
- Φύλλο εργασίας_Επιλογή αλλαγής το οποίο καλείται όταν επιλέγεται ένα κελί ή κελιά.
- Φύλλο εργασίας_BeforeRightΚάντε κλικ που καλείται με το δεξί κουμπί του ποντικιού.
Το πρόβλημα
Το δεξί κλικ στο κελί αποτελεί επίσης επιλογή, ενεργοποίηση Επιλογή αλλαγής. Θα πρέπει να αφήσουμε αυτό το συμβάν να τρέξει στην πορεία του, καθαρίζοντας το επιλεγμένο κελί πριν παραδώσει τον έλεγχο στο BeforeRightClicσυμβάν k, όταν θα επαναπροσδιορίσουμε το εκκαθαρισμένο κελί. Αλλά αυτή η ενέργεια θα ενεργοποιήσει το Επιλογή Αλλαγή εκδήλωση ξανά, το οποίο πρέπει να σταματήσει να το εκκαθαρίζει ξανά.
Αυτό θα κάνουμε με μια boolean σημαία που ονομάζεται blnLoading.
Οι εκδηλώσεις
Εισαγάγετε τα ακόλουθα στο παράθυρο κώδικα πίσω από το φύλλο εργασίας (δηλαδή όχι σε μια ενότητα).
Option Explicit
Dim blnLoading As Boolean
Dim sPhase As String
Dim currCellValue As String
Dim dDate As Date
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveCell.Row > 14 And ActiveCell.Row < 25 Then
If ActiveCell.Column > 4 And ActiveCell.Column < 47 Then 'selection is valid
On Error Resume Next
currCellValue = Target.Value 'get the target value from (ByVal Target As Range)
If blnLoading = True Then 'a value of True will force an exit from this event
blnLoading = False
Exit Sub
End If
sPhase = Cells(ActiveCell.Row, 1)
If sPhase = "" Then Exit Sub
If ActiveCell = "*" Then 'if the cell is populated, clear the selected range
Call ClearRange
Call UnblockCalendar
Else
Call PopulateRange
End If
Call RedrawCells
Range("A1").Select 'revive the SelectionChange event by changing selection.
Exit Sub
End If
End If
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If currCellValue = "*" Then 'picked up by the previous event BEFORE it cleared it;
'This means this is a valid diary entry with detail.
blnLoading = True 'this will prevent the SelectionChange event (above) from running.
Target.Select
'currCell = Target.Address
'Range(currCell).Select
Target.Value = "*" 're-instate the value of the cell, since SelectionChange has cleared it
Call PopulateRange
dDate = Cells(13, ActiveCell.Column)
sPhase = Cells(ActiveCell.Row, 1)
MsgBox dDate & " - " & sPhase
Cancel = True 'suppress Excel’s standard right_click menus
End If
Range("A1").Select
blnLoading = False
End Sub
Αυτό φροντίζει για τις δύο εκδηλώσεις.
Κωδικός αναφοράς
Προσθέστε τα ακόλουθα, συμπληρώνοντας και αποθέματα εύρη, στον κώδικα:
Sub ClearRange() Selection.FormulaR1C1 = "" With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With End Sub Sub PopulateRange() Selection.FormulaR1C1 = "*" With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorLight2 .TintAndShade = 0.799981688894314 .PatternTintAndShade = 0 End With End Sub
Συντήρηση πλεγμάτων
Εισαγάγετε μια ενότητα στην εφαρμογή. Προσθέστε τον ακόλουθο κώδικα για τη διατήρηση της εμφάνισης του πλέγματος. Αυτό αντιγράφηκε από τη συσκευή εγγραφής μακροεντολών, τις απολύσεις και όλα.
Option Explicit Sub UnblockCalendar() Selection.FormulaR1C1 = "" With Selection Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone Selection.Borders(xlEdgeLeft).LineStyle = xlNone Selection.Borders(xlEdgeTop).LineStyle = xlNone Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone End With End Sub Sub RedrawCells() Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With End Sub
Διασφάλιση κατά της καταστροφής
Όποιος κάνει πολλή ανάπτυξη του Excel θα γνωρίζει ότι πολύπλοκα υπολογιστικά φύλλα xlsm ενδέχεται να παρουσιάζουν σφάλματα κατά καιρούς, καταστρέφοντας το ανοιχτό έγγραφο. Σε περισσότερες περιπτώσεις από το αναμενόμενο, το κατεστραμμένο βιβλίο εργασίας δεν μπορεί να ανακτηθεί από τις ρουτίνες ανάκτησης του Excel. Εάν δεν υπάρχουν αντίγραφα ασφαλείας, η εργασία που έχει γίνει είναι lost. Αυτό μπορεί να αποφευχθεί με εργαλεία σχεδιασμένα για απόδοση Επιδιόρθωση Excel.
Εισαγωγή συγγραφέα:
Ο Felix Hooker είναι ειδικός στην ανάκτηση δεδομένων DataNumen, Inc., η οποία είναι ο παγκόσμιος ηγέτης στις τεχνολογίες ανάκτησης δεδομένων, συμπεριλαμβανομένων rar επισκευή και sql προϊόντα λογισμικού ανάκτησης. Για περισσότερες πληροφορίες επισκεφθείτε www.datanumen.com
