Jak utworzyć harmonogram projektu za pomocą funkcji „kliknij i przeciągnij” w programie Excel

Podziel się teraz:

Poniższy artykuł pokazuje, jak zaznaczyć i przesłuchać kalendarz za pomocą mysz. Zaznacz i przesłuchaj kalendarz za pomocą myszy

*W prawdziwym świecie otworzylibyśmy formularz, aby odczytywać i zapisywać znaczące wpisy w dzienniku w bazie danych. To ćwiczenie po prostu ujawnia mechanikę kliknięcia prawym przyciskiem myszy i wyszukuje szczegóły z samego arkusza.

Zanim zaczniemy, kilka słów wyjaśnienia na temat arkusza kalkulacyjnego, którego działający model można znaleźć w tym miejscu.Kilka słów wyjaśnienia na temat arkusza kalkulacyjnego

Proces

Kliknięcie komórki w siatce podświetli tę komórkę i zmieni jej wartość. Kliknij i przeciągnij, aby podświetlić zakres i zmienić jego wartości. Jeśli komórka jest wypełniona, zostanie wyczyszczona, w przeciwnym razie zostanie wypełniona, w tym przypadku przez „*”.

Natomiast prawy_kliknięcie to żądanie informacji z wybranej komórki.

Zasadniczo używane są dwa zdarzenia wraz z kilkoma modułami.

  • Arkusz_WybórZmiana która jest wywoływana po wybraniu komórki lub komórek.
  • Arkusz_przed kliknięciem prawym przyciskiem który jest wywoływany przez prawy przycisk myszy.

Problem

Kliknięcie komórki prawym przyciskiem myszy również stanowi zaznaczenie, wyzwalanie WybórZmiana. Będziemy musieli pozwolić, aby to wydarzenie dobiegło końca, usuwając wybraną komórkę, zanim przekaże kontrolę Przed prawym kliknięciemk, kiedy ponownie wypełnimy wyczyszczoną komórkę. Ale to działanie spowoduje wywołanie WybórZmieniony ponownie zdarzenie, które należy powstrzymać przed jego ponownym wyczyszczeniem.

Zrobimy to za pomocą flagi boolowskiej o nazwie blnLoading.

Wydarzenia

Wprowadź następujące informacje w oknie kodu za arkuszem (tj. nie w module).

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

To zajmuje się dwoma zdarzeniami.

Odnośny kod

Dołącz do kodu następujące zakresy wypełniające i wyludniające:

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

Konserwacja linii siatki

Wstaw moduł do aplikacji. Dodaj następujący kod, aby zachować wygląd siatki. Zostało to skopiowane z rejestratora makr, redundancji i całej reszty.

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

Ochrona przed katastrofą

Każdy, kto dużo programuje w Excelu, wie, że złożone arkusze kalkulacyjne XLSM mogą od czasu do czasu ulegać awarii, uszkadzając otwarty dokument. W większej liczbie przypadków niż można by się spodziewać, uszkodzonego skoroszytu nie da się odzyskać za pomocą procedur odzyskiwania danych w Excelu. Brak kopii zapasowych powoduje utratę wykonanej pracy. Można temu zapobiec, korzystając z narzędzi zaprojektowanych do… Poprawka programu Excel.

Wprowadzenie autora:

Felix Hooker jest ekspertem w dziedzinie odzyskiwania danych w DataNumen, Inc., która jest światowym liderem w technologiach odzyskiwania danych, w tym naprawa rar i oprogramowanie do odzyskiwania sql. po więcej informacji odwiedź www.datanumen.com

Podziel się teraz:

Możliwość dodawania komentarzy nie jest dostępna.