Kuidas luua projekti ajakava Excelis "klõpsake ja lohistades".

Järgmises artiklis kirjeldatakse, kuidas kalendrit märgistada ja päringuid teha hiir. Märkige välja ja uurige kalendrit hiirega

*Reaalses maailmas avaksime vormi, et lugeda ja andmebaasi kirjutada sisukaid päevikukirjeid. See harjutus näitab lihtsalt paremklõpsamise mehhanismi ja leiab üksikasjad töölehelt endalt.

Enne alustamist paar sõna selgitust tabeli kohta, mille töötav mudel on leitav siin.Paar selgitust arvutustabeli kohta

Process

Võrgustikus lahtril klõpsamine tõstab selle lahtri esile ja muudab selle väärtust. Klõpsamine ja lohistamine tõstab esile vahemiku ja muudab selle väärtusi. Kui lahter on täidetud, siis see tühjendatakse, vastasel juhul täidetakse see, antud juhul tähega *.

Paremklõps seevastu on teabepäring valitud lahtrist.

Põhimõtteliselt kasutatakse kahte sündmust koos mitme mooduliga.

  • Worksheet_SelectionChange mida kutsutakse lahtri või lahtrite valimisel.
  • Worksheet_BeforeRightClick mida kutsutakse hiire parema nupuga.

Probleem

Lahtri paremklõpsamine kujutab endast ka valikut, käivitamist ValikMuuda. Peame laskma sellel sündmusel kulgeda, tühjendades valitud lahtri, enne kui see loovutab kontrolli EnneRightClick sündmus, kui asustame puhastatud lahtri uuesti. Kuid see toiming käivitab ValikMuudetud sündmus uuesti, mille kustutamine tuleb uuesti peatada.

Seda teeme tõeväärtusliku lipuga nimega blnLoading.

Sündmused

Sisesta töölehe taga olevasse koodiaknasse (st mitte moodulisse) järgmine.

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

See hoolitseb kahe sündmuse eest.

Viidatud kood

Lisage koodile järgmised vahemikud, täites ja tühjendades:

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

Võrguliinide hooldus

Sisestage rakendusse moodul. Lisage ruudustiku välimuse säilitamiseks järgmine kood. See kopeeriti makrosalvestist, koondamised ja kõik.

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

Kaitse katastroofi eest

Igaüks, kes tegeleb palju Exceli arendamisega, teab, et keerulised xlsm-tabelid võivad aeg-ajalt kokku kukkuda, rikkudes avatud dokumendi. Oodatust sagedamini ei saa kahjustatud töövihikut Exceli taastamisrutiinidega taastada. Kui varukoopiaid pole, on tehtud töö lost. Seda saab vältida tööks mõeldud tööriistadega Exceli parandus.

Autori sissejuhatus:

Felix Hooker on andmete taastamise ekspert DataNumen, Inc., mis on maailmas juhtiv andmete taastamise tehnoloogiate, sealhulgas rar remont ja SQL-i taastamise tarkvaratooted. Lisateabe saamiseks külastage www.datanumenCom

Kommentaarid on suletud.