Как да създадете график на проект с „Щракване и плъзгане“ в Excel

Споделете сега:

Следващата статия показва как да маркирате и разпитвате календар с мишка. Отбележете и разпитайте календар с мишката

* В реалния свят щяхме да отворим формуляр за четене и писане на значими дневници в база данни. Това упражнение просто разкрива механиката на щракване с десен бутон и намира подробностите от самия работен лист.

Преди да започнем, няколко думи за обяснение на електронната таблица, работещ модел на която може да се намери тук.Няколко обяснителни думи за електронната таблица

Процесът

Кликването върху клетка в мрежата ще подчертае тази клетка и ще промени нейната стойност. Щракнете и плъзнете ще маркира диапазон и ще промени стойностите му. Ако клетката е попълнена, тя ще бъде изчистена, в противен случай ще бъде попълнена, в този случай с „*“.

Щракването с десния бутон за разлика е заявка за информация от избраната клетка.

По същество се използват две събития, заедно с няколко модула.

  • Работен лист_SelectionChange което се нарича, когато са избрани клетка или клетки.
  • Работен лист_BeforeRightClick което се извиква от десния бутон на мишката.

Проблемът

Щракването с десен бутон върху клетка също представлява селекция, задействане SelectionChange. Ще трябва да оставим това събитие да се развие, като изчисти избраната клетка, преди да предаде контрола на Преди RightClick събитие, когато отново ще попълним изчистената клетка. Но това действие ще задейства Изборът е променен отново събитие, което трябва да бъде спряно от изчистването му за пореден път.

Това ще направим с булев флаг, наречен 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. Ако няма резервни копия, извършената работа се губи. Това може да се предотврати с инструменти, предназначени да изпълняват... Поправка в Excel.

Въведение на автора:

Феликс Хукър е експерт по възстановяване на данни в DataNumen, Inc., която е световен лидер в технологиите за възстановяване на данни, включително ремонт на RAR файлове и sql софтуерни продукти за възстановяване. За повече информация посетете WWW.datanumen.com

Споделете сега:

Коментарите са забранени.