Πώς να δημιουργήσετε ένα πρόγραμμα έργου με "Κάντε κλικ και σύρετε" στο Excel

Κοινή χρήση τώρα:

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

* Στον πραγματικό κόσμο, θα ανοίγαμε μια φόρμα για να διαβάζουμε και να γράφουμε σημαντικές καταχωρήσεις ημερολογίου σε μια βάση δεδομένων. Αυτή η άσκηση απλώς αποκαλύπτει τους μηχανισμούς του δεξιού κλικ και βρίσκει τις λεπτομέρειες από το ίδιο το φύλλο εργασίας.

Πριν ξεκινήσουμε, μπορούμε να βρούμε μερικά λόγια εξήγησης για το υπολογιστικό φύλλο, ένα λειτουργικό μοντέλο εδώ.Λίγα λόγια εξήγησης για το υπολογιστικό φύλλο

Η διαδικασία

Κάνοντας κλικ σε ένα κελί εντός του πλέγματος θα επισημανθεί αυτό το κελί και θα αλλάξει την αξία του. Το 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

Κοινή χρήση τώρα:

Τα σχόλια είναι κλειστά.